새로운 프로그래밍 언어를 배우는 것에 대한 의견은 극명하게 나뉩니다. 어떤 사람들은 불필요한 노력이라고 생각하며, 이미 충분한 도구가 존재한다고 주장합니다. 반면, 끊임없이 새로운 것을 탐구하고 배우는 것을 즐기는 사람들은 새로운 언어 학습 자체를 목적으로 여기며, 주말 동안 새로운 언어로 간단한 게임을 만드는 데서 큰 만족감을 얻습니다.
어느 진영에 속하든, 미래를 위해 가치 있는 무언가에 시간을 투자하고 싶어 한다는 공통점이 있습니다. 기존 언어들은 이미 강력한 기반을 가지고 있으며, 앞으로도 계속해서 발전할 것입니다. 이러한 언어들은 이미 성숙한 개발 도구 생태계를 갖추고 있지만, 새로운 기술은 새로운 문제들을 해결하고 개발 과정을 더욱 편리하게 만들기 위해 지속적으로 등장합니다.
만약 어떤 기술이 이러한 필요를 충족시킨다면, 그 기술은 많은 사람들의 관심을 받게 될 것이고 결국 성공을 거머쥘 가능성이 큽니다. 그러한 상황에서 뒤처지지 않기 위해 새로운 기술에 대한 이해는 필수적입니다.
새로운 것에 대한 탐구가 즐거움일 수 있지만, 프로그래머로서 우리는 에너지를 낭비하지 않도록 주의해야 합니다. 예를 들어, Brainfuck과 같은 언어는 재미있을 수 있지만, 실제 프로젝트에서 유용하게 사용하기는 어렵습니다. 우리는 새롭지만 실질적인 기반을 가진 언어를 찾아야 합니다.
이 언어들이 선택된 기준

미래의 직업과 개인적인 만족을 고려할 때, 새로운 프로그래밍 언어를 선택하는 것은 어려운 일입니다. 모든 언어 개발자는 자신이 만든 언어가 완벽하고 모든 문제를 해결할 수 있다고 믿습니다. 그렇다면 어떻게 선택해야 할까요?
이 글에서는 몇 가지 명확한 기준을 설정하여 검색 범위를 좁히고자 합니다.
출시일
최근에 출시된 아주 새로운 언어들은 가급적 피했습니다. 출시된 지 5~6년 미만이고, 특히 안정적인 버전(1.0 릴리스)에 도달하지 못한 언어들은 아직 안정성이 검증되지 않았기 때문입니다. 아쉽게도, Crystal과 같은 매력적인 언어도 제외되었지만, 언젠가는 이 언어의 성공에 대해 글을 쓰게 되기를 바랍니다. 🙂
Crystal 코드 조각 (“C만큼 빠르고, Ruby만큼 매끄럽다”)
제 경험상, 언어가 안정화되고 개선되는 데는 출시 후 5년에서 12년 정도가 적당합니다. 물론 예외는 있을 수 있으며, 필요한 경우 고려될 것입니다.
흥분하면 간과하기 쉽지만, 대기업의 지원은 언어의 성공에 중요한 요소 중 하나입니다. Apple의 Objective-C와 Swift는 엄격하게 통제된 생태계에서 선택의 여지가 없었기 때문에 번성했지만, Facebook의 D와 Hack은 실험적인 언어에 불과했습니다. (개인적으로 Hack은 이미 추한 언어에 대한 또 다른 해석일 뿐이라고 생각합니다).

이상적인 조합은 큰 기업의 지원과 함께 빠른 속도로 인기가 증가하는 언어입니다. 예를 들어 React가 그 예입니다.
하지만 핵심은 커뮤니티입니다. 언어가 대중의 관심을 끌지 못하고, 교육하고 보급할 개발자가 충분하지 않다면, 결국에는 GitHub 저장소에 묻히고 말 것입니다. 이러한 이유로, Racket과 Erlang과 같이 성숙하고 흥미로운 언어들도 성장세가 정체되어 제외되었습니다.
명확하고 특정한 목적
언어의 명확한 목표를 가지고 있는지도 중요한 요소입니다. 예를 들어, 기존 PHP의 문제점을 수정하고 더 나은 버전의 PHP를 만들어서 PHP로 컴파일하는 것은 매력적이지 않습니다. 그로 인해 얻는 이점이 너무 미미해서 다른 언어로의 전환을 정당화하기 어렵기 때문입니다. 이러한 기준으로 볼 때, CoffeeScript와 같이 JavaScript로 컴파일되는 여러 언어들은 제외되었습니다.

