원문: The Next Programming Language You Should Learn by Leonard Hetsch


프로그래머 여러분, 안녕하세요.

당신이 이 글을 읽으려고 클릭한 몇 가지 이유를 추측해보죠.

어쩌면 당신의 다음 커리어를 성공으로 이끌어줄, 6개월만 배워도 모두가 당신을 고용하고 싶어할 만한 그런 멋진 언어를 찾길 희망하며 이 글을 클릭했을지도 모르겠네요. 아니면 “최고의” 프로그래밍 언어를 논하는 또다른 낚시글에 그저 화가 나서, 글 맨 끝으로 스크롤하여 저를 비난할 준비를 마쳤을수도 있겠군요. 또는 그냥 당신의 뉴스피드에 나타난 이 글이 뭔지 궁금해서, 새로운 언어 하나 배워볼까 해서 클릭했으려나요.

음, 실망시켜드려 죄송합니다. 저는 모든 벤치마크에서 최고점을 받아 AWS에서 월 10달러로 사용자 10억을 감당하는 플랫폼을 만들 수 있는 그런 갓 나온 최고 성능의 어메이징한 프로그래밍 언어를 소개하려는 게, 아닙니다.

이미 인터넷에는 이 주제에 대한 십수개의 Quora 쓰레드Medium 포스트가 있고, 구글에는 말할 것도 없죠. 대신 저는, 더 나은 프로그래머가 되기 위해 배워야만 할 궁극의 언어(들)을 찾는 이 영원한 여정에 대한 제 의견을 말씀드리고자 합니다. 사실은 이 여정이 위험한 이유에 대해서도요.

새 집에서 쓸 침대를 하나 사서 설치한다고 가정해 봅시다. IKEA에서 수많은 침대를 본 당신은 혼란에 빠졌습니다. 이전에 한 번도 가구를 직접 설치해본 적이 없었기 때문이죠(아니면 저처럼 가구 설치에 젬병이거나요). 나무로 된 멋진 일제 킹사이즈 침대를 마침내 고르긴 했지만, 어떤 도구를 사용해서 설치할지는 전혀 감이 오지 않는군요.

그래서 당신은 가까운 판매원에게 가서, 침대 설치에 쓸 단 하나의 궁극 도구가 뭐냐고 물어봅니다.

잠깐, 뭐라고요? 당연히 이런 걸 물어보지 않겠죠. 확실히는 모르겠지만, 나사와 스크류드라이버, 렌치, 어쩌면 드릴 정도가 필요할 거라고 생각합니다. 하지만 확실히 알 수 있는 건, 단 하나의 도구만으로는 원하는 대로 설치를 할 수 없으리라는 사실이죠. 그리고 만약 판매원이 200달러짜리 마법의 올인원 도구를 팔려고 들지 않는 한, 그도 당신에게 같은 말을 해줄 겁니다.

소프트웨어에서도 마찬가지입니다. 모든 것보다 우월한 단 하나의 도구, 단 하나의 언어, 단 하나의 플랫폼 따위는 존재하지 않습니다. 어떤 제대로 된 언어로도 당신이 원하는 걸 만들 수 있고, 그거면 충분합니다. 그러고 나서 당신이 원하는 것이 속도냐, 확장성이냐, 성능이냐 등에 따라 더 나은 옵션을 선택할 수 있겠죠. 초기 단계 스타트업에게는 아주 좋은 기술 선택이, 수백만 사용자로 스케일해야 하는 회사에게는 끔찍한 선택이 될 수 있습니다.

네, 맞습니다. PHP로 Wordpress 웹사이트만 만들어서도 아무 걱정 없이 먹고살 수 있습니다. Java 하나만 평생 쓰더라도 일자리 걱정은 없을 겁니다. Ruby, Python, Javascript, 또는 당신이 원하는 다른 무언가를 사용할 수도 있습니다. 이 언어들로 무언가를 만들어서 당신이 원하는 바를 성취할 수 있다면 그 모두가 좋은 선택입니다.

