티오베 인덱스에 나온 언어 목록..

요샌 코딩이라고 해서 별도로 학원을 다니며 배우는 세상이 되었다. 더구나 취직을 하려면 코딩이란 게 매우 중요한 덕목(?)처럼 되서 마치 인생의 숙원사업처럼 ‘코딩을 배워야 된다’하며 이야기 하는 사람들이 많아졌다. 에전엔 컴퓨터로 프로그래밍을 한다면 공대다니는 애들이나 하는 지겨운 일/숙제, 또는 대인관계 능력이 떨어지는 이들이 집이나 학교에 쳐박혀서 기계와 이야기하는 따분한 일로 여겨지던 것을 생각하면 정말로 신기한 노릇이다.

티오베 인덱스라고 해서 세상에서 어떤 프로그래밍 언어가 영향력을 갖는지 랭킹으로 만들어 놓은 것이 있다. 지금 살펴보니 10워권에 있는 언어들도 모두 내가 최소 1년에 한번은 쓰게 되는 것들이고 대충 20위권에 15개 정도의 언어는 잘 알거나 사용하거나 하는 것들이니까 그렇게 내가 옛날 사람이라거나 이런 쪽으로 균형감각이 떨어지는 사람은 아니구나 했다.

잘 들여다보면 20위 랭킹인데 Cobol이라고 해서 아주 옛날 언어가 순위권 밖으로 밀려난 게 신기하고 python이라고 해서 언어(?)라고 보기엔 간이 스크립트를 만드는 수준의 것이 1위에 랭크되어있다는 것이 재미나다. 10위에 assembly language(?)란 것이 있는 것도 재미나고. database를 검색하는 간이언어(?)인 SQL이 언어랍시고 떡하니 올라가있는 것도 신기하다.

PHP라는 일종의 http server에 붙어서 기생하던 script급의 언어가 8위에 치고 들어왔다는 것도 역시나 웃기고 PHP의 아버지뻘 되는 perl이라는 강력한 스크립트 언어가 순위에 없는 것도 신기한 일이다. BASIC이 아닌 Visual Basic이 순위에 들어있고.