단순히 구문만 개선된 언어는 고려 대상에서 제외했습니다. 역사를 살펴보면, 언어의 유용성이 편리함보다 우선시된다는 것을 알 수 있습니다. 따라서 새로운 언어가 더 나은 개발 경험에만 초점을 맞추었다면 이 목록에 포함되지 못했을 것입니다.
명확하고 일관된 구문
구문이 중요하지 않다고 말했던 것을 기억하실 겁니다. 정확히는 “구문 개선만으로는” 충분하지 않다고 말했습니다. 하지만 구문은 여전히 프로그래머 생산성과 유지보수에 큰 영향을 미치는 요소입니다. 따라서 구문도 평가에 포함해야 합니다.

구문과 함께, 일관성도 중요합니다. 함수 이름 규칙, 모듈 구성 등은 언어 설계에서 놓쳐서는 안 될 중요한 부분입니다. 우리는 2018년에 살고 있으며, PHP와 같이 일관성이 부족한 언어를 다시 만들어서는 안 됩니다. 자, 이제 더 이상 고민하지 않고 상위 5개의 추천 언어를 소개하겠습니다.
1. Julia
MIT의 연구진은 데이터 과학에 적합한 언어를 찾던 중, 기존 언어들의 부족한 점을 발견했습니다. Python은 명확성과 인기에도 불구하고 데이터 객체 처리에 필요한 기본 기능이 부족했습니다. 또한, 인터프리터 언어이기 때문에 Python은 그들에게 느리게 느껴졌습니다 (대부분 C로 작성된 라이브러리 때문이 아니라). 하지만 가장 큰 문제는 병렬 컴퓨팅 모델 부족과 어색한 동시성 모델이었습니다. 특히 병렬 컴퓨팅은 슈퍼컴퓨팅에 필수적인 요소입니다.
이러한 문제점을 해결하기 위해 Julia가 탄생했습니다.

Julia는 이 글을 쓰는 시점으로부터 며칠 전인 2018년 9월 29일에 안정 버전이 출시되었습니다. Julia 공식 웹사이트에 따르면, Julia는 수치 계산에 특화되어 있습니다. Julia의 구문은 수학에 적합하며, 다양한 숫자 데이터 유형을 지원하고, 병렬 처리를 즉시 사용할 수 있습니다. 또한, Julia의 다중 디스패치 기능은 숫자와 배열과 같은 데이터 유형 정의에 유용합니다.
구문적인 측면에서 Julia는 Python과 C의 조합으로 볼 수 있습니다. 이 두 가지 특성을 모두 성공적으로 구현한 언어는 아마도 Julia가 처음일 것입니다.
Julia는 사용자가 빠르게 코드를 작성할 수 있도록 개발되었으며, 엄격한 유형 검사를 강제하지 않습니다. 다음은 몇 가지 성능 측정 결과입니다.
공식 Julia 벤치마크
결과를 보면 Julia가 C보다는 조금 느리지만, Java와 Python을 훨씬 뛰어넘는다는 것을 알 수 있습니다. 그렇다면 Julia 코드는 어떻게 보일까요?
다음은 직각삼각형의 빗변을 계산하는 함수입니다.

Julia 생태계는 수학적 계산에 특화되어 있지만, 저는 Julia의 범용적인 활용 가능성이 매우 높다고 생각합니다. 특히, 병렬 컴퓨팅에 대한 최고의 지원을 제공하는 최초의 언어 중 하나이므로, 웹 및 IoT 영역에서 인기가 높아지고 있는 것은 당연합니다.
2. Rust
최근에 출시된 Firefox 브라우저를 사용해 보셨다면, 수년간의 노력 끝에 Chrome의 시장 점유율을 일부 가져올 수 있을 것처럼 보입니다. Firefox가 가볍고 빠르며 렌더링 속도가 향상된 이유는 Mozilla가 특별히 개발한 언어인 Rust 덕분입니다.

Rust의 미래는 매우 밝습니다. Rust는 이미 큰 성공을 거두고 있습니다. 만약 여러분이 아직 Rust에 대해 들어보지 못했다면, 이는 Rust의 목표가 매우 전문적이고 어려워서, 즉 C++를 대체하는 것을 목표로 하고 있기 때문입니다. 그렇습니다. 마침내 C++를 대체할 수 있는 언어가 등장했습니다. C++의 복잡한 디자인과 메모리 관리 문제에 지친 사람들에게 Rust는 신선한 공기와 같습니다.
다음은 Rust 프로그램의 예시입니다.