사실 당신이 집중하기로 선택한 기술 하나 때문에 다음 일자리를 찾지 못하게 될 가능성은 매우 낮습니다. 유일한 예외는 당신이 고른 언어가 매우 좁은 사용처에서만 쓰이거나, 시대에 뒤떨어진 경우입니다(물론 이 경우에도, 여전히 Fortran 프로그래머를 찾는 곳이 있는 것 같군요).

물론 저는 이런 고민이 아주 일반적이며 우리 모두가 때로 이 고민에 빠져들게 된다는 걸 인정합니다. 저도, 최근까지도 이런 고민을 했습니다. 요즘 인기를 끄는 이 새로운 언어에 시간을 쏟아야 할까? 아니면 내가 좀 더 “진지한” 프로그래머로 보일 만한 이 언어를 선택해야 할까? 이런 고민은 다들 하는 겁니다. 고민은 인간의 것이니까요. 그리고, 우리의 일이 사실상 컴퓨터에게 속삭이는 것에 비슷한 만큼, 우리 모두는 아직 인간입니다. (And, as close as our job is to whisper to the ears of computers, we are all still humans. - 번역이 어려워서 원문을 포함)

인력시장에서 개발자 구인난은 실존합니다. 아마 앞으로 몇년간은 그대로겠죠. 소프트웨어 엔지니어를 찾고 고용하는 일은 무척 어렵습니다. 하지만 진짜 어려운 일은 아주 훌륭한 소프트웨어 엔지니어를 찾는 것이죠. 몇몇 플랫폼이 좀 더 거대한 커뮤니티를 갖고있긴 하나, 이 말은 프로그래밍 언어에 상관없이 사실입니다.

10여년 전, 저는 HTML, CSS, Javascript와 PHP로 첫번째 웹사이트를 만들었습니다. 웬걸, 그때는 이런 걸로 직업을 가질 수 있으리라고는 상상도 못했죠. 이후 저는 Ruby를 알게 되어 사랑에 빠졌고, Node.js도 배웠습니다. Objective-C로 iOS 앱 만드는 법도 배웠어요(사랑에 빠지진 않았지만 앱은 몇 개 만들었습니다). Go를 알게 되고는 다시 사랑에 빠졌습니다. 요즈음에는 Elixir와 Clojure로 놀고 있고요. 이 글을 쓰고 있는 지금은 온라인 Erlang 교육을 들으며, 제가 지금까지 개발하던 방식과는 완전히 다른 사고방식을 배우며 즐거워하고 있습니다. 아주 재미있어요.

이렇게 늘어놓자니 여드름 나던 시절 첫키스했던 여자아이로부터 시작해 모든 구여친들의 목록을 만들고있는 것 같네요. 당신이 디즈니랜드에 사는 게 아니라면, 내게 맞는 단 한 사람을 단번에 찾으리라 기대하지는 않을 겁니다. 제가 당신에게 어떤 완벽한 사람을 소개해줄테니 당장 가서 데이트하라고 하면 어떨까요? 저를 믿으시겠어요?

아마 아니겠죠.

연애와 프로그래밍이 다른 점은, 첫 PHP 코드를 짠지 수 년이 지난 지금도 저는 PHP 작업을 즐긴다는 것입니다. 물론 유일하며 신성한 index.php에 작성된 형편없는 코드를 좋아한다는 건 아닙니다. 저는 Symfony, Laravel과 Composer 같은 성숙한 프레임워크와 도구가 있는 생태계를 좋아합니다. 플랫폼이 진화해온 과정을 사랑합니다.

그리고 지나간 연애처럼, 이 언어에 쏟았던 시간들은 오늘날 프로그래머로서의 나를 구성하는 일부분입니다. 제 길에 거쳐간 다른 언어들도 조만간 그런 역할을 할 거고요.

최근 DHH(역자 주: David Heinemeir Hansson, Rails 창시자)의 RailsConf 세션을 봤습니다. 무척 흥미로운 영상이었지만 몇 군데 동의하기 어려운 주장이 있었습니다.

