때로는 깊게, 때로는 넓게

저 이거 배워도 될까요?

John Cho
4 min readOct 17, 2019

아무래도 채용도 하고, 개발자 생태계 관련된 일도 하다보니 개발자 성장에 대한 질문을 자주 받곤 한다. 최근에는 Flutter 관련 커뮤니티에 종종 있다보니 자주 듣는 질문은 “네이티브가 나을까요? Flutter가 나을까요?” 다.

여기에 대한 내 답변은 2012년으로 돌아간다.

실력에 대한 환상

당시 나는 SK 커뮤니케이션즈에 고졸 신입 특채로 들어갔다. 당시에 나는 개발자라고 부르기에 애매했고, C 언어를 약간 할 줄 알고, HTML + CSS를 약간 할 줄 알고, PHP를 약간 할 줄아는 그야말로 애매한 위치에 있었다.

하지만 그 때 한편으로는 “내 손으로 서비스 하나는 다 만들 수 있으니 나름 자부심을 가져도 돼" 라고 생각했던 거 같기도 하다. 정작 깊이는 없고, 이 언어가 왜 이렇게 동작하는 지도 모르고, 정말 하다못해 세션과 쿠키의 차이조차 명확하게 모르던 시절이다.

자신의 실력이 뛰어나다고 확신이 없을 때일 수록 본인의 실력을 과장하게 되는 법이다. 그 때 나는 흔히 말해 우쭐거리고 있었다.

되게 뛰어나다고 생각하지만 현실은 방금 막 나온 5렙 파이리

언어는 어느정도 진화를 거치면서 비슷한 패러다임을 거치고 있다고 생각한다. 물론 언어가 지향하는 패러다임에 따라서 약간씩 달라지는 건 있지만 개발에서 필수로 알아야하는 지식은 대부분 비슷해진다.

그러니 다시 한번 “네이티브가 나을까요? Flutter가 나을까요?” 라고 물어보면 “일단 아무거나 잡고 깊게 파보아라" 라고 답변할 것이다.

기술 전망

아마 대부분 위와 같은 질문의 키 포인트는 “이 언어 && 프레임워크 && 라이브러리가 정말 이후에도 많이 쓰일까요?” 일 거라 생각한다. 그럼 반대로 “만약 그 언어를 못쓰게 되면 당신은 취업할 수 없는가? 새로운 언어를 배울 수 없는가? 새로운 프레임워크, 라이브러리를 배울 수 없는가?”

국내 기업은 잘 모르겠으나 해외 채용 공고를 보면 요즘 부쩍 Golang 백엔드에 대한 수요가 높아지고 있다는 걸 알 수 있다. 그러면 지금 Golang으로 백엔드를 배워야할까? 아니면 전통적인 JAVA 백엔드를 배워야할까?

Q. PHP는 어떤가?
Q. Python은?
Q. 닷넷은?
Q. 스프링은?
Q. Node는?

나는 이런 이야기를 할 때 꼭 추천하는 책이 있다. 코딩을 지탱하는 기술이라는 책인데, 솔직히 말하면 이런 고민을 할 때 그냥 하나라도 잡고 공부해봤으면 좋겠다.

지금도 여전히 어디선가는 어셈블리, C, C++을 사용하고 있다. 또 어디선가는 Dart, Golang 등을 사용하기도 한다. 시대가 지나면서 유행하는 언어는 달라지지만, 그럼에도 불구하고 코딩을 지탱하는 기술은 아주 크게 변하지 않는다.

여전히 OS에 대해 아는 것은 중요하고, 여전히 그래픽 엔진이 어떻게 동작하는 지, 여전히 HTTP는 어떤 모양새고 어떻게 동작하는 지, TCP/IP 가 무엇인 지, 문자열 처리는 어떻게 일어나는 지, 문자 인코딩이 무엇인 지, 웹 페이지는 어떻게 렌더링 되는 지, 화면에 어떻게 그려지는 지 등, 중요한 패러다임은 여전히 동일하다고 생각한다.

그래서 결론은?

나는 이 글을 읽는 당신이 언어 하나를 깊게 파보았으면 좋겠다. 언어 하나를 깊게 파서, 그 언어에 담겨져 있는 사상, 철학, 모양을 잘 이해했으면 좋겠다. 그리고 다른 언어와 비교할 수 있으면 좋겠다.

Dart에서는 컴파일을 이렇게 수행하는데, C++에서는 컴파일을 이렇게 수행해서 성능상 차이가 있다. Flutter와 React Native의 설계상 차이점은 이러하다. 네이티브로 구현하면 이런 점이 좋고, Flutter로 구현하면 이런 점이 좋으니 우리는 Flutter로 하자.

모든 기술은 도구다. 기술을 위해 무언가를 만들지 말고, 무언가를 만들기 위해 기술을 사용하길 바란다.

--

--

John Cho
John Cho

Responses (1)