제 생각에 Rust 코드는 간결하고 세련되어 보입니다. Rust는 코드를 더 쉽게 구성할 수 있도록 함수형 프로그래밍 방식을 따르며, 복잡한 객체 지향 계층 구조를 다루지 않아도 됩니다.
그렇다면 Rust가 C++를 대체할 수 있다는 자신감은 어디에서 오는 것일까요? 바로 새로운 메모리 관리 모델 때문입니다. Rust는 기존의 new()/delete() 방식 대신 소유권(Ownership)이라는 개념을 도입했습니다. Rust 변수는 컴파일러에 의해 엄격하게 제한되고 서로 “빌립니다”. 이 개념은 다소 복잡하기 때문에 자세한 내용은 공식 문서를 참고하시는 것이 좋습니다.
핵심은, 이러한 방식으로 메모리 안전성을 100% 보장하면서 가비지 컬렉터가 필요 없다는 것입니다. 이것은 매우 중요한 혁신입니다.
Rust는 시스템 프로그래밍 세계에서 빠르게 성장하고 있습니다. Rust는 이미 여러 플랫폼에서 지원되고 있으며, 브라우저와 렌더링 엔진에서 C/C++ 코드를 빠르게 대체하고 있으며, 운영체제를 만드는 데에도 사용되고 있습니다.
물론, 모든 사람이 브라우저나 장치 드라이버를 만들 필요는 없지만, Rust는 이미 다른 영역으로 확장되고 있습니다. Rust를 기반으로 한 빠르고 기능적인 웹 프레임워크가 존재하며, 점점 더 많은 라이브러리가 개발되고 있습니다.
미래에 관심이 있다면 Rust는 완벽한 언어이고, 지금이 Rust를 배우기에 가장 적절한 시기입니다. Rust는 이미 이륙한 비행기이지만, 별을 향해 가고 있기 때문에 아직 탑승할 시간이 있습니다!
Dmitri Nesteruk의 Rust 강좌를 통해 배워보세요.
3. Elixir
개발자의 행복에 초점을 맞춘 언어의 대명사는 Ruby였습니다. Ruby는 마치 시처럼 읽히고, 정신적인 부담을 최소화할 수 있는 여러 가지 편리한 기능을 제공합니다. Rails 프레임워크가 여전히 많은 개발자와 스타트업에게 풀스택 개발 도구로 사용되고 있는 것은 당연합니다. 하지만 핵심 개발자 중 한 명인 Jose Valim은 Rails에 만족하지 않았습니다. 그는 인터뷰에서 Elixir의 기원을 다음과 같이 설명했습니다.
“2010년으로 돌아가면, 저는 멀티코어 시스템에서 Rails의 성능을 개선하는 작업을 하고 있었습니다. 기계와 생산 시스템에 코어가 점점 더 많이 탑재되고 있었기 때문입니다. 하지만 Ruby가 동시성 문제를 해결하는 데 적절한 도구를 제공하지 않았기 때문에 실망스러웠습니다. 그래서 다른 기술을 살펴보던 중 Erlang 가상 머신에 관심을 갖게 되었습니다. Erlang을 사용하면서 함수형 언어를 포함한 다른 언어에서 제공되는 몇 가지 유용한 기능이 부족하다는 것을 알게 되었습니다. 그래서 Erlang VM 위에 다양한 기능과 훌륭한 도구를 제공하기 위해 Elixir를 만들기로 결정했습니다.”