나처럼 구식의 사람들은 컴퓨터 언어를 대개 이런 식으로 배워왔다. 그렇게 되고보니 이런 식의 인식을 갖는 것이지 싶은데, 어차피 요새 사람들은 세상의 언어는 python 밖에 없고 나머지는 외계인 언어나 다를 바 없다고 생각하니까 이런 이야기도 다 쓸모 없이 읽힐지도 모를 일이다.

  1. Basic: 당시에 컴퓨터를 구입하면 Basic 언어를 구사할 수 있는 interpreter라는 것이 기본 내장되어있고 음악이나 그림도 그릴 수 있게끔 확장(?)되어있었다.
  2. Assembly: Basic은 interpreter라는 것을 통해서 구동되기 때문에 속도가 매우 느리다라는 단점이 있었다. 사실상 assembly language(라고 하기도 뭐한 것)를 접하고 나면 컴퓨터(CPU/프로세서/컴퓨터 구조)와 많이 가까와지게 되는데 그만큼 재미도 있고 빠르고 놀라운 응용범위를 자랑한다. 이것이야 말로 가장 machine friendly하고 CPU dependent하다고 할 수 있지만 사실 Assembly는 간단하다는 장점도 있지만 CPU에 따라 큰 차이가 없이 고만고만하다고 할 수 있다. 복잡한 일을 하자면 문제가 커지는 단점이 있지만. move라든가 (Load/Store) 이것을 통한 복사/어드레싱(직/간접), 그리고 각종 논리 산술 연산, 조건 분기 정도는 그 원리 정도만 잘 학습해도 컴퓨터 구조와 다른 언어들을 이해하는데 도움을 준다.
  3. Pascal: Pascal은 당시에 Borland라는 회사에서 만든 Turbo Pascal이라는 개발환경이 대 유행을 타면서 인기를 얻었다. 주로 컴파일러 언어라고 볼 수 있고 (이게 delphy로 가면 좀 달라지긴 하지만) 함수(function)과 프로시져(procedure)로 구성되어있는 모양새가 C에 가깝다. 이게 Delphy라는 언어로 되고 Object Pascal이라고 해서 옛날 Pascal의 객체지향형 변종으로 진화(?)했다.
  4. C: x86이 컴퓨터 세계의 대세를 이루면서 마찬가지로 Borland의 Turbo C가 대유행을 이루면서 저변이 확대되었다. Compiler의 능력이 훌륭해서 거의 assembly로 작성한 것 만큼이나 빨랐다. 아니 C 때문에 뭔가 빠른 것을 만든다고 할 때에도 힘들게 assembly로 작성해야 할 이유가 없었다. Unix 시절의 사람들이 즐겨 사용한 언어고 모든 OS의 근간을 이루었다는 것을 배우긴 하지만, 아직도 세상 대부분의 사람들은 세상 모든 OS의 시조가 되는 Unix를 모르고 살고 있으니까. C 역시 뭐하는 것인지 모르고 살 거다.
  5. perl: 인터넷이 열리면서 unix 세상과 가까와지고 linux라는 x86용 무료 unix가 많이 보급되면서 일종의 지능형 shell script 같은 것을 작성하느라 가까와졌다. cgi-bin이라고 해서 http와 연결해서 나름 지능적인 일도 할 수 있었다. perl은 그 모양새가 C와 가깝고 shell script와 가까와서 사용하기 매우 편리하다. unix의 기본 util들, 그리고 regex와 짝을 이뤄 굴러가야 그것이 진정 powerful해지는 것이라고 나는 생각한다.
  6. PHP: Perl + HTML이 결합되어서 이런 이름이 붙었다고 나는 생각했는데, 어쨌든 PHP가 database와 연결해서 웹서버를 만들 때 아주 흔하게 쓰였다.
  7. javascript: PHP는 뭐랄까 server 측에서 주로 사용되었다고 하면 javascript는 HTML에 넣어서 client쪽에서 동작시킬 요량으로 쓰인 언어가 되겠다. 지금은 그 용도도 있고 (node)js라고 해서 server에서 구동시키는 언어로도 쓰이고 있다. 특히나 인터넷에서 공유해서 사용할 수 있는 module들이 엄청나게 많아서 공들여 내가 작성하지 않고 누군가 잘 만들어놓은 module을 가져다 쓰면 폼나는 결과를 만들어낼 수 있는 세상(?) 열었다고 해야하나.
  8. java: java는 처음 나왔을 때도 느렸고 지금도 느려서 잘 쓰지 않는다. 그런데 platform indepedent하다는 장점 때문에 많이 쓰이고는 있지만 뭐랄까 아직도 느린 구석이 있어서 난 별로 매력을 느끼지 못하고 있다.
  9. C++: C를 구사할 때 좀 더 있어보이게 하려고 배웠던 언어인데 내가 배우던 당시엔 결과물이 느리고 크기도 크고 멍청했어서 거의 쓰지 않았다. 그렇지만 지금 시대에는 사실상 C는 없고 C++이 모든 근간을 이루는 소프트웨어를 작성하는데 쓰이고 있다고 해야할 것 같다. 물론 그렇게 인정 안할 사람들이 많긴 하겠지만. visual c++이 이 바닥이 크는 데 많은 기여를 했겠지만 사실상 g++과 linux가 제대로 보급되고 나서 뭔가 본격적이 되었다고 나는 생각한다.
  10. python: python은 한 때 perl과 비교되던 script 작성용 언어라고 생각했는데 이게 deep learning platform들과 붙으면서 엄청나게 저변이 확대되었다. 아예 인생 처음으로 배우는 언어로 python이 되어버린지 오래고 소위 coding이라고 하면 python을 구사하는 것을 의미하는 시절이 되었다. 난 재미 삼아 좀 써보고 바로 접었다. 느린데다 나는 deep learning platform을 별로 좋아하지 않기도 하고 언어의 모양새가 내가 주로 사용하는 C/C++과 다른 구석도 있고 여러 가지로 끌리는 것이 전혀 없다.
  11. swift: iOS/MacOS용 app을 만들 때 큰 고통없이 쉽게 할 수 있다기에 들여다 보고 있다.
  12. flutter: swift와 마찬가지 이유인데 flutter로 만들면 android/iOS를 오갈 수 있다는 말에 혹해서 잠깐 들여다봤다.

사실 컴퓨터 언어의 개념을 익히는 것에 가장 큰 도움이 된 것은 가장 처음 배운 언어인 Basic과 assembly, C++이 되겠다. 지금 생각해보면 Basic 따위 배우나 마나 아닐까 할 수 있지만, 개념을 배우는 입장에서는 compiler로 결과물을 만들어내는 언어보단 interpreter 언어가 배우기 쉬웠고 사실상 그 근간이 Basic이든 C이든 다를 바가 없으니까.

또 나머지 언어들은 사실상 C++만 알아도 쉽게 익힐 수 있는 것들이라고 할 만큼 C++과 유사한 부분이 많다. 신기하게도 지금 세상에서는 제법 고급 언어인 C/C++이 assembly 다음으로 기계와 가까운 언어 취급받는다.

지금 처음 프로그래밍 언어를 배우는 사람이라면 python에게서 가장 많은 개념들을 배우게 될 것이지만 assembly와 가까와지기 쉽지 않고 (지금은 raspberry pi/arduino까지 가도 이런 언어를 쓸 일이 거의 없다) 더구나 C/C++을 가까이 할 일 없다면 assembly와는 더더욱 가까와질 이유가 없다. 사실 python이란 언어 자체가 C++와 유사한 점은 있지만 다른 언어들과 모양새가 유사하다거나 하긴 좀 애매하다. 솔직히 나는 python이 지금 이 세상에서 가장 많이 쓰이는 프로그래밍 언어(?)가 되었다고 하더라도 절대로 좋아할 이유가 없고 좋아하게 될리도 없다고 본다. 어차피 지금은 멸종된 게 아닌가 하는 cobol처럼이나 유행을 타는 게 컴퓨터 프로그래밍 언어이다보니까 python도 언제 세월의 뒤안길로 물러나 앉을지 모른다고 해야겠지.