2016회고: 같은 성형외과 나온 프로그래밍 언어들

내 언어의 경계는 내 세계의 극한이다 — 루트비히 비트겐슈타인 <논리철학 논고> [1] (5.6)

프로그래밍 언어는 빠르게 발전한다 — 적어도 빠르게 변화한다. 한때 유행했던 Delphi 나 한때는 쿨하다고 여겨졌는 Perl 이 오늘날 이토록 사람들로부터 외면 받을 줄은 그때 당시는 상상하기도 어려웠던 것처럼[2]. 2016 년에도 프로그래밍 언어는 1년어치 뉴스를 듬뿍 채울 만큼 착실하게 발전했다. 뜻인즉 프로그래머들의 식후 티타임 화제를 옹근 2016년 한해만큼 제공하기에 충분한 분량을 채울 만큼 확실하고 견고하게 발자국을 내디뎠다는 말이다. 원한다면 프로그래밍 언어 2류 관찰가의 시선을 따라 2016년의 프로그래밍 언어를 회고해보자. (일부 특성들은 사실 2016년에 추가된게 아니다, 엄밀히 따지자면. 하지만 그게 2016년에야 각광받았다면 2016년의 뉴스로 치부할 수도 있을 것이다)

2016 년 “올해의 프로그래밍 언어”

프로그래밍 언어 유행지수를 발표하는 것으로 프로그래밍 커뮤니티에서 유명한 TIOBE 가 곧 2016년 “올해의 프로그래밍 언어” (Programming language of the year 2016) 를 발표할 예정이다. 이 영광을 차지할 언어는 Go 언어가 거의 확정이다 [3]. 원인은 1개 퍼센트 포인트 이상의 유행도 상승을 보여준 프로그래밍 언어가 Go 와 Groovy 밖에 없는데, Groovy는 이미 과거형으로 되었기 때문이다.

Google이라는 명문 출신, C언어의 아버지와 UNIX의 아버지가 만든, 대규모 동시성 프로그래밍을 위해 태어났다는 슬로건, 등등 태그들을 달고, 프로그래밍 언어들이 혈전고투로 어려워하는 와중에 Go 언어는 자기만의 길을 개척해 유행도를 얻고 있다. 또한 컨테이너 프로그램 Docker 가 점점 일반 가정에 까지 들어설 만큼 유행해진 것이 그것의 개발 언어 Go가 나날이 주목받는데 일조를 하는 것 같다.

JetBrains 도 이런 배경에서였는지, Go언어 IDE 프리뷰 버전(현재 이름: Gogland)을 내놓았다. 성숙한 IDE는 Go 생태계의 빠른 성장에도 큰 도움이 될 것 같다.

Async/Await 유행년

2016 년을 감히 Async/Await 의 해라고 부르겠다. 2016 년에 뭐가 가장 핫했냐고 물어본다면 당근 Async/Await 이겠으니.

사실 다른 이름으로, 또는 보다 정확히는, Futures 와 Promises 란 프로그래밍 시설물 (패러다임이라고 하기엔 과도하게 거창하고) 이 최초로 제안된 것은 수십년전의 논문에서이다[4], 과거에 화제가 되었던 그 어떤 프로그래밍 개념과 마찬가지로 말이다. 기원은 그렇다 치고, 이놈의 수십년 묵은 물건이 최근에 다시 핫해지고 유행을 탄 것도 2016년이 아닌, .Net 4.5가 출시된 2012년까지 거슬러 올라간다.

2016년에 각광받게 된 배경에는 이 피쳐가 여러 주류 프로그래밍 언어에 들어서는 것이 있다. 이를테면 모던 C++ (2011), Python 3.5 (2015), ECMAScript 7 (작업 중), etc.이 몇개 언어를 합치면 GitHub 기준 유행도 상위 몇개 언어를 커버한 셈이며, 비율로 따지자면 “대부분”의 오픈 소스 리포지토리를 커버할 수 있을 수준이다. 즉 그 영향력을 가히 짐작 가능하다는 거다.

하지만 Futures, Promises 가 유행하게 된 진정한 계기는 UI반응성에 대한 날로 늘어난 관심, 자바스크립트 싱글스레드 Web UI 설계의 난제, 자바스크립트 콜백 헬(Callback Hell)의 만연 등이라고 해야 할 것이다. Web UI의 예로는, 자바스크립트 프렘웤의 강자 Angular 2를 들 수 있을 것 같고, 네이티브 UI 반응성의 예(사실 이것도 웹이라고 해야 하나.. 크롬으로 만든거이니)로는 Visual Studio Code 를 들 수 있을 것 같다. 마이크로소프트가 이처럼 멋진 에디터를 내놓을 줄이야.