그 결과, Elixir가 탄생했습니다! Scala가 Java 언어를 개선하지만 JVM을 대상으로 하는 것처럼, Elixir는 수십 년 동안 검증된 Erlang 가상 머신을 활용합니다.
Erlang에 대한 논의는 이 글의 범위를 벗어나지만, 적어도 알아야 할 것은 Erlang이 통신 업계에서 비밀리에 사용되는 기술이라는 것입니다. 웹 기반 시스템보다 전화 네트워크가 훨씬 안정적인 이유 중 하나는 바로 Erlang 때문입니다.
더 쉽게 설명하면, 채팅과 같은 실시간 시스템을 구축할 때 Elixir는 Ruby(또는 PHP, Python, Java)보다 안정적이고 RAM 소모량이 적습니다. Ruby로 10,000개의 동시 연결을 지원하는 시스템이 있다면, Elixir를 사용하면 200,000개의 연결을 쉽게 처리할 수 있으며, 여전히 2D 게임을 실행하기에 충분한 RAM을 확보할 수 있습니다!
Elixir 코드 조각
구문 측면에서 Elixir는 Ruby와 유사하며, Elixir의 주요 웹 프레임워크인 Phoenix는 Rails와 유사합니다. 다른 언어들도 Rails와 유사한 프레임워크를 가지고 있으며, 전환을 쉽게 만들고 있기 때문에 이는 좋은 현상이라고 생각합니다. 어떤 사람들은 이러한 “독창성 부족”을 비판할지 모르지만, 적어도 저는 불만을 느끼지 않습니다.
결론적으로, Elixir는 매우 실용적이고 매력적인 기술입니다. 많은 Ruby 개발 회사들이 Elixir로 전환하고 있으며, Pinterest와 같은 대기업에서도 만족스러운 결과를 얻고 있습니다.
많은 사람들은 Node.js가 동시성을 위한 임시적인 시도였으며, 곧 Elixir로 대체될 것이라고 생각합니다. 저도 이 의견에 동의합니다. 🙂
4. Kotlin
2017년 Google I/O 행사에서 Google은 충격적인 발표를 했습니다. Google이 Kotlin을 Android 개발의 공식 언어로 채택한다고 발표한 것입니다. 이 발표는 업계에 큰 파장을 일으켰습니다.
Oracle 소송 이후 Google이 Java를 대체할 언어를 모색하고 있다는 사실은 놀라운 일이 아니었지만, Kotlin의 채택은 다소 예상 밖의 일이었습니다. Google이 자체 가상 머신을 출시할 가능성이 여전히 높지만, 당분간 Kotlin은 빠르게 성장하고 있습니다.

Kotlin은 코드 편집기 제품군으로 유명한 JetBrains에서 개발했습니다. 그중 하나인 IntelliJ IDEA는 Android Studio의 기반이 됩니다. Kotlin의 설계 목표는 안전성, 간결성, Java와의 100% 상호 운용성입니다.
특히, Kotlin 컴파일러는 Java 세계에서 자주 발생하는 NullPointerException을 제거하기 위해 노력합니다. 또한, 많은 개발자들이 불만을 가졌던 Java의 장황함도 상당 부분 줄였습니다.
다음은 Java와 Kotlin 코드를 비교한 것입니다.
이미지 제공: hype.codes
Kotlin 코드가 훨씬 짧고, 다루어야 할 인지적 부담이 적다는 것을 알 수 있습니다.
분명히 말하지만, Kotlin이 Java를 완전히 대체할 가능성은 낮지만, Kotlin은 빠르게 인기를 얻고 있습니다. 앞으로 10년 후에는 소규모 팀이 Kotlin을 사용할 것이며, 대규모 팀은 레거시 이유 때문에 Java를 계속 사용할 것이라고 생각합니다.
결론적으로, Kotlin은 Java가 하는 모든 작업을 수행할 수 있으며, Java 코드와 매끄럽게 통합될 수 있고, 사용하기에도 더 편리하므로 밝은 미래가 기대됩니다!
5. TypeScript
이 자리에 다른 언어를 추천해야 할지 고민이 많았습니다. 제 마음속으로는 Elm을 추천하고 싶었지만, Elm은 아직 프런트엔드 개발의 주류 대안으로 간주되지 않고 있습니다. 🙁 그래서 주류 언어인 TypeScript로 넘어가겠습니다.
JavaScript는 마치 야생 열매와 같습니다. 보기에는 좋지 않고 불편하지만, 프런트엔드 개발의 정글에서 살아남고 싶다면 JavaScript를 감수해야 합니다. JavaScript를 대체하려는 많은 시도가 있었지만, Microsoft에서 개발한 상위 집합인 TypeScript가 개발자들의 관심을 끌었습니다.