저는 언어나 플랫폼의 선택이 항상 이성적이고 논리적인 사고에 의한 것이 아니며, 오히려 특정한 믿음과 가치판단에서 비롯된다는 주장에 동의합니다. 이는 스타트업 창업자들에게 더욱 그러한데, 이들은 수백만 사용자로 바로 스케일업할 수 있는 기술 스택을 골라야만 하는 처지가 아니기 때문입니다. 그래서, 살아오며 선택해온 다른 것들처럼, 그저 당신이 알고, 경험해봤고, 사랑하는 가치를 지닌 것들을 고르게 됩니다.

다만 저는 DHH와 달리, 누군가가 꼭 특정 커뮤니티 하나에만 속할 필요는 없다고 생각합니다. 제가 Ruby의 문법, 커뮤니티와 단순성을 좋아하는 건 맞지만, 메서드 수십 개와 서로 다른 책임 다섯 개를 가진 클래스를 만들고 싶지는 않습니다. 저는 Go의 단순함과 강력함을 좋아하지만, 특징적인 지침을 강요하여 사용자들에게 자유를 제한하는 방식은 별로 동조하지 않습니다. 최근에는 Erlang과 Elixir 패턴 매칭에 푹 빠졌지만 제 프로젝트 대부분에서 이 언어들을 쓰지는 않을 겁니다.

그러나 제가 배우거나 시도해온 이 모든 언어들은 제가 반영해볼 수 있는 무언가가 되었고, 제가 작업할 때 더 나은 의사결정을 하도록 도와주고 있습니다. 이는 제가 하나의 기술에서 비롯된 하나의 관점과 하나의 해답만을 가지고 있지 않은 덕분입니다. 저는 제가 알고 이해해온 여러가지 관점 중 가장 현재 상황에 맞는 것을 선택할 수 있습니다. 더 많이 알면 프로그래머로서 더 넓은 시야를 가지게 되며, 새로운 것도 더 쉽게 배울 수 있습니다.

그리고 이게 바로 당신이 성장하기 위해 찾아나서야 할 것입니다. 하나 배워서 평생 먹고살 기술을 찾는 게 아니라요.

물론 어느 순간에는 특정 언어나 플랫폼에 더 특화된 전문성을 원하게 될지도 모릅니다. 그것도 좋습니다. 당신이 사랑하고 편안하게 느끼는 기술을 연마하기로 선택했을 테고, 그동안의 경험에서 배워온 것들을 활용하여 그 기술의 전문가가 될 테니까요.

이는 모든 언어에 통용됩니다. 모든 언어에는 당신이 좋아할 만한 요소와 싫어할 만한 요소가 있을 거예요. 사람은 과거의 인간관계와 선택과 실수로부터 자기 자신을 더 알아가게 됩니다. 소프트웨어 엔지니어도 마찬가지로, 다른 기술을 발견하고 학습하는 과정에서 스스로에 대해 더 많이 알게 되고, 더 나은 엔지니어가 됩니다. 변화와 새 패러다임과 새 사고방식과 새 해결책에 열려있게 됩니다. 몇 달만에 세상이 바뀌어버리는, 그리고 직업의 다양성이 무척 큰 이 시대에서, 변화 수용성은 언제나 바람직합니다.

그러니, 당신이 성공한 프리랜서 워드프레스 개발자라도 스스로를 PHP에 한정짓지는 마세요. Java에 빠삭하더라도 Java만 파지는 마세요. 프론트엔드 엔지니어라도, WebGL 개발자라도 Javascript만 쓰지는 마세요. iOS나 Android 개발 하나만 하지는 마세요. 객체지향 프로그래밍이나 함수형 프로그래밍에 스스로를 한정짓지 마세요.

유일한 플랫폼, 유일한 관념, 유일한 사고방식에 갇히지 마세요.

열린 마음과 호기심을 가지고, 배우는 사람이 되면 언젠가 당신에게 큰 보상이 돌아올 겁니다.

이것이 바로 당신이 반드시 배워야 할 무언가입니다.