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

in #kr6 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를 슬쩍 본 적은 있는데 아직까지는 쓰는 곳을 잘 보지는 못했습니다.
그래도 언젠가는 치고 올라오지 않을까 싶습니다 ^^

자바스크립트가 이렇게 만능 언어가 될줄이야. 이제는 기본중에 기본이 돼 버렸네요. 취미 생활이기는 하지만 풀스택을 지향하는 개발자로서 재미있게 잘 읽고 갑니다~

감사합니다 ^^
저도 자바스크립트를 공부한지 3년 정도 밖에 되지 않아 아직 비동기적으로 프로그래밍을 하는 것이 쉽지는 않네요 ㅎ
언어의 철학을 이해하고 짜는대까지는 참 많은 시간이 필요한 듯 합니다 ^^

비개발자지만 개발자분들에게 도움이 될 글 같네요. 정성스런 글 감사합니다. @홍보해

홍보해의 영광을 받아보게 되네요 ^^
감개무량합니다 ㅎ

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

고맙습니다!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

전 아무것도 모르는 초보인데 자바부터 시작하려고 합니다.
어플을 한번 만들어보고 싶어서요.. 제대로 된 선택일까요?

자바를 시작하시는 건 좋은 선택인 것 같습니다.
그런데 프로그램을 공부함에 있어서 지치지 않고 할 수 있는 방법 중에 하나는 나에게 필요한 것을 만들면서 하나씩 보완해 가는 것입니다.
그런 면에서 어플을 만들면서 하시는 것은 정말 많은 도움이 될 것 같습니다.
다만 안드로이드 어플은 사실 초보자에게 쉽지만은 않습니다.
activity간의 연계와 activity 내에서 layout을 설정하면서 control을 추가하는 것이 만만치 않아서 초반에 자괴감을 느끼실 수도 있습니다.
그런 면에서는 라즈베리파이를 가지고 놀면서 프로그램을 공부해 보시는 건 어떨지 조심스럽게 조언해 드려봅니다. ^^

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

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

프로그래밍 언어에 관심을 가지고 있는 학생입니다. 올려주신 글이 정말 많은 도움이 되네요 ㅠㅠ 좋은 정보와 관점을 알려주셔서 감사드립니다!!:D

도움이 되셨다니 다행입니다 ^^
앞으로도 도움이 될 수 있는 글을 쓸 수 있으면 좋겠네요 ^^

비교적 안정적인 공학계열인 프로그래머도 고민이 있었군요 ㅎㅎ 저는 취업걱정은 안하고 사는줄 알았습니다... 어느분야나 꾸준히 자기계발을 하거나 색다른 도전을 하지 않으면 미래를 약속할수있는건 공무원빼고 없내요... 좋은 개발자로 성장하시길 기원합니다~

이 바닥은.... 전혀 안정적이지 않습니다. ㅋㅋㅋㅋ
매해 새로운 기술트렌드가 쏟아져 나오고
현업 개발자로 있을 수 있는 수명도 짧기 때문에 계속 공부하고 공부해야 됩니다.
그게 지겨워지면 개발자는 은퇴하고 개발직군의 언저리에 있는 다른 업무를 맡아 일을 하게 되는거죠.
뭐 하나만 배워놓고 그것만 가지고 커리어를 쌓겠다 생각하면 금새 도태됩니다.

어떤 직업이나 고민이 있지 않을까요? ^^
가장 안정적인 직업은 안정적인 직장이 아닌 노력하는 개인이 만들어 나가는 것 같습니다.
언제, 어디든 갈 수 있는 능력을 키우고 있다면 그 어디나 안정적인 직장이고 직업이겠지요 ^^
그런 면에서 공학계열 프로그래머는 더더욱 끊임없이 고민하고 노력하고 개발을 해야 살아남을 수 있는 직업 같네요 ㅎ

아직 한국 대학 정규과정 언어에서 벗어나지 못한 제 뇌가 민망하네요 ㅎㅎ 좋은 글 감사합니다.

제 수준도 대동소이 합니다 ^^

공부할 때는 언어를 많이 이해하는 것은 서로 비교해서 더 좋은 점을 이해할 수 있으므로 중요합니다.
실무에서는 모듈/패키지 관리가 잘 되어있는 언어가 생산성이 높습니다.
Javascript npm, Python pip 등이 이런 저런 패키지를 가져다 쓰기 쉽게 생태계를 만들었고 결국 이 언어들이 주류를 이루고 있습니다.

패키지라는 것이 OS 프로그램에서도 내려와서 필요한 프로그램을 패키지 형식으로 다운로드해서 설치하는 것이 개발도구의 일반적인 모습입니다.
Linux 에서는 apt, rpm 등이 이미 보편화 되었고 Mac 에서는 brew 로 개발도구 설치하는 것이 일반적인 형태가 되어버렸네요...

실력있는 개발자일수록 검증된 라이브러리를 사용한다고 하죠.
그런 면에서 말씀하신 패키지들이 많을수록 요즘 더 많이 각광받는 것 같습니다.
덕분에 생산성, 안정성 2마리의 토끼를 다 잡을 수 있으니까요~^^

빌게이츠도 부러숴할 신기루같은 IT제품 기대하겠습니다.

저는 범인이라 그 영역으로 가는 것은 생각하지 않고 있습니다 ^^

짱짱맨 호출로 왔습니다!
한주 수고하세요

언제나 감사합니다 ^^

많은 도움이 되었습니다. 감사합니다. ^^

도움이 되셨다니 저도 감사합니다 ^^

저는 C/C++ desktop개발자인데 요즘 스팀잇하면서 node.js 를 접하고 있는데 node.js 를 좀 파면서 c++ 모듈을 접목시켜보는거까지 해봐야겠네요.
좋은 글 잘 보고갑니다~:)

C/C++ 개발자이시면 node.js의 npm 패키지를 더 잘 이해하실 수 있을실 것 같네요 ^^
건투를 빌겠습니다. ㅎ

재야의 고수분들과 함께 일하면 언어는 그야말로 도구일 뿐이더군요. 각 언어의 특징을 잘 이해하고 흐름만 이해하는 능력만 있다면 새로운 언어의 learning curve는 점점 낮아지는 것 같습니다. 동향에 대해 잘 정리돈 자료네요! 좋은 내용 잘 보았습니다.

재야의 고수들과 함께 일할 수 있으셨다니 부럽습니다 ^^
저도 고수들과 협업을 하며 많이 도전받고 배워야 하는데 한 곳에 오래 있다보니 그럴수가 없네요~
그럴 기회가 생기길 기대해 봅니다^^