2010년대에 프로그래밍에는 무슨 일이 있었을까?
얼마 전 Fred Wilson이 쓴 “2010년대에 무슨 일이 있었을까”라는 글을 읽었습니다. 이 글은 지난 10년 동안 기술과 비즈니스 분야에서 일어난 주요 변화를 짚어 봅니다. 이 글을 읽고 훨씬 더 좁은 주제에 대해 생각해 보게 됐습니다. 바로 2010년대에 프로그래밍에는 무슨 일이 있었을까?입니다.
🚓 실제로 무슨 일이 있었는지 아마 90%쯤은 잊어버렸을 겁니다. 제발 고소하지 마세요. 이 글의 목적은 과거를 돌아보고, 여러분이 미래를 더 잘 예측할 수 있도록 돕는 것입니다.
어디서부터 시작할까?
아주 거시적인 관점에서 보면 프로그래밍은 10년 전과 여전히 같습니다.
- 에디터에 프로그램을 입력한다
- 컴파일러(또는 인터프리터)에 넘긴다
- 삐빅 부웅 🤖
- 출력을 받는다
하지만 좀 더 자세히 들여다보면, 주변의 많은 것들이 변했습니다. 오늘날 당연하게 여기는 것 중에는 10년 전만 해도 존재하지 않았던 것이 많습니다.
그전에는 무슨 일이 있었을까?
2009년만 해도 우리는 jQuery 플러그인을 만들고, 공유 호스팅 서비스에서 웹사이트를 운영하고, FTP로 콘텐츠를 업로드했습니다. 때로는 수상쩍은 포럼이나 블로그 튜토리얼에서 코드를 복사해 붙여 넣었고, 심지어 책을 보며 손으로 옮겨 적기도 했습니다. 2008년 9월 15일에 시작한 Stack Overflow는 아직 걸음마 단계였습니다. 버전 관리는 CVS나 SVN으로 했고, 아예 하지 않는 경우도 있었습니다. 저는 2010년 1월 3일에 Github에 가입했습니다. Raspberry Pi라는 이름은 누구도 들어 본 적이 없었습니다(2012년에야 출시됐으니까요).

새 프로그래밍 언어의 폭발적 증가
지난 10년 동안 새롭고 흥미로운 프로그래밍 언어가 엄청나게 많이 탄생했습니다.
Crystal, Dart, Elixir, Elm, Go, Julia, Kotlin, Nim, Rust, Swift, TypeScript가 모두 첫 안정 버전을 출시했습니다!
더 흥미로운 점은 위 언어가 모두 이제 공개적으로 개발되고 있으며, 소스 코드도 Github에서 자유롭게 제공된다는 사실입니다. 즉 누구나 개발에 기여할 수 있습니다. 오픈 소스의 힘을 잘 보여 주는 사례입니다.
이 언어들은 각각 이전에는 널리 퍼지지 않았던 새로운 아이디어를 선보였습니다.
- 강력한 타입 시스템: Kotlin과 Swift는 널 허용 타입을 대중화했고, TypeScript는 JavaScript에 타입을 도입했습니다. 대수적 데이터 타입은 Kotlin, Swift, TypeScript, Rust에서 흔히 사용됩니다.
- 상호 운용성: Dart는 JavaScript로 컴파일되고, Elixir는 Erlang과 연동되며, Kotlin은 Java와, Swift는 Objective-C와 연동됩니다.
- 더 나은 성능: Go는 동시성 처리를 쉽게 해 주는 고루틴과 채널을 널리 알렸고, 1밀리초 미만의 가비지 컬렉터로 깊은 인상을 남겼습니다. Rust는 소유권과 차용 덕분에 가비지 컬렉터의 오버헤드를 아예 피합니다.
이는 짧은 목록에 불과하지만, 프로그래밍 언어 분야의 혁신은 크게 가속됐습니다.
기존 언어에서도 이어진 혁신
기존 언어들도 가만히 있지는 않았습니다. 몇 가지 예를 들어 보겠습니다.
C++는 긴 겨울잠에서 깨어났습니다. 1998년 마지막 메이저 릴리스 이후 C++11을 출시했고, 람다, auto 포인터, 범위 기반 반복문 등 수많은 새 기능을 언어에 추가했습니다.
지난 10년이 시작될 무렵 최신 PHP 버전은 5.3이었습니다. 지금은 7.4입니다. (6.0을 건너뛰었지만, 그 이야기는 아직 할 준비가 안 됐습니다.) 그 과정에서 속도는 두 배 이상 빨라졌습니다. PHP는 이제 정말 현대적인 프로그래밍 언어가 됐고, 생태계도 활발하게 성장하고 있습니다.
심지어 Visual Basic에도 이제 튜플이 있습니다. (죄송합니다. 이건 그냥 지나칠 수가 없었습니다.)
더 빨라진 릴리스 주기
대부분의 언어가 더 빠른 릴리스 주기를 채택했습니다. 주요 언어 몇 가지를 살펴보면 다음과 같습니다.
| 언어 | 현재 릴리스 주기 |
|---|---|
| C | 불규칙 |
| C# | 약 12개월 |
| C++ | 약 3년 |
| Go | 6개월 |
| Java | 6개월 |
| JavaScript (ECMAScript) | 12개월 |
| PHP | 12개월 |
| Python | 12개월 |
| Ruby | 12개월 |
| Rust | 6주(!) |
| Swift | 6개월 |
| Visual Basic .NET | 약 24개월 |
null의 느린 죽음
지난 10년이 끝나 갈 무렵인 2009년 8월 25일, Tony Hoare는 강연에서 null 포인터를 자신의 10억 달러짜리 실수라고 표현했습니다.
Chromium 프로젝트의 연구에 따르면 심각한 보안 버그의 70%가 메모리 안전성 문제였습니다(Microsoft도 마찬가지입니다). 다행히도 메모리 안전성 문제는 형편없는 코더 탓이 아니라는 생각이 마침내 힘을 얻기 시작했습니다.
많은 주류 언어가 null을 대신할 더 안전한 대안, 즉 nullable 타입과 Option, Result 타입을 받아들였습니다. Haskell 같은 언어에는 예전부터 이런 기능이 있었지만, 대중적인 인기를 얻은 것은 2010년대였습니다.
타입 시스템의 복수
이와 밀접하게 관련된 주제가 바로 타입 시스템 논쟁입니다. 지난 10년 동안 타입 시스템은 다시 무대의 중심으로 돌아왔습니다. TypeScript, Python, PHP 등이 타입 시스템을 받아들이기 시작했습니다.
추세는 타입 추론을 향하고 있습니다. 다른 사람이 의도를 더 명확히 이해할 수 있도록, 그리고 모호한 상황에 대비해 타입을 추가하고, 그렇지 않다면 생략하는 방식입니다. Java, C++, Go, Kotlin, Swift, Rust는 타입 추론을 지원하는 대표적인 언어입니다. 제 개인적인 경험만 말하자면, 최근 몇 년 사이 Java 코드를 작성하는 일이 훨씬 편해졌다고 생각합니다.
폭발적으로 늘어난 라이브러리와 프레임워크
현재 npm에는 1,330,634개의 패키지가 등록돼 있습니다. 누군가 대신 유지 관리해 주는 패키지가 100만 개가 넘는다는 뜻입니다. 여기에 Ruby gem 160,488개, Python 프로젝트 243,984개, 그리고 Rust crate 42,547개까지 더해 보세요.

