개발자, 어떤 언어를 공부해야 할까?

in #kr7 years ago

안녕하세요 @realmankwon입니다.

image.png

최근 stackoverflow에서 개발 관련 조사결과를 발표했습니다.
개발자인지라 관련 내용을 살펴보았습니다.

그중 가장 관심이 간 것이 바로 개발 언어에 대한 부분입니다.

우선 최근 가장 각광 받고 있는 언어의 순위는 다음과 같습니다.

image.png

10위 내에 웹관련 언어가 주를 이루고 있는 것을 알 수 있습니다.

다음으로 개발시 사용되는 Framework, Library, Tool의 순위는 다음과 같았습니다.
image.png

이 순위와 언어의 순위를 매칭하면 흥미로운 점을 알 수 있습니다.

1. 빅데이터의 강세

갑자기 왜 빅데이터가 나왔는지 의아하실 수 있지만 위에서 언급한 순위에서 각각 1위가 javascript, node.js 인 것이 힌트입니다.

node.js 의 홈페이지에 가면 아래와 같은 설명이 첫페이지에 나옵니다.

image.png

javascript로 이루어진 node.js 의 가장 큰 특징은 바로 이벤트 기반, non blocking IO입니다.

image.png
이미지 출처 : Blocking-NonBlocking-Synchronous-Asynchronous

그림과 같이 Blocking IO 와 Non Blocking IO의 차이는 동기 방식(Synchronous) 과 비동기 방식(Asynchronous)의 차이와 같습니다.
즉, Blocking IO는 데이터를 처리할 때 시간 순서대로 하나를 처리하고 그 다음에 다음 것을 처리하는 것이고 Non Blocking IO는 데이터를 처리할 때 하나를 처리하기 전에 다음 것을 처리할 수 있으며 그 중 처리가 완료된 것들은 callback 함수를 호출함으로써 그 이후 처리를 할 수 있게 하는 것입니다.

이 특징이 바로 빅데이터를 처리하는데 가장 최적화 된 특징이 됩니다.
왜냐하면 빅데이터는 말그대로 많은 양을 데이터를 빠르게 처리하는 것이 중요합니다.
이때 기존과 같이 동기방식의 프로그래밍을 하게 되면 병렬로 데이터를 처리하지 못하고 하나의 데이터를 처리할 때까지 기다린 후 다음 데이터를 처리해야 합니다.
물론 thread를 사용하여 처리를 해도 되지만 multi thread의 처리가 쉽지 않은 것이 사실입니다.

하지만 javascript는 그 자체가 이미 비동기적 언어이고 이를 기반으로 한 node.js 역시 callback 방식의 비동기적 방식이기 때문에 많은 데이터를 처리할 때 병렬로 처리하게 하고 완료가 되면 callback을 받아 후처리를 하는 방식은 큰 장점이 됩니다.

2. IOT

빅데이터는 이해가 가는데 IOT는 또 왜라고 하실 분이 있을실지 모르겠습니다.
IOT는 말그대로 Internet Of Things 입니다.
Full Name을 보시면 눈치 빠른 분들은 "아~~" 하실 겁니다.
IOT는 이름 그대로 모든 기기를 Internet으로 연결하는 것이 가장 중요한 기술이 됩니다.
이때 장비를 Internet 으로 연결하는 것은 어찌보면 쉬울 수 있습니다.

하지만 가장 문제가 되는 것은 그 장비를 제어하는 것입니다.
그때부터는 하드웨어 프로그래밍을 해야되고 이때 필요한 것이 드라이버가 됩니다.
그렇다면 IOT 장비를 만들때 마다 그에 맞는 드라이버를 개발해야 하고 그 드라이버를 포팅하고 난 이후에 그것을 제어하는 클라이언트 프로그램까지 만들어 줘야 됩니다.
개발 생산성이 현저하게 떨어지게 되는 것입니다.

이것을 node.js가 해결할 수 있게 된 것입니다.
node.js는 javascript 기반이지만 동시에 하드웨어를 컨트롤할 수 있는 인터럽트 기반 Framework입니다.
API를 보면 알 수 있듯이 C/C++이 Addon 되어 있습니다.

image.png

또한 장비 자체에서 node.js를 이용하여 web server를 실행시킬 수 있기 때문에 브라우저만 있으면 장비 자체에 직접 접속하여서 하드웨어를 제어할 수 있습니다.
즉 장비의 하드웨어 드라이버를 별도로 만들 필요도 없고 장비에 접속하는 클라이언트 프로그램도 별도로 만들 필요가 없는 것입니다.

3. Javascript는 필수

몇년 전까지만 해도 Javascript 는 HTML로 웹페이지를 만들 때 사용되는 미천한 언어로 여겨졌습니다.
하지만 다양한 모바일 기기가 생겨나면서 웹에 대한 수요가 많아졌고 웹페이지의 최적화를 위해서 javascript를 기반으로 한 jQuery, AJAX 등의 언어가 생겨나면서 그 중요성이 높아지기 시작했습니다.
그러다가 Chrome V8 엔진 및 node.js 등의 Framework의 기반이 되면서 Front-end 단을 넘어 명실상부 Back-end 단에서도 주를 이루는 언어로 급부상하게 되었습니다.
관련하여 stackoverflow의 통계 자료를 보면 javascript는 거의 모든 부분에 빠지지 않는 것을 알 수 있습니다.

image.png

그만큼 javascript는 현재 가장 중요한 언어라고 봐도 무방합니다.


Javascript 만 진리인가?

그렇다면 Javascript만 죽자고 파면 될까요?
제의 견해는 No 입니다.
이번 조사의 언어별 임금을 보시면 다음과 같습니다.

image.png

분명 모든 곳에 쓰이고 아주 중요한 언어이지만 임금은 하위권입니다.
그 이유는 무엇일까요?
바로 Javascript는 필요 조건이 아닌 충분 조건이기 때문입니다.
쉽게 말해 기본으로 할 줄 알아야 되는 스킬이기에 할 줄 모르면 손해이고 할 줄 알아도 기본이라는 겁니다.

그렇다면 개발자는 어떤 선택을 해야 할까요?
제 나름의 대안을 한번 생각해 보았습니다.

주언어

앞서 언급한 임금에 대한 조사에서 상위권의 언어들은 그만큼 희소성이 있는 언어였습니다.
그렇다면 그 희소성은 어떻게 생겨나게 될까요?
바로 자신이 하고 있는 언어를 꾸준히 하는 것입니다.
자신의 주언어를 깊이 있게 파고 공부해서 그 언어로는 어떤 것이든 할 수 있다는 자신감을 가질 때까지는 공부를 놓치 않아야 할 것입니다.
그래서 언젠가 그 언어를 할 줄 아는 사람이 줄어들거나 애초가 그 언어를 공부한 사람이 적다면 임금은 자동으로 올라갈 수 밖에 없을 것입니다.

비동기 & 동기

대부분의 개발자는 지금까지 동기 언어를 주로 사용해 왔을 것입니다.
Java, C# 등이 대표적인 동기 언어입니다.
그렇다면 여기 비동기 언어인 Javascript를 기본으로 장착해야 할 것 같습니다.
가장 좋은 방법은 회사의 업무에서 어떻게 해서든 홈페이지 업무를 만드는 것입니다.
홈페이지는 기본적으로 웹페이지를 만들어야 하기 때문에 jQuery나 AJAX 등을 쓰면서 Javascript를 적용해 볼 수 있기 때문입니다.

그리고 여건이 된다면 node.js 를 통해서 홈페이지를 만들어 보면서 express 와 같은 framework를 통해서 back-end 단을 구현하시면 javascript와 node.js 를 동시에 습득하실 수 있는 좋은 방법이 될 듯 합니다.

Full stack 개발자

나아가서 Full stack 개발자를 목표로 하면 더 좋은 개발자, 더 많이 찾는 개발자가 되지 않을까 싶습니다.
아래의 조사 결과가 그것을 뒷받침해 줄 수 있을 것 같습니다.

image.png

비록 웹 쪽이긴 하지만 지금도 이미 많은 개발자가 Full Stack web 개발자로 일을 하고 있을 것을 알 수 있습니다.
Full Stack Web 개발자에 C# 이나 Java를 겸비하고 있다면 현시대에서는 가장 강력한 개발자가 아닐까 생각됩니다.


많은 개발자가 저와 같은 고민을 하고 있을 거라 생각이 됩니다.
쏟아지는 언어들 가운데 나의 주언어가 언젠가 쓰이지 않게 되는 날 나는 무엇으로 먹고 살까라는 고민...
한번쯤을 해 보셨을 거라 생각됩니다.

그런 걱정을 이겨낼 수 있는 건 어쩌면 계속 공부하고 만들어 내는 것이라 생각이 됩니다.
어떤 방법으로든 재미를 가지고 공부할 수 있는 방법을 찾아서 이 시대에 필요한 개발자가 되어 걱정없이 살아갈 수 있길 바래 봅니다.

