'어떤 프로그래밍 언어를 선택해야할까?'
위의 질문은 개발자들이 가장 고민하는 문제 중 하나입니다. 해당 주제를 가지고 굉장히 많은 블로그 포스트나 유튜브 영상이 있고, 해당 콘텐츠들의 조회수 역시 높습니다. 해당 문제를 가지고 커뮤니티들에서 논쟁이 벌어지기도 합니다. 저 역시 프로그래밍 언어 선택에 있어서 많은 고민을 했고, 아직도 하고 있습니다. 그렇다면 어떤 프로그래밍 언어를 선택하는 것이 좋을까요?
가장 완벽한 프로그래밍 언어가 있다면 좋겠지만, 아쉽게도 그러한 언어는 존재하지 않습니다. 특정한 분야에서 강점을 가지면, 다른 분야에서 약점을 가지기 마련입니다. 예를 들어, C나 C++ 같은 언어는 속도는 빠르지만, 배우기 어렵고 개발하는데 시간이 다른 언어들에 비해 오래 걸립니다. Python 같은 언어는 개발 속도가 빠르고 가독성이 높다는 장점은 있지만 실행 속도가 다른 언어들에 비해 느립니다. 즉, 상황/맥락에 따라 선호되는 언어 또한 달라질 수밖에 없습니다. 따라서 먼저 본인의 상황을 인지하고, 해당 상황에서 가장 적합한 언어를 선택하는 것이 중요합니다. 이때, 더 가중치를 두어 고려해야 할 요소들 역시 상황에 따라 달라질 것입니다.
이번 포스트에서는 프로그래밍 언어 선택에 있어서 기준점이 되는 여러 가지 요소들에 대해 설명하고, 어떠한 상황에서 해당 요소에 가중치를 둬야 하는지에 대해서 다루겠습니다.
프로그래밍 언어 선택의 5가지 기준
프로그래밍 언어 선택에 있어서 고려해야 할 요소들 중 가장 중요하다고 판단되는 5가지를 추려봤습니다.
(1) 사용 목적
가장 중요한 것은 아무래도 사용목적입니다. 언어 사용목적에 따라서 사용해야 할 언어는 완전히 달라집니다. 웹사이트 개발을 할 것인지, 어플 개발을 할 것인지, 게임을 만들 것인지 등에 따라서 사용해야 하는 언어는 완전히 달라집니다. 각 플랫폼에 따라서 지원하는 언어가 다르기 때문입니다. 만약, 웹사이트 개발이 목적이라면 눈에 보이는 부분을 개발하는지(프론트엔드), 혹은 화면에 뿌려질 데이터를 처리하거나 연산하는 부분을 개발하는지(백엔드)에 따라서 사용해야 하는 언어가 달라집니다. 만약 프론트엔드 개발이 목적이라면 반드시 HTML
, CSS
, Javascript
를 공부해야 하고, 백엔드의 경우에는 어떠한 언어라도 보통 개발이 가능하니 다른 요소를 고려해야 합니다.
- 웹 프론트엔드 개발:
Javascript
(+Typescript
) - 모바일 개발
- 안드로이드:
Java
,Kotlin
,Dart(Flutter)
,Javascript(React Native)
, ... - iOS:
Object C
,Swift
,Dart(Flutter)
,Javascript(React Native)
, ...
- 안드로이드:
- 데스크탑 프로그램:
C
,C++
,C#
,Javascript (Electron)
,Dart(Flutter)
, ... - 게임:
C# (Unity)
,C
,C++
, ... - AI / 머신러닝:
Python
,R
- 백엔드: 언어에 크게 상관없음 (다른 요소들 고려)
(2) 인기
해당 언어의 인기 역시 언어 선택에서 중요한 요소입니다. 해당 언어가 많이 사용되고 있는지, 또는 언어의 인기가 높아지는 추세인지, 낮아지는 추세인지에 따라서 언어 선택 역시 달라질 수 있습니다. 하지만, 반드시 현재 인기가 많고 계속해서 인기가 높아지는 언어를 선택해야 한다는 의미는 아닙니다. 이 역시 상황에 따라 달라집니다. 만약, 본인이 개발팀을 이끌고 있는 리더라면 인기가 많은 언어를 선택하는 것이 유리합니다. 상대적으로 개발자를 뽑기가 쉽기 때문입니다. 하지만, 본인이 취업을 준비하는 입장이라면 현재는 인기가 감소하고 있더라도 과거에 인기가 높았던 언어를 선택하는 것이 유리할 수도 있습니다. 이미 많은 회사들의 시스템이 과거에 인기가 있었던 언어들로 개발이 되어있을 확률이 높고, 유지 보수를 위해 해당 언어를 공부한 사람들을 채용할 가능성이 높기 때문입니다. 오히려 수요와 공급의 불균형 때문에 해당 언어를 공부하는 것이 임금 인상에 더 유리할 수도 있습니다.
언어의 인기와 관련해서는 Github 언어별 랭킹, Stackoverflow 랭킹 또는 국내 취업사이트등을 참고하면 도움이 됩니다.
(3) 실행속도
만약 본인이 만드는 프로그램이나 서비스에서 속도가 중요한 부분을 차지한다면 이 역시 고려할 필요가 있습니다. 고성능 연산이 반복적으로 필요한 소프트웨어 같은 경우가 이에 해당됩니다. 이럴 때는 기계어로 컴파일 되는 언어가 인터프리터 언어보다 훨씬 빠른 경향이 있습니다. 예를 들어 컴파일 언어인 C
, C++
, Rust
같은 언어들은 파이썬에 비해 20~100배 이상 빠릅니다. 하지만, 현대 하드웨어에서 이 정도 속도는 사람이 느끼기 힘든 경우가 많습니다. 또한, 파이썬 같은 언어에서는 C나 C++로 최적화되어 있는 라이브러리(Numpy나 Tensorflow)들이 많이 사용되고 있기 때문에 머신러닝과 같은 고연산에도 많이 활용되고 있습니다.
때로는 고성능 연산이 아니라 네트워크 지연이 발생하기도 합니다. 많은 사람이 이용하는 소프트웨어의 경우 동시에 이용자들의 요청을 처리하는 것이 중요할 것입니다. 이때는 Javascript
나 Golang
처럼 동시성을 잘 지원해 주는 프로그래밍 언어가 적합합니다. 파이썬의 경우에도 요즘에는 비동기 처리가 많이 발달해있기 때문에 동시에 많은 요청을 처리할 수 있습니다.
언어별 속도 비교에 관련해서는 아래의 링크를 참고해 주세요.
(4) 개발속도
언어의 실행 속도 못지않게 중요한 것은 개발 속도입니다. 실행 속도가 완성된 소프트웨어가 돌아가는 속도를 의미한다면, 개발 속도는 소프트웨어를 개발하는 데 걸리는 속도를 의미합니다. 아무리 좋고 빠른 소프트웨어를 만들었다 하더라도 시장에 외면받을 확률은 굉장히 높습니다. 이럴 때는 빠르게 소프트웨어를 개발하고 시장에서 빠르게 실패해보는 것이 좋습니다. 특히 사용 유저가 얼마 없을 때는 실행 속도는 크게 중요하지 않은 경우가 많습니다. 따라서 스타트업 같은 경우는 개발 속도에 중점을 두는 편이 좋습니다. 우선 개발 속도에 중점을 둔 언어로 개발한 이후에 속도를 중시해서 새로운 언어로 다시 짜는 경우는 굉장히 많이 있는 일입니다. 스타트업뿐만이 아니라 많은 포트폴리오가 필요한 분들에게도 개발 속도가 중요할 수 있습니다.
- 개발 속도가 빠른 대표적인 언어:
Python
,Javascript
,Ruby
, ... - 개발 속도도 빠른 편이면서 실행속도도 빠른 편인 언어:
Golang
, ...
(5) 안정성
안정성은 굉장히 포괄적인 의미를 가지고 있지만, 여기서는 버그나 오류로부터 상대적으로 안전하다는 의미로 한정해 서술하겠습니다. 특정한 분야에서는 안정성이 다른 요소들보다 중요한 경향이 있습니다. 대표적으로 금융업이 있습니다. 함수형 프로그래밍 언어는 상대적으로 다른 언어들에 비해 설계적으로 버그로부터 안전하다는 평을 받고 있습니다. Scala
, Haskell
, 그리고 F#
같은 함수형 언어들이 세계 금융업에서 수요가 높은 이유입니다. 또한 Rust
역시 안정성에 중점을 둔 언어입니다. 메모리를 직접 관리해야 하는 언어임에도 컴파일 타임에서 오류를 잡아낼 수 있고, 스레드를 사용할 때 발생할 수 있는 Race Condition(둘 이상의 입력이나 조작이 동시에 일어나 의도하지 않은 결과) 역시 컴파일 타임에 어느 정도 잡을 수 있습니다. 그뿐만 아니라 변수의 타입을 직접 명시해야 하는 정적 언어가 그러지 않아도 되는 동적 언어에 비해 버그가 일어날 확률을 줄일 수 있습니다.
- 정적 언어의 대표적인 예:
C
,C++
,Java
,Rust
,Golang
,Typescript
, ... - 동적 언어의 대표적인 예:
Python
,Ruby
,Javascript
, ...
굳이 하나의 언어를 선택하지 않아도 된다.
현재 본인의 상황과 맥락에 따라 위의 5가지 기준을 평가하면 언어의 우선순위를 정리할 수 있을 겁니다. 이제 해당 우선순위에서 첫 번째 위치한 언어를 선택하면 됩니다. 하지만, 첫 번째 언어만을 선택할 필요는 없습니다. 해당 언어를 우선적으로 하되, 다른 언어 역시 공부해볼 것을 강력하게 권장합니다! 다른 언어를 공부하는 것은 다음과 같은 세 가지 측면에서 도움이 됩니다.
- 상황은 달라질 수 있다. 여러 언어를 공부하는 것은 달라진 상황에 유연하게 대처할 수 있다.
- 다른 언어를 공부하는 것은 전반적인 프로그래밍 언어 향상에 도움을 준다. 각 언어들의 장점들을 배워서 활용할 수 있게 되기 때문이다.
- 언어가 서로 보완적인 역할을 할 수 있다. 예를 들면, 파이썬으로 개발을 하더라도 속도가 중요한 부분은
C
,Rust
,Cython
등을 활용하여 대체할 수 있다. 또한 마이크로 서비스에서 속도가 중요한 서비스만 다른 언어로 대체할 수 있다.
글을 마치며...
우선 지금까지 긴 글을 읽어주셔서 감사합니다. 위의 내용을 요약하면 다음과 같습니다.
- 완벽한 프로그래밍 언어는 없다. 본인의 상황을 먼저 파악하고 상황에 맞는 언어를 선택해야 한다. (맥락적 사고를 해야 한다.)
- 사용목적, 인기, 실행 속도, 개발 속도, 안정성 등을 현재 상황에 맞게 적절히 가중치를 조절하여 평가한다.
- 가장 높은 점수의 언어를 선택한다.
- 굳이 하나의 언어에 국한될 필요가 없다. 다른 언어를 공부하는 것은 언제나 도움이 된다.
위의 내용은 제 개인적인 의견을 정리한 것이므로 틀린 부분이 있을 수도 있고, 추후 생각이 바뀔 수도 있습니다. 다른 의견 있으시면 언제든 댓글 남겨주시면 감사하겠습니다. 😀 😀 😀
22.10.24 추가 업데이트
시간이 조금 지나서 추가적인 의견을 남겨보자면, 본인이 처한 상황 역시 굉장히 중요한 요소입니다.
취업을 준비하고 계신 분들이라면, '내가 가고 싶은 회사가 어떤 언어를 사용하느냐'가 굉장히 중요한 요소가 될 것이구요. (물론 그것보다 다른 언어를 좋아하는 게 더 크다면 다른 선택을 할 수도 있겠죠.)
이미 취업을 하신 분들은 취미로 다른 언어들을 배울 수 있고, 또 배우는 게 도움이 된다고 생각합니다.
스타트업 입장에서는 시장의 개발자 공급과, 생산성 등을 고려해 보는 것이 좋을것 같습니다.
'개발' 카테고리의 다른 글
테스트 코드가 어색한가요? 테스트 코드와 친해지기 (0) | 2023.12.09 |
---|---|
[23년 3월 3주차 회고] 위기의식을 느끼다 (4) | 2023.03.19 |
정말로 단위 테스트를 통합 테스트보다 많이 작성해야 할까? (3) | 2022.10.21 |
쉽게 설명하는 네트워크 (IP주소, DNS, 네트워크, 호스트, CIDR, Private IP, 포트포워딩) (6) | 2020.12.13 |
AWS에서 ECS 도입을 시도하면서 경험한 것들... (7) | 2020.04.01 |