사람들이 많이 쓰는 컴퓨터 언어

소프트웨어 개발자로서, 가장 먼저 배우게 되는 것이 컴퓨터 언어 (Computer Language)이다. 여기서 고민 되는 사항은 두가지 이다. "만일 내가 현재 처음 컴퓨터를 접하게 되었다면 어떤 언어를 배울 것인가?"와 "지금까지 컴퓨터 언어를 배운 것을 돌아 본다면 어떤 언어를 어떻게 공부할 것인가?" 일 것이다. 첫 번째는 내가 생각하는 컴퓨터 언어에 대한 추천이고, 두 번재는 내가 알고 있는 것을 기반으로 어떻게 확장할 것인가 이다.


우선 첫번째 질문에 대해서 고민을 해보자. 2018년 6월 6일 기준으로 구글 검색 결과 제일 처음에 나오는 3가지가 TIOB Index[1], IEEE Top Programming Language[2], 그리고 The RedMonk Programming Language Rankings [3] 이다. TIOBE Index에서는 2위가 C, 3위가 C++로 사실 둘을 합치면 1등인 Java 보다도 높다. IEEE Spectrum은 미국의 전자 공학회가 발행하는 주요 잡지에서 설문 조사한 결과로 공학자들이 많이 쓰는 언어라고 볼 수 있다.  여기에는 C가 2위 C++은 4위에 랭크하고 있다 하지만, C++이 97.1%로 대부분 이 사용하고 있다 이 링크로 알 수 있는 재미있는 사실은 많은 사람들이 한가지 언어만 하고 있지 않고 여러 컴퓨터 언어를 사용하고 97% 이상이 Python, C, Java 그리고 C++까지 사용한다고 하고 있다.



TIOBE Rank 

Spectrum Rank



이제 부터는 개인적인 의견이다. 위의 내용의 결론은 여러 언어를 배우는 것이 좋겠다는 것이다. 하지만 한꺼번에 4개를 다 시작하는 것은 좋지 않다. 우선은 목표를 고민해 보는 것이 좋겠다. 컴퓨터 관련 전공자가 될 것인지, 혹은 내 분야는 다르지만, 컴퓨터를 더 잘활용하기 위한 목적인지가 결정 포인트가 될 것이다. 



나의 추천: 비전공자 vs 전공자

만일 비전공자라면 Python으로 시작하는 것이 좋겠다. 가장 큰 이유는 Python은 컴퓨터 언어의 기본 구조는 다기지고 있으면서, 배우기가 상대적으로 쉬운 언어이다. 그럼에도 불구하고 Python은 정말 관련된 라이브러리도 많아 사무 자동화 등 여러 곳에 활용될 수 있다. 여기서 그치지 않고, 요즘 화두가 되고는 Machine Learning관련해서도 사용되고 있기도 해서 여러 활용처를 고민해 볼 수 있다. 아들에게 Python을 방학 동안 가르쳐 본 것도 이러한 판단 때문이다. 





전공자라면 Java를 추천한다. 오래된 언어이지만, 많은 대학에서 Java를 전산전공자의 처음 언어로 가르치고 있는 것으로 알고 있다. 요즘은 Smart Phone이 화두가 되고 있다. PC에서 동작하는 SW 제품을 만들기도 하지만, Web이나 Mobile에서의 SW를 만든다고 하면 Java를 기반으로 좀 더 학습하면 쉽게 접근할 수 있다.  


또한, 처음 컴퓨터 언어를 익히고 여러 프로젝트를 하면서 접하게 되는 설계 관련(Architecturing) 관련한 분야로 Design Pattern, Refactoring, Unit Testing이 Java 기반으로 설명하고 있기 때문에 내가 강하게 추천하는 이유이기도 하다.





나는 어디로?

두 번째, 지금까지 경력을 쌓았던 나의 경우 어떻게 보수 학습을 할 것인지에 관한 질문이다. 아주 개인적인 질문이다. 하지만, 기본적으로는 내가 어떤 언어들을 주로 사용했고, 현재 시점에서는 어떻게 학습해 나갈 것인지에 관한 것기 때문이다. 방향은 어찌 보면 위와 같다. 즉, Python, Java, C/C++여러 언어를 배울 것이다. 하지만, 어떤 순서로 어떤 것을 살펴 볼 것인지가 더 중요하겠다. 왜냐하면, 처음 시작하는 사람들과 같이 처음 부터 다시 다 봐야할 필요가 있지 않을 수도 있기 때문이다.


내가 가장 먼저 배운 언어는 초등학교 때, 컴퓨터를 처음 접하면서알게된 Basic언어였다. 그리고는, 대학에 입학하고 나서 학교에서는 내가 전공한 전자공학에서는 관련 언어라는 이유로 FORTRAN이 과정에 포함되어 있었다. 또한, 전산과에서는 PASCAL을 가르쳤었다. 하지만, 나는 이때에 이러한 언어들이 유행이 지났다고 생각해서, 따로 독학한 언어는 C 언어였다. 이 때에 보았던 책들을 기억해 보면 정말 함수를 만들고 문제를 해결하는 형식의 Procedural Programming Paradigm을 활용한 접근 방식이었다. 대표적으로 Main Menu가 있고 키를 눌러서 해당 함수로 호출 되게 해서 요구 사항을 만족시키는 방식이다.


회사에 입사하기 시작하면서, C++과 Java가 소개되기 시작했다. 매우 초기 버전이기 때문에 Object Oriented Paradigm이 소개 되고 이를 위한 개념들이 녹아 있는 버전의 언어들었다. 하지만, 아직, 휴대폰에는 이를 활용한 개발들이 더디게 적용 되고 있었다. 그래서, 컴퓨터 언어와 관계해서는 더 배우게 된 것이 Perl이나 Unix Shell Script, Makefile 등이었다. 실재로 프로그램하는 방식도 Procedural에서 Event-Driven으로 바뀌었다. 이는 Event Handler에서 Event의 종료를 구분하여 처리하는 구현 접근 방법이다.


Android를 시작하면서, 실재로는 Java와 C++을 더 봐야하는 입장이었지만 실재로 더 이론들을 탄탄히 하면서 진행하지 못했다. 그러면서, 결국에는 C++을 좀 더 봐야겠구나 하고 정리하게 되었고, 동료가 Python 온라인 강의를 듣는 것을 보고 배우기 시작해서 아들과 아들 친구에게 가르치는 일까지 하게 되면서 Python을 알게 되었다. 이 후, Java에서도 내가 교육을 통해 마지막으로 배웠던 것 이후에 바뀐 부분이 많다는 생각에 다시 학습하게 되었다.





사족이기는 하나, 위와 같이 공부하게 된 것도 고민을 하면서 바뀌게 된 것이다. 사실 지금돌아 보면, 역시 Java를 먼저 보강하고 C++ 그리고 Python을 다시 하는 것이 좋지 않겠나 생각하지만 이렇게 진행한 것도 나쁜 선택이라고 생각되지는 않는다.


[1] TIOBE Programming Community Index, https://www.tiobe.com/tiobe-index/

[2] The 2017 Top Programming Languages - IEEE Spectrum, https://spectrum.ieee.org/computing/software/the-2017-top-programming-languages

[3] The RedMonk Programming Language Rankings, http://redmonk.com/sogrady/2018/03/07/language-rankings-1-18/



+ Recent posts