2019년에 npm에 무슨 일이 있었는지는 묻지 마세요.
출처: Module Counts
물론 가끔 leftpad 같은 일도 벌어집니다. 하지만 그만큼 우리가 직접 작성해야 할 라이브러리 코드가 줄어들고, 대신 비즈니스 가치에 집중할 수 있다는 뜻이기도 합니다. 반면 잠재적인 장애 지점은 늘어나고, 감사를 수행하기도 어려워졌습니다. 오래된 패키지도 상당히 많습니다. 더 자세한 논의를 원한다면 Linux Foundation과 Harvard가 작성한 Census II 보고서[PDF]를 추천합니다.
프런트엔드 프레임워크도 조금 미친 듯이 늘어났습니다.
공짜 점심은 없다
이런 회고에서 무어의 법칙을 살펴보지 않는다면 완전하지 않을 겁니다. 무어의 법칙은 지난 10년 동안 놀라울 정도로 잘 유지됐습니다.

하지만 함정이 있습니다. 단일 코어 성능을 보면 곡선이 평평해지고 있습니다.

무어가 예견한 새로운 트랜지스터는 CPU를 더 빠르게 만드는 대신, 병렬성 향상이나 하드웨어 암호화처럼 다른 종류의 처리 능력을 추가합니다. 이제 공짜 점심은 없습니다. 엔지니어는 애플리케이션을 더 빠르게 만드는 새로운 방법을 찾아야 합니다. 예를 들어 동시 실행을 받아들이는 식입니다.
콜백과 코루틴, 그리고 마침내 async/await가 업계 표준이 되어 가고 있습니다.
GPU(Graphics Processing Unit)는 매우 강력해졌고, 대규모 병렬 연산이 가능해졌습니다. 그 결과 실제 사용 사례를 위한 머신러닝이 르네상스를 맞았습니다.
딥러닝이 실현 가능해졌고, 이는 머신러닝이 널리 사용되는 많은 소프트웨어 서비스와 애플리케이션의 핵심 요소가 되는 결과로 이어졌습니다. — Wikipedia의 머신러닝 연대표
컴퓨팅 자원은 어디에나 존재합니다. 따라서 적어도 소비자 기기에서는 대부분의 경우 순수한 성능보다 에너지 효율이 더 중요한 역할을 하게 됐습니다.
뜻밖의 운명적 반전
- Microsoft가 이제 쿨한 기업이 됐습니다. Github를 인수했고, Windows Subsystem for Linux(정말로는 Linux Subsystem for Windows라고 불러야 할 것 같습니다)를 발표했으며, MS-DOS와 .NET을 오픈 소스로 공개했습니다. 심지어 Microsoft Calculator도 이제 오픈 소스입니다.
- IBM이 Red Hat을 인수했습니다.
- Linus Torvalds가 자신의 행동에 대해 사과하고 잠시 자리를 비웠습니다.
- 오픈 소스가 소프트웨어 개발의 기본값이 됐습니다(아마도?).
배운 점
지금 여러분이 이렇게 생각하고 있다면 말입니다. Matthias, X를 완전히 빼먹었잖아. 그렇다면 제가 말하고 싶은 요점을 제대로 전달한 셈입니다. 이 글은 실제로 일어난 일의 극히 일부도 다루지 못했습니다. 모든 일을 이야기하려면 대략 10년은 필요할 겁니다.
개인적으로 저는 앞으로의 10년이 기대됩니다. 소프트웨어는 세상을 집어삼키고 있습니다. 그것도 점점 더 빠른 속도로 말입니다.
글을 무작위로 읽기