저 역시도 더 많이 노력을 해야겠습니다 ^^

Sort:  

요즘은 GO가 대세인줄알았는데 아직 범용적으로 쓰이진않나보네요

GO를 슬쩍 본 적은 있는데 아직까지는 쓰는 곳을 잘 보지는 못했습니다.
그래도 언젠가는 치고 올라오지 않을까 싶습니다 ^^

이제는 javascript 가 웹의 기본이 되었네요.
스마트폰이 여러모로 세상을 바꿔어 놓는군요.

그런 것 같습니다 ^^
언제나 니즈가 기술을 만들어 나가는 법이죠 ^^

@realmankwon님 안녕하세요. 입니다. @joeuhw님이 이 글을 너무 좋아하셔서, 저에게 홍보를 부탁 하셨습니다. 이 글은 @krguidedog에 의하여 리스팀 되었으며, 가이드독 서포터들로부터 보팅을 받으셨습니다. 축하드립니다!

고맙습니다!

도움이 되셨으면 좋겠습니다 ^^

개알못인 저같은 언어 무식자도 대충 이해가 갑니당 +_+ 하나 공부해보고 싶은데 파이썬을 주변에서 추천하드라구요

파이썬도 요즘 아주 각광을 받고 있는 언어중의 하나이지요~
처음 시작하실때는 뭐든 쉽게 따라할 수 있는 것을 선택하는 것이 가장 좋을 것 같습니다.
그런 면에서 파이썬도 아주 가볍게 시작하기에 좋은 언어인 듯 합니다.
그만큼 활용도도 높구요 ^^

오호!! 감사합니다^^ 하나도 몰라서 그런지 시작할 생각하니 두근두근 ㅋㅋ

좋은글 감사합니다~ 개발자를 꿈꾸고 있는 1인으로써 많은 도움이되네요^^ ~ 자주 놀러오겠습니다~

앞으로는 개발 관련 글을 쓰려고 합니다.
자주 놀러와 주세요 ^^
그리고 좋은 개발자가 되시길 바래봅니다~~

비개발자인데 지금 자바를 조금 씩 공부중 입니다! 좋은 정보 감사합니다 ㅎㅎ
보팅 / 리스팀 합니다 :)

사실 자바에만 능통해도 어디서든 에햄할 수 있습니다^^
건투를 빌게요~

이제 시작하기엔 늦은 것 같은 비개발자입니다 ㅎㅎㅎ
빅데이터 시대에 개발아니면 뭘 해야할까요. 글 잘 읽고가요 ^^

늦은 나이는 없는 듯 합니다^^
열정이 문제가 아닐까요?
빅데이터 시대라도 꼭 개발을 해야만 살아남을 수 있는 건 아니겠지요...
개발자를 직원으로 두시면 될 듯 합니다 ^^
그런 면에서 기획자가 되시는게 더 좋지 않을까 싶네요 ㅋ

사실 c#에서도 async pattern등은 도입되었죠. 중요한 것은 각각 어떤 언어든 패턴과 그 패턴 속에 있는 개념을 이해하는 것 같습니다.

말씀하신대로 c#에도 비동기를 구현할 수 있습니다.
다만 비동기 기능이 필요할 때 동기언어를 비동기적으로 사용하는 것보다는 호율성면에서 비동기 언어를 사용하는 것이 더 좋은 활용법이 될 수 있기에 각각의 언어를 별도로 접근하는 것이 좋아 보일 것 같습니다. ^^

지금은 휴직하고 띵가띵가하고 있는 범용 웹개발자(?)입니다.
뭐... 업계에서는 보통 다 할줄아는 풀스택을 원하기 때문에
저도 하다보니 싫어도 그렇게 된 것 같은데요,
하는일 특성상 IoT쪽도 전문은 아니지만 기본적인 지식은 가지고 있어야
일을 할 수 있는 환경이어서 본문에 언급된 언어나 프레임워크의 절반은
다루고 있거나 다뤄봤었네요.

하지만 국내는 아직도 JAVA개발자가 대세를 이루고 있고
최근들어 python 개발자 수요가 많아졌죠.
이거 두개를 필수로 가져가시는 게 그래도 아직은 개발자로 밥먹고 사는데
도움이 되지 않을까 싶습니다. 말씀하신대로 자바스크립트는 그냥 기본으로 알고 있어야죠 ㅎㅎ

말씀하신 의견에 전적으로 동의합니다 ^^