Go언어의 채널(channel)도 이 범주에 속한다.

정적 타입인가 동적 타입인가, 그것이 문제로다?

실은 그것이 더이상 문제가 아니게 되었다.

타입이 “없던” (동적 타입이던) 언어에는 정적 타입체크를 넣는게 대세가 되었고 (예를 들어 Python, TypScript, Lua), 타입이 “있는” 언어(C#, C++) 에는 auto 키워드(C++)나 dynamic타입 (C#)이 추가되면서 타입 명시의 부담을 덜고 있었다. Go 나 Swift 같은 대기업 출신 신생아들도 자동 타입 추론의 힘을 비는 정적 타입 형태로 가고 있다.

타입을 명시적으로 적는게 생산성이 좋은가 아니면 타입을 적지 않는게 생산성이 좋은가, 란 물음에 답을 일치 하지 못한 상황에서, 양자는 서로를 닮아가고 있었다. 타입을 명시하거나 생략, 두가지 모두 할 수 있는 선택권을 프로그래머에게 돌려주고 있다.

마이크로소프트의 달라진 얼굴

마이크로소프트는 오픈 소스를 “암”(cancer) 에 비유하며 비난했었다. 하지만 CEO가 나델라고 바뀌면서 마이크로소프의 얼굴이 바뀌었다. 그것도 확실하게 바뀌었다. 나델라는 오픈 소스를 포옹하며, “마이크로소프트는 Linux를 사랑합니다”란 말까지 했었다. 예전에는 상상도 하지 못할 일이었다. 더우기 마소는 Linux재단의 플래티넘 회원으로까지 되면서 오픈소스에 대한 열정을 또렷이 보여주고 있다.

그런 결과물의 하나로 2016년 여름에 1.0버전이 발표된 .Net Core 프로젝트가 있다. 닷넷이 드디어 확실하게 오픈소스 되었다는 점도 주목할만 하지만, 닷넷이 드디어 윈도우의 울타리를 뛰쳐나와 진정한 크로스 플랫폼이란 두다리를 부여받았다는 점, 닷넷이 이 기회를 빌어 기존에 혼란스러웠던 다중 버티컬(vertical) [4]문제도 해결할 겸, 훨씬 모듈화되고 훨씬 현대적으로 재탄상할 기회를 얻었다는 점이다.

성능도 인상적이다. Node.js 보다 훨씬 빠르다[5]. 마소가 Node.js 붐때 오픈 소스의 보편적인 혜택을 누리지 못하고 손가락이나 빨면서 부러워만 해야 했던 처지여서, Node.js창시자를 꼬셔서 윈도우 버전으로의 포팅을 도와달라고 해야만 했던게 어제 같은데 말이다.

React

Async/Await 의 유행과 같은 계기와 맥락을 가진다. 즉 UI반응성 지향적인 UI설계의 도전과제에 맞서 답안지를 내놓은 일부 사람들의 플래그쉽이다. 여러 언어에서 여러 프레임워크를 만들어내며 따르는 사람들이 늘고 있다. 하지만 이것을 Async/Await의 유행에 묻힌 또하나의 비슷한 아류였는지, 아니면 Async/Await의 또다른 이름, 이거나 살짝만 다른 앵글의 네이밍이었을 뿐인지는, 필자가 아직 리액티브에 대한 이해가 좀 딸려 잘 설명해드릴 수가 없다. 아시는 분은 댓글로 가르쳐주시면 너무 감사하겠다.

웹 UI 프렘웤의 백가쟁명 (百家爭鳴)

2016년에 자바스크립트를 배우는 기분: http://www.looah.com/article/view/2054

이 글을 읽고 현웃 터졌다. 생산력이 차넘치는 자바스크립트 커뮤니티의 프렘웤 붐은 알고는 있었지만, 요즘은 더욱 고약해지는 느낌이다.

코대 올라간 JSON교

JSON vs XML의 경쟁 구도는 더이상 신선한 화제가 아니다. JSON 이 점점 유행한다는 점은 2016 년에 포착된 동향중의 하나이다.

Visual Studio Code 나 Sublime Text 2나 컨피그 파일을 JSON으로 한다. Visual Studio 는 프로젝트 파일을 XML로 만들었는데, 새로 출발하는, “현대적”이라는 .Net Core 는 프로젝트 관리 파일이 JSON이다. 어떻게 보면 빌드 스크립트도 JSON이라고 할 수 있는 셈이다.

컨피그 파일 영역에서의 2종 격투기로 유행도를 높여간건 튜링 완전한 Lua가 아니라 JSON이었다.

VM 의 플랫폼 영향력

한때 VM의 플랫폼 영향력의 대표는 자바 가상머싱(JVM)이었다. 요즘은 V8이다. V8이 여전히 메모리 누수가 흔하고 그런데도 말이다. JavaScript 자체의 슈퍼 유행 뿐만 아니라, 각종 트랜스파일러들이 대거 등장하면서 JavaScript는 웹시대의 새로운 “어샘블리”언어로서의 지위를 굳혀갔다.

요즘에는 CoffeScript, TypeScript, Java(Java방언 processing)만이 JavaScript 로 트랜스파일 될 뿐만이 아니다. 패미컴 게임기 머신 전체를 시뮬레이팅 하는가 하면, C++ “인터프리터”도 등장했다.

심지어 2016년에서는 “웹 어샘블리” 기술도 대두하면서, V8을 비롯한 JavaScript 가상 머신들의 플랫폼 네트워크 효과 영향력이 더더욱 강화됨을 볼수 있었다.

이벤트 드리븐, 액터 모델, 컴포넌트 기반, 마이크로 서비스 지향

굳이 2016년의 트렌드라고 말할 수는 없지만, 2016년에도 이 버즈워즈들(?)은 트렌드를 이어왔다.

이것들의 개념은 날로 많이 알려졌지만, 이것들의 확장 의미와, 적용 합당한 응용 시나리오들 등 화제는 한창 프로그래머들의 토론 열기를 얻고 있으며, 인지를 받아가고 있는 현재 진행 형이다.

액터 모델? 메세지 파싱? 그 메세지는 “이벤트 드리븐”의 “이벤트”와 궁극적으로 다른가? 큐를 각자 갖는가 아니면 하나의 큐를 공유하는가의 차이인가? 아니면 message dispatcher 의 구현 스타일의 차이인가?

Actor Model과 CSP(Communicating Sequential Processes) 는 모델링 방법에 근본적인 차이가 있는가, 아니면 앵글만 살짝 다른 샷의 차이인가? [6]

“마이크로 서비스”또한 이러한 각자 정의중인 버즈워즈중 하나이다. 예전의 SOA(Service Oriented Architecture)가 그랬던 것처럼.

물론 액터 모델과 CSP의 차이는 말로 짚어낼 수 있고, 액터 모델과 컴포넌트 기반 양자도 상태 접근 방식에서 분명히 차이가 있다.

합의하고자 하는건 “메세지나 이벤트를 주고받는 스타일”이라는 큰 틀에서 비슷하다는 점이다. 그러고 나면 이러한 트렌드가 2016년에도 강화되었음이 관찰되었다고 얘기하는게 보다 안전하겠다.

사람들이 사랑하는

사람들이 사랑하는 언어는 달랐다. Rust, Swift, F#이 탑3였다[7]. 4등은 Scala, 5등은 Go 였다.

당신은 사랑의 힘을 믿는가? 믿는다면 상기 언어들을 눈여겨 볼 필요가 있을 것이다. 사랑의 힘이 상기 언어들을 다음 혁신의 주역들로 떠밀어 세울 지도 모를 일이니까.

성형외과 선생님들

프로그래밍 언어 2류 관찰가인 필자로서도 새삼 발견할 때마다 새삼 놀라는 일인데, 수많은 프로그래머들이 사랑하는 언어들 (과 과거에 사랑해온 언어들)을 만든 사람들은 다 그 똑같은 몇분이었다는 점이다.

TypeScript 만든 사람은 Pascal, Delphi, C# 만든 Anders Hejlsberg [8] 이고, Swift 만든 사람은 LLVM 을 만든 Chris Lattner [9] 이다. Go 언어 만든 사람은 C 언어의 아버지 [10] 와 Java HotSpot 의 아버지다. 여기에서 언어 설계와 언어 구현이 뒤섞인 점은 양해해달라. 포인트는, 프로그래밍 언어들의 “성형외과 선생님”들은 소수의 몇분밖에 안된다는 점과, 그들이 심지어 서로를 베끼…..인다고 하면 안되고, 서로의 창작물에 대한 경의를 주고 받는다는 점이다.

Conclusion

천하대동(天下大同)

언어들이 비슷해지고 있다는거다. FORTRAN 안에서 LISP가 환생하고, Simula안에서 SmallTalk가 성장해나가는 트렌드는 오래 전부터 있었다 쳐도, 요즘에는 껍데기까지 서로 비슷해지고 있다.

다만 라이브러리들과 프렘웤들이 용솟음치고, 그것들의 관성과 네트워크 효과가 언어들의 인터 오퍼레이션을 막고있는 새로운 바벨탑이다.

또 사람들은 의논하였다. “어서 도시를 세우고 그 가운데 꼭대기가 하늘에 닿게 탑을 쌓아 우리 이름을 날려 사방으로 흩어지지 않도록 하자.”
주님께서 땅에 내려오시어 사람들이 이렇게 세운 도시와 탑을 보시고 생각하셨다.
“사람들이 한 종족이라 말이 같아서 안 되겠구나. 이것은 사람들이 하려는 일의 시작에 지나지 않겠지. 앞으로 하려고만 하면 못할 일이 없겠구나. 당장 땅에 내려가서 사람들이 쓰는 말을 뒤섞어놓아 서로 알아듣지 못하게 해야겠다.”
주님께서는 사람들을 거기에서 온 땅으로 흩으셨다. 그리하여 사람들은 도시를 세우던 일을 그만두었다. 주님께서 온 세상의 말을 거기에서 뒤섞어놓아 사람들을 온 땅에 흩으셨다고 해서 그 도시의 이름을 바벨이라고 불렀다.
—- <창세기> 11장 4~9절

하지만 위에서 언급했던 것처럼 VM들의 플랫폼 영향력의 강화는 이런 분열을 완화하고 보다 강한 융합까지도 이끌어낼 수 있지 않을까 싶다.

2017 년에도 프로그래밍 언어의 발전은 기대된다.

(끝)

p.s. 2016년을 회고 없이 그대로 떠나보내기에는 너무 아쉽고 허전할 것 같아서 이런 글을 끄적였다.

이 글은 무식해서가 아니라 대중 취미에 교활하게 맞춘 쓸데없는 조미료 맛으로 가득하다. 읽는 이의 입맛에 맛지 않았다면 그저 아쉬울 뿐이다.

p.p.s. 주말동안 닐 스티븐슨의 <크립토노미콘>을 계속 읽었더니, 닐의 문장마다 재롱 부리고 못된 장난 하는 버릇이 굉장히 싫었는데도 몸에 옮아오는 것 같다. 그 영향이 다분히 이 글에도 남겨진 것 같다.

p.p.p.s. 오탈자나 작문 오류, 특히 기술 오류에 대한 지적은 언제나 훤하게 열고 환영하는 바이다.

References

[1] https://ko.wikipedia.org/wiki/논리철학_논고

[2] 물론 요즘도 팬들이 많기는 하다. 학자 Kevin Kelly 가 What technology wants 에서 기술하길, 기술은 탄생하면 사라질 줄 모른다.

[3] TIOBE Index for October 2016: Go to become programming language of 2016? http://silvaetechnologies.eu/blg/227/tiobe-index-for-october-2016-go-to-become-programming-language-of-2016

[4] 닷넷 코어 (.NET Core) — 제이키의 MVC 이야기: http://blog.jakeymvc.com/net-core/

[5] ASP.NET Core – 2300% More Requests Served Per Second: https://www.ageofascent.com/2016/02/18/asp-net-core-exeeds-1-15-million-requests-12-6-gbps/

[6] https://en.wikipedia.org/wiki/Communicating_sequential_processes#Comparison_with_the_Actor_Model

[7] Most Loved Programming Languages Of 2016 — Rust, Swift, F#, Scala, Go: https://fossbytes.com/loved-programming-languages-rust-swift-go

[8] Anders Hejlsberg: https://en.wikipedia.org/wiki/Anders_Hejlsberg

[9] Chris Lattner: https://en.wikipedia.org/wiki/Chris_Lattner

[10] https://en.wikipedia.org/wiki/Ken_Thompson

One thought on “2016회고: 같은 성형외과 나온 프로그래밍 언어들

  1. Pingback: 왜 그동안의 함수식 언어 홍보는 잘못됐는가? | coolspeed

댓글 남기기

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s