어떤 프로그래밍 언어를 공부해야 하는가?

  너무 거창한 이야기라고 생각합니다. 하지만 16여년 가까이 CS (Computer Science) 쪽에 있었고 또 그런 환경하에서 보고 듣고 생각한 것을 기반으로 해서 조금이라도 후배들에게 도움이 되는 방향으로 설명하고자 합니다. 더구나 이제 어떤 걸 공부해 볼 지 방향을 못잡으실 때 도움이 되실꺼라고 생각합니다. 

  '어떤 프로그래밍 언어를 공부해야 하는가?' 라는 질문은 '어떤 프로그래밍 언어가 좋은 것인가?' 라는 질문과 일맥상통하는 바가 있습니다. 그러나 '좋은' 이라는 중의적인 표현 때문에 참으로 결정하기 어렵습니다. 

  세상에 널리 퍼져서 취직하기 좋은 언어가 '좋은' 것인가? 아는 사람이 거의 없어서 특수한 목적에 꼭 필요한 언어가 '좋은' 것인가? 내가 익숙하게 쓰니까 '좋은' 것인가? 즉 자바나 C/C++ 이 과연 '좋은' 것인가? 하는 것에 관한 물음 입니다. 

  더구나 프로그래밍 언어 (Programming Language) 라는 것은 개발자들에게 있어서는 '종교'와도 같은 것이라서 함부로 이 언어가 저 언어보다 좋다고 단정적으로 말하기가 힘듭니다. 위에서도 언급 했듯이 '중의적인' 표현인 '좋음' 이라는 것이 여러가지 의미를 포함하기 때문입니다. 단적으로 단지 텍스트 에디터일 뿐인 이맥스 와 vim 사용자들의 그간 계속되어 온 전쟁(?)을 보더라도 단순한 논쟁을 넘어서 종교적인 영역과도 맞물려 있습니다. 

  그럼에도 불구하고 이렇게 글을 남기는 것은 비단 나만의 의견이 아니기 때문입니다. 비록 유명한 사람 (지금 그 분이 누군지는 잊어먹었지만..)의 뒤에 숨어서 그 분의 의견이 마치 제 의견인 양 남기는 것은 용기 없는 태도이긴 하지만 저 또한 그 분의 의견에 동감하기 때문에 이렇게 글을 남깁니다. 

  CS (Computer Science) 을 공부하고 앞으로 그 분야를 공부하거나 일을 하게될 사람이라면 적어도 5가지 종류의 언어를 익힐 필요가 있다고 합니다. 

  1. C 언어 
     C 언어는 어셈블리(Assembly) 언어가 잘 안쓰이게 됨에 따라서 가장 기계어에 가까운 시스템 언어입니다. 아시다 시피 C 언어는 온갖 유닉스의 커널을 만든 언어 이기도 합니다. 요즘 환경하에서는 컴퓨터 OS 의 기본을 이루는 근본 언어 이기 때문에 익혀야 합니다. 

  2. C++ 언어 
     C++ 언어는 C 에 가장 가까운 언어이면서 (심지어 라이브러리도 호환되게 쓸 수가 있습니다) OOP (Object Oriented Programming) 언어 입니다. 즉 쉽게 말해서 OOP (Object Oriented Programming) 언어이면서 시스템 관련된 프로그래밍을 할 수가 있는 언어입니다. 참고로 구글에서 많이 쓰는 언어기 때문에 구글에 도전하려는 분들은 익혀두셔야 할 것입니다. 

  3. Java 언어
     Java 언어는 세상에서 가장 많이 쓰이는 언어중에 하나입니다. 사실 그 이유만으로도 공부해야만 하는 가치를 지니고 있습니다. IT 에서는 가장 많이 쓰이는 (범용성이 가장 높은) 것들이 문제가 발생하더라도 해결하기 편합니다. 실례로 현존하는 거의 모든 라이브러리의 자바 버젼은 존재한다고 볼 수가 있습니다. 뭔가 만들고 싶은게 있으면 Java 쪽에서 찾아보면 이미 존재해 있을 가능성이 높습니다. 

  4. Script 언어 
     1-3 번이 알골(Algol) 계열의 언어였다면 이제부터는 그 영역에서 조금 다른 언어를 공부해야 합니다. 스크립트 언어를 공부해야 하는 이유는 어찌 보면 당연합니다. 그 놀라운 생산성은 겪어본 사람만 알 수 있습니다. 아이디어를 가지고 구체화 하는데 이보다 더 탁월한 수단이 없습니다. 너무나 많은 스크립트 언어가 있겠지만 Javascript, Python , Ruby 등을 추천합니다. 특히 파이썬은 구글쪽에 도전하시려면 익혀두시는 게 좋을 것입니다. 

  5. Functional 언어 
     예전에 OOP(Object Oriented Programming) 개념이 처음 나왔을 때 개발자들은 왜 OOP 를 공부해야 하는지 모르겠다는 이야기를 했습니다. C 만으로 모든것이 충분했는데 말이죠. 하지만 GUI 가 나오고 OOP 가 기본인 세상이 됐습니다. 그리고 Java 가 세상을 지배했습니다. 왜 Functional 언어를 공부해야 하는지 모르겠다는 분들이 많습니다. 이해합니다!! 그러나 이제 CPU 만 보더라도 코어 클락수가 수직적으로 상승하던 시대는 잠깐 주춤대고 있으며 이제 병렬적으로 양이 늘어나는 시대가 다가오고 있습니다. 이런 환경하에서 병렬 시스템 설계에 최적의 언어가 함수형(Functional) 언어인건 확실합니다. 그래서 Java 에도 이러한 개념이 추가되고 있습니다. 이러한 언어를 공부하실려면 단연코 저의 의견으로는 리습(LISP) 입니다. 리습(Lisp)이 가장 함수형 (Functional) 언어의 전형을 보여주며 가장 공부할 만한 가치가 있습니다. 최근 JVM 위에 올라가는 언어들이 인기라 클로져(Clojure) 를 공부하신다면 두마리 토끼를 잡으실 수가 있습니다. 

  이상이 공부해 볼만한 5가지 언어 또는 계열입니다. CS (Computer Science) 출신이라면 단순 개발을 잘하는 것 이상의 신기술에 대한 적합도도 중요할 것입니다. 이런 공부 기반을 바탕으로 한다면 적어도 언어 분야에서는 새로운 개념이라 어렵다는 말은 잘 안나올 것입니다.이런 목적을 위해서라도 공부해 볼것을 추천합니다.