TypeScript는 Angular 2 버전부터 채택되었고, 많은 개발자들의 주목을 받았습니다. TypeScript는 세계에서 가장 유명한 프로그래밍 언어에 필요한 기능을 추가하여 더욱 강력하게 만들어줍니다.
네, 드디어 JavaScript 코드를 작성하면서 자신의 탄생을 저주하지 않을 수 있게 되었습니다!
TypeScript가 제공하는 개선 사항은 다음과 같습니다.
- 강력한 타이핑: 문자열은 더 이상 숫자가 아니고, 숫자는 객체가 아니며, 빈 배열이 아닙니다!
- 컴파일 시간 유형 검사: 코드가 올바르게 컴파일되면, JavaScript 런타임 오류를 최소화할 수 있습니다.
- 클래스와 모듈: 클래스는 ES6 표준이지만, TypeScript는 모듈 시스템도 제공합니다.
- 유형 추론: 복잡한 유형의 경우, 컴파일러가 유형을 쉽게 추론할 수 있으므로 개발자의 노력이 절감됩니다.
- Async/await: async/await 키워드는 기본적으로 제공되므로, 더 이상 promise와 콜백을 헷갈려 할 필요가 없습니다!
네임스페이스, 제네릭, 튜플 등 TypeScript가 제공하는 기능은 많지만, TypeScript가 개발 경험을 크게 향상시킨다는 것을 이해하시는 것으로 충분합니다.
TypeScript 코드 조각
TypeScript의 영향력은 매우 큽니다. Google의 Dart와 같은 유사한 시도를 시장에서 밀어냈으며(모바일 개발 프레임워크인 Flutter를 통해 복귀를 시도하고 있지만), JavaScript 개발자들에게 타입 시스템의 중요성을 일깨웠습니다. 그 결과, React, D3, Vue와 같은 주요 라이브러리에는 이제 TypeScript 버전이 있으며, 전 세계의 많은 소프트웨어 회사들이 TypeScript를 사용하여 JavaScript 코드를 작성하고 있습니다. TypeScript 헤더는 Node.js에서도 사용할 수 있습니다. (솔직히 말해서, Node.js가 동시성 문제를 해결하고 메모리 관리를 개선할 수 있다면, 계속해서 사용될 것이라고 생각합니다.)
Node.js의 창시자가 공개적으로 자신의 창조물을 후회하고 있으며, TypeScript를 기본 언어로 사용하는 새로운 런타임 (현재 공식 웹사이트는 없고 GitHub 저장소만 있음)을 개발하고 있다는 사실을 고려해 볼 때, 이러한 추세는 더욱 명확해집니다.
가장 좋은 소식은 무엇일까요? TypeScript는 단기간에 배우기 쉬운 언어이며, 큰 이점을 얻을 수 있습니다. 숙련된 JavaScript 개발자라면 2일 이내에 기존 코드를 TypeScript로 마이그레이션하는 데 필요한 TypeScript 지식을 습득할 수 있을 것입니다!
결론 및 면책 조항
특정 언어들은 이 글에서 소개한 언어만큼 인기가 있을 수 있지만, 여러 가지 이유로 목록에 포함되지 않았습니다. 다음은 몇 가지 예입니다.
- Golang: 인기가 많지만, 이미 주류 언어로 자리 잡았습니다. 현재 Golang은 시장 점유율을 제한하는 여러 경쟁자가 있습니다.
- R: R은 이미 데이터 과학자들에게 인기가 있지만, 애플리케이션 개발자들을 끌어들이기는 어려울 것으로 예상됩니다. 또한, 머신러닝 라이브러리가 모든 주요 언어로 출시되고 있다는 것을 기억해야 합니다. (PHP에도 지금은 머신러닝 라이브러리가 있습니다!) 따라서 필요한 것은 약간의 인내심입니다. 🙂
- Swift: Apple은 생태계에서 강력한 영향력을 가지고 있으며, Swift는 Apple 생태계에서 사용할 수 있는 유일한 언어입니다. 이전에는 Objective-C가 사용되었지만, 지금은 Swift가 그 자리를 차지했습니다. 저는 Swift가 약간의 편법이라고 생각하며, 목록에 포함하는 것을 거부했습니다. 😀
미래는 불확실하지만, 경력을 쌓는 확실한 방법 중 하나는 이미 효과적인 기술에 집중하고 “주의를 분산시키지 않는 것”입니다. 그렇게 한다면, Java, PHP, Python, Ruby 등은 모두 훌륭한 언어이며, 계속해서 사용할 수 있습니다. 하지만 표준적인 것만으로는 만족하지 못하는 사람들도 있습니다. 그들은 새로운 것을 탐구하고 미래에 투자하고 싶어합니다. 만약 후자에 속한다면, 이 5개 언어 중 하나를 배우는 것이 가장 좋은 선택이 될 것입니다.
마지막으로, 새로운 언어를 평가할 때 너무 부담감을 갖지 마세요. 이미 몇 가지 프로그래밍 언어를 알고 있다면, 일주일에 5-6시간 투자하여 최대 2개월 이내에 이러한 언어를 배울 수 있습니다. 반면에 앞으로 얻을 수 있는 행복과 금전적 수익은 훨씬 더 클 것입니다.
여기서 중요한 언어를 놓쳤나요? 아니면 여기에 나열된 언어에 대해 잘못된 부분이 있나요? 그렇다면 의견을 남겨 개선할 수 있도록 도와주세요. 🙂