티스토리 뷰
매년말이면 많은 사이트에서 여러 프로그래밍 언어에 대한 조사나 예측을 내놓습니다. 작년 초에 올렸던 2018년 가장 유망한 프로그래밍 언어 포스팅에 이어서 2020년을 예측하는 글들을 모아 다시 한번 정리해 보려고 합니다.
전세계적으로 엄청나게 많은 개발자들을 사용자로 보유하고 있는 스택오버플로우 사이트는 연말에 사용자들을 대상으로 IT의 거의 모든 분야에 대해 설문조사를 하여 분석 결과를 발표합니다. 그리고 이 조사에서 가장 많은 관심을 받는 부분이 (연봉 빼고) 프로그래밍 언어에 대한 내용입니다. 이 조사는 개발자들이 사랑하는 언어(선호도)와 수요가 많은 언어(인기도), 그리고 사라져가는 언어를 조사합니다. 여기서는 인기도와 선호도 결과를 분석한 여러 자료를 정리하여 우리에게 어떤 의미를 가지는지 분석해 보려고 합니다.
먼저 수요가 많은 언어에 대한 조사 결과를 살펴보겠습니다. 이것은 개발자 구인 정보와 프로젝트의 언어별 개발자 수요를 조사하여 순위를 매기게 됩니다. 또한 이것은 미국을 위주로 한 전 세계의 통계를 바탕으로 한 것이므로 우리나라의 상황과는 차이가 있습니다.
가장 눈에 띄는 것은 상위 세 언어 파이썬, 자바스크립트, Go의 인기가 불변이라는 점입니다. 이것은 이들 언어가 매우 중요하고 현실적으로 개발에 가장 많이 쓰이고 있음을 말합니다. 미국은 물론이고 우리나라에서도 파이썬의 인기는 몇 년째 이어지고 있습니다. 자바스크립트는 두 말할 필요없이 웹 개발의 필수 언어고 거의 모든 웹프로젝트에서 사용하고 있다고 볼 수 있습니다. Go는 구글이 만들어서 밀고 있는 언어로 C/C++ 수준의 성능과 현대적인 프로그래밍 언어 개념을 포함하여 매우 잘 만들어진 언어입니다. 그래서 파이썬과 자바스크립트 같은 절대 강자와 나란히 어깨를 겨누고 있습니다.
타입스크립트와 코틀린은 각각 웹프론트와 모바일(안드로이드)을 위해 개발된 특수 목적 언어입니다. 그리고 마이크로소프트와 구글의 지원을 받고 있습니다. 타입스크립트는 비쥬얼스튜디오 환경에서 개발하여 자바스크립트로 변환할 수 있어 자바스크립트를 급속히 대체할 것으로 예상됩니다. 코틀린은 안드로이드 환경 앱개발의 실제 표준이나 다름없어 높은 수요를 보이고 있습니다.
다음으로 이 그림에서 놀라운 것은 2019년 자바의 하락입니다. 자바는 웹과 모바일, 어플리케이션 개발 등 그야말로 모든 곳에서 절대강자의 위치를 누리고 있었으나 이제 여러 분야에서 대항마들이 나타나서 기존의 아성을 위협하고 있습니다. 서버 부분은 파이썬과 Go, 모바일에서는 코틀린의 약진이 두드러집니다. 새로운 프로젝트를 기획할 때 이제는 자바 이외의 대안이 많아진 것입니다. 또한 자바 언어가 매년 새로운 버전을 내놓으면 바뀌고 있는 현실도 영향을 주는 것으로 보입니다. 어쨌든 자바가 2019년 뚜렷한 하향세를 보인 것은 놀라운 일이라고 할 수 있습니다.
다음은 Rust의 상향입니다. Rust라는 언어는 모질라의 Graydon Hoare가 2006년부터 개발한 언어로 C/C++을 대체하면서 효율성과 안전한 프로그래밍이 가능한 언어를 목적으로 개발되었습니다. 10년에 걸친 꾸준한 버전업을 통해 오늘날 가장 사랑받는 언어로 당당하게 이름을 올렸습니다. Rust에 대해서는 다음 포스트에서 좀더 자세하게 소개하겠습니다.
또하나 위의 그림에서 눈에 띄는 것이 WebAssembly(줄여서 Wasm로 씀) 언어의 등장입니다. 이것은 브라우저의 VM 상에서 실행될 수 있는 스택 기반의 중간 언어 표준으로 어셈블리 코드와 비슷한 형태를 가집니다. 그러므로 사실 개발용 언어라기 보다는 브라우저의 속도를 높일 수 있는 실행환경의 하나라고 볼 수 있으며, C/C++/Rust 같은 언어로 개발한 후 이 언어로 컴파일하여 중간코드를 만들고 그것을 웹 클라이언트와 서버 환경에 포함시킬 수 있습니다.
다음으로 스택오버플로우 개발자들이 가장 사랑하는 언어를 살펴보겠습니다.
이것은 언어의 선호도 또는 새로 배우고 싶은 언어 순위라고 할 수 있습니다. 실제 프로젝트에 도입되는 언어와는 차이가 있을 수 있으나 개발자들이 보기에 좋은 언어, 앞으로 잘 나갈 것 같은 언어들이라고 할 수 있습니다.
Rust는 스택오버플로우 사랑받는 언어 조사에서 2016년부터 4년째 1위를 유지하고 있습니다. 이 언어가 얼마나 좋은 언어인지를 보여주는 결과라고 할 수 있겠습니다. 이 언어는 모질라에서 오픈 소스로 개발되었고 메모리 측면에서 안전성을 높였으며, C/C++과 비슷한 간결한 신택스를 가집니다. 파이썬과 같이 초보자도 배울 수 있는 편리하고 뛰어난 언어이면서 웹이나 로우레벨의 시스템 분야에서도 쓰일 수 있는 강력함(메모리 효율성 측면)을 가진다고 합니다. 저도 이번 방학에는 Rust를 한번 도전해 보려고 합니다.
다음으로 파이썬이 사랑받는 언어 2위로 올라간 것을 볼 수 있습니다. 파이썬은 5년동안 사랑받는 언어 5위 안에 들었고 점점 더 상위로 올라가고 있는 유일한 언어입니다. 이 언어의 인기는 놀라울 정도입니다. 코틀린이나 Go 같은 언어는 구글의 강한 지원으로 급속하게 도입이 확산되고 있으나 선호도에서는 파이썬에 밀리고 있습니다. 그만큼 요구되고 필요한 언어임에도 개발자들의 사랑을 받는 데서는 파이썬에 밀린다는 것입니다. 파이썬이 얼마나 좋은 언어인지를 보여주는 측면이라고 생각됩니다.
타입스크립트는 자바스크립트의 단점(타입검사가 안되고 디버깅이 어려운, 등등)에 거부감이 강한 웹개발자들에게 열렬한 환영을 받고 있습니다. 현대적 언어의 개념과 장점을 포함하여 자바나 파이썬처럼 안정적이고 프로그래밍하기 쉬우면서 개발환경(MS Visual Studio)도 뛰어난데다 자바스크립트로 변환하여 바로 사용가능하니 앞으로가 더욱 유망한 언어입니다.
웹어셈블리도 역시 자바스크립트의 영역을 대체하는 언어로 주목되고 있으나 VM 기반의 중간언어인 점을 생각한다면 사랑받는 언어 순위에 오른 것은 역시 놀라운 일입니다. 그만큼 이 언어가 가능하게 해주는 웹개발 방식의 변화가 어마어마한 발전이라고 할 수 있겠습니다.
저는 이 블로그에서 자바, 파이썬, C/C++을 다루고 있습니다. 여기에 자바스크립트, SQL을 더하면 한국에서 많이 사용되고 있는 언어들이 될 것입니다. 또한 대학에서 처음으로 배우는 언어들이기도 합니다. 프로그래밍의 시작을 어떤 언어로 할 것인가는 보통 개인의 선호도와는 상관없이 환경에 의해 또는 기회가 주어진 것을 먼저 배우게 됩니다.
파이썬은 지난 5년간 선호도와 수요에서 꾸준히 증가하는 유일한 언어입니다. 파이썬은 배우기 쉽고 범용적인 언어로 누군가 프로그래밍 언어를 하나만 배운다면 저는 당연히 이 언어를 추천합니다. 파이썬은 초기에는 데이터분석 분야에서 많이 쓰였으나 이제는 웹과 서버 개발에서도 점점 더 범위를 넓혀가고 있습니다. 2019년에 보여준 파이썬의 약진에는 한계가 없어보입니다.
JAVA는 꾸준히 증가하다가 2019년에는 코틀린의 인기에 밀려 인기가 좀 내려갔습니다. 자바는 최근까지도 매우 중요한 언어이고 광범위하게 사용되었으나 오라클이 자바 표준의 관리를 담당한 후 너무 많은 버전이 섞이고 언어 자체가 거대해지면서 기존의 자바가 가지고 있던 팔방미인으로서의 장점(Run everywhere)은 사라졌다고 할 수 있습니다. Go와 파이썬이 서버 개발의 대안으로 떠오르고, 구글의 코틀린과 모바일 개발 영역에서 경쟁하게 되면서 오라클의 자바는 기존의 절대강자의 지위를 지키지는 못할 것으로 보입니다. 그러나 아직도 자바는 가장 널리 사용되고 있는 언어이고 스프링이나 IntelliJ 같은 강력한 프레임워크와 개발환경의 힘으로 여전히 많은 프로젝트에서 안주인 역할을 하고 있습니다.
C/C++은 현재 전체 개발의 20% 정도를 차지하고 있으며 이것은 앞으로도 계속 유지될 예정입니다. 그 이유는 로우 레벨의 시스템 프로그래밍이나 낮은 사양의 환경에 적합한 특징과 기존에 개발된 시스템의 유지보수를 위해 여전히 많은 수요가 존재하기 때문입니다. 임베디드 같은 특수한 환경에서는 C 언어가 가지는 네이티브 코드로서의 성능과 효율성이 아직도 유효하다고 할 수 있습니다.
자바스크립트는 막강한 라이브러리와 노드 같은 프레임워크 덕분에 몇년째 가장 수요가 많은 언어의 자리를 지키고 있습니다. JS는 여전히 한동안은 지금과 같은 인기를 누릴 것으로 예상됩니다. 그러므로 웹개발자가 되고 싶다면 자바스크립트를 반드시 공부해야 할 것입니다. 그러나 분명한 것은 Node.js의 인기는 이제 꺽였고 자바스크립트는 프론트에서만 쓰이는 것이 맞다는 게 2019년의 교훈입니다. 또한 타입스크립트나 웹어셈블리의 약진은 웹 프론트 영역에서도 자바스크립트의 아성이 위협받고 있음을 보여줍니다.
이들 언어로 시작했다면 이제 날개를 펴고 새로운 언어를 섭렵해 나가면 좋겠습니다. 향후 언어의 발전에 대해서는 다음 사항을 관전포인트로 지켜보면 좋겠습니다.
범용 언어로 러스트와 Go의 대결입니다. 이 두 언어는 둘다 범용이면서 성능을 C/C++ 수준으로 올리겠다는 목표를 가지고 만들어진 언어들입니다. 그러면서 현대적인 안전한 타입의 이론적인 장점은 모두 살린 언어들이지요. 다음 블로그에서는 Go를 사랑하는 필자가 Rust와 성능 벤치마킹을 해본 결과를 소개하고 있습니다. 결과는? Rust가 5% 정도 우수했다고 합니다. 그러나... 코드의 길이가 Rust가 Go보다 3배 정도 더 길어진다고 한다. 메모리(CG) 측면에서는 Rust가 확실히 우세할 것으로 보이나 어렵다는... 하여간 아래 글을 읽어보면 이 두 언어가 다 앞으로 많은 스포트라이트를 받게 될 것으로 예상되네요.
다음은 모바일 환경의 개발 언어입니다. 여기는 안드로이드의 코틀린과 iOS의 Swift가 거의 시장을 양분하고 있습니다. 이제는 모바일 앱이라면 이들 언어를 쓸 수 밖에 없을 것 같습니다. 그리고 비교적 쉽게 배울 수 있는 언어들이므로 하나 정도는 익혀 두는 것이 좋을 것 같습니다.
다음은 웹개발 분야입니다. 위에서 살펴본 Go와 Rust는 둘다 웹서버 분야에서 주요한 언어로 등장하고 있습니다. DJango를 앞세운 파이썬도 약진하고 있죠. 자바 일색이던 웹 백엔드 환경이 바뀌고 있는 것입니다. 프론트 분야는? 자바스크립트 일색에서 벗어나려는 추세가 보입니다. 대표적으로 2019년에 약진한 타입스크립트 언어가 있습니다. 마이크로소프트의 지원과 자바스크립트와의 호환으로 웹 프론트 개발 분야에서 영역을 급속히 확장하고 있습니다. 또한 웹어셈블리는 Go나 다른 언어로 개발한 중간코드를 라이브러리 형태로 프론트에서 쓸 수 있는 방법입니다. 그러므로 자바스크립트로 어마어마한 라이브러리를 만들고 게임 같은 무거운 코드를 짜는 시대는 이제 끝났다고 볼 수 있습니다. 자바스크립트는 여전히 초보자가 웹프로그래밍을 시작하기 위해 필요한 언어이지만, 한걸음 더 나아간다면 타입스크립트 언어는 공부해 보는 것이 확실히 좋을 것 같습니다. 그러나 웹어셈블리나 타입스크립트 언어도 어쨌거나 아직은 자바스크립트가 주연의 자리를 꽉 쥐고 있어 조연으로서의 역할을 키워나가고 있다고 봐야 할 것 같습니다.
'프로그래밍언어론' 카테고리의 다른 글
동시성의 두 가지 모델 - 공유메모리 vs 메시지 전달 (0) | 2022.05.14 |
---|---|
프로그램의 메모리 관리 - 스택과 힙 (0) | 2020.07.06 |
Review PL KWD (1) - 수식의 계산순서 (0) | 2019.05.04 |
Review PL KWD (2) - 지연 계산 (0) | 2019.05.04 |
상수와 변경할 수 없는 이름 (const와 final) 용법 (0) | 2019.03.17 |
- Total
- Today
- Yesterday
- 이터러블
- 콜렉션
- 스트링 +
- contentEquals
- max
- python example
- rust
- indexof
- APPEND
- CompareTo
- sort key
- Iterator
- Camel Style
- typedef
- follow
- Lazy evaluation
- zip
- ToString
- format
- TypeError
- 이터레이터
- C++ 클래스
- 동적바인딩
- 스트링
- comparable
- 지연계산
- 패턴
- python exercise
- 자바regex
- contains
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |