프로그래밍 언어는 뭘 배우지?
역사적으로 문서화 되어있는 프로그래밍 언어는 종류는
약 2,500개 이상
정말 많죠? 하지만 실제로는 기업이 내부적으로 작성한 DSL 언어나 학술적 용도의 언어, 취미로 개발된 언어, 특정 하드웨어나 플랫폼에 특화되어 개발된 언어들을 모두 고려하면 이보다 훨씬 더 많은 언어들이 존재합니다.
1. 어떤 언어를 배우지?
가장 많이 하는 고민이죠? 여러 언어를 사용하고 있는 미드레벨니아 시니어가 아닌 이상 이 고민은 매우 중요합니다. 왜냐하면 첫 작장에서 사용할 언어를 결정하는 것일 수도 있고, 무엇보다 소프트웨어로 문제를 해결하는 방식과 개발자로서의 가치관 같은 것이 정해지는 순간이기도 하기 때문입니다.
각 언어들은 한 번에 출현한 언어들이 아닙니다. 그 이야기는 대부분의 언어들이 오랜 기간 동안 컴퓨터를 이용해서 문제 해결 과정을 진행해 오면서 필요에 따라서 만들어지고 출현했다는 뜻이기도 합니다. 조금 바꿔서 생각해 보면 어떤 언어를 사용하는가는 어떤 방향에서 문제를 바라보고 해결점을 향해 접근할 것인가를 나타내 주는 암묵적인 철학을 나타내 주고 있다는 뜻이기도 합니다.
그렇다면 개발자로서 전향을 생각하고 계신 분들이 첫 프로그래밍 언어를 배울 때에 고려해야 하는 것들은 어떤 것들이 있을까요?
1-1. 학습 난이도와 학습 자료
- 처음 언어를 배우는 사람에게 이해하기 쉬운 문법을 제공하는 가?
- 자신이 사용하는 국적의 언어로 된 양질의 학습 자료가 충분한가?
- 활발한 커뮤니티가 있어서 질문하고 실제적인 도움을 받을 수 있는가?
1-2. 직업 및 진료 연관성
- 내가 목표로 하는 산업 분야에서 주로 사용되는 언어인가?
- 채용 시장에서 해당 언어의 수요가 얼마나되고, 경쟁력을 가지고 있는가?
- 그 언어를 배우고 난 후, 향후 그 지식을 기반으로 다른 언어를 학습하는 데 기초를 제공받을 수 있는가?
1-3. 실용성
- 언어를 배우면서 실제로 무언가를 만들어 볼 수 있는가?
- 개발환경 설정이 복잡하지 않은가?
- 내가 가지고 있는 컴퓨터에서 무리없이 실행할 수 있는가?
- 범용적인 IDE로 작성하고 디버깅과, 배포 환경을 구축하거나 제공 받을 수 있는가?
위의 내용은 제가 1990년대 중반부터 프로그래밍 언어를 학습하고 개발을 진행하면서 가장 많이 겪었던 어려움을 정리한 내용입니다. 기억해 보면 첫 프로그래밍 언어로서 가장 좋은 언어는 문법이 간단하면서도 작성할 수 있는 환경과 실행할 수 있는 빠른 환경을 제공해 주는 언어가 가장 좋은 언어였던 것 같습니다.
위의 내용을 종합해 볼 때에 처음 언어를 배우는 분들께 권해드릴 수 있는 첫 언어로는 Python이나 JavaScript를 권해 드리고 싶습니다. 이유는 다음과 같습니다.
- 여러 가지 언어로 된 양질의 학습자료가 충분함
- 활발한 커뮤니티가 존재함
- 대부분의 산업 분야에서 사용되고 있음
- 채용시장에서 가장 많이 구하는 기본적인 개발 언어 중의 하나임
- 향후 다음 언어를 배울 때에 기초를 제공할 수 있음
- 언어를 배우는 과정에서 실제로 자신만의 프로젝트를 만들어 볼 수 있음
- 개발 환경이 복잡하지 않고 제공되는 개발 IDE가 많이 있음
- 작성, 디버깅, 배포가 IDE를 통해서 바로 가능하고 확인할 수 있는 피드백을 제공함
2. 배운 언어를 어디에다 쓰지?
개발자로 전향을 결심하는 과정에서 결정해야 하는 것 중의 또 하나의 중요한 질문입니다. 저 질문은 '나는 어떤 일을 하고 살 수 있지?'와 동일한 질문일 수도 있습니다. 취업을 진행하는 과정에서 알게 되겠지만, 저 질문에 나오는 단어 중에 '어디'라는 것은 '어떤 회사'라고 바꿔도 될 만큼 비슷한 뜻입니다.
특수한 산업 분야를 제외하면 대부분 2가지 영역으로 그 '어디'를 정할 수 있습니다.
2-1. 백엔드 개발
'Back'의 '-end'에서 작동하는 소프트웨어를 만드는 데에 배운 언어를 사용합니다. 그렇다면 'Back'은 어디를 이야기할까요? 백엔드 개발은 웹이나 앱의 '보이지 않는 곳'을 만드는 개발을 이야기 합니다.
조금 쉬운 예로 설명하자면 식당이나 레스토랑의 주방이라고 생각하시면 됩니다. 손님(사용자)들은 주방을 직접 보지 못하지만 주문을 하면 주문과 관련된 모든 과정들(재료의 준비, 재료의 처리와 정해진 레시피로 음식을 준비하는 모든 과정)이 주방에서 이루어져서 주문한 손님(사용자)에게 메뉴판에 있는 모양대로 요리가 서빙되죠?
그런데 '주방'도 다 같은 주방이 아닙니다. 주방은 여러 곳에 있습니다. 한식당, 중식당, 이탈리안 식당, 프랑스 식당 등등 정말 많은 식당들이 있고, 그리고 그 식당에서 만드는 요리들은 특정 문화와 정해진 레시피가 존재합니다.
구체적으로 백엔드 개발에서는 다음과 같은 일을 하게 됩니다.
- 사용자의 요청을 여러가지 방식으로 연산하고 처리하는 작업(음식을 만드는 작업)
- 데이터를 저장하고 관리하는 작업(식재료의 관리 또는 주문 관리)
- 다른 시스템과의 연동(식재료 공급업체와 연락하거나 결제 데스크와 정보를 공유하는 등의 작업)
- 보안(주문자의 테이블 정보, 위생과 안전 등)
정확한 비유와 매칭은 아닐 수 있지만, 개념은 비슷합니다. 백엔드 개발에 내가 배운 언어들을 사용하다는 것은 보이는 영역에서 온 요청을 처리하고, 보이는 영역에서 보여줄 수 있도록 하는 것을 지원합니다. 소프트웨어가 계속 살아움직이도록 하는 생명력을 부여하는 기능을 제공하게 됩니다.
2-2. 프런트엔드 개발
'Front'의 '-end'에서 작동하는 소프트웨어를 만드는 데에 배운 언어를 사용합니다. 그렇다면 'Front'는 어디일까요? 프런트엔드 개발은 웹이나 앱의 '보이는 곳'을 만드는 개발을 이야기 합니다.
백엔드와 같은 방식으로 예를 들어 설명하자면 식당이나 레스토랑의 '홀'이라고 생각하면 됩니다. 왜냐하면 홀에는 손님들이 위치하기 때문입니다. 쉽게 이야기하면 실제로 소비를 하는 사용자가 있는 곳이라고 생각하면 됩니다. '홀'에는 손님(사용자)들이 직접 보고 경험하는 식당의 모든 것들이 있습니다.
- 편안한 테이블과 의자(보기 좋은 웹사이트나 앱의 디자인)
- 메뉴판(사용자 인터페이스 또는 실제 서비스 레이블)
- 주문을 받고 음식을 서빙하는 직원(UX 또는 네트워킹)
- 식당의 음식에 맞는 분위기와 인테리어(UI 디자인)
사실 소프트웨어가 서버와 사용자 컴퓨터로 분리되기 시작하면서 가장 많이 언급되는 실생활의 모델이 바로 레스토랑입니다. 그리고 이 모델은 비동기라는 매우 고도화 된 아키텍처에서도 많이 사용되곤합니다.
배운 언어를 '어디'에다 사용할 지를 결정하는 것은 내가 어디에서 일할지를 결정하는 중요한 부분입니다. 최근에는 그 경계가 많이 줄어들긴 했지만 사실 언어를 선택하는 기준에서도 어느정도 중요한 영향을 미칠 수 있습니다. 소프트웨어를 개발하는 언어를 선택할 때에 심플한 언어의 문법과 일관된 방식으로 작성할 수 있는가라는 질문에 대한 답을 줄 수 있는 언어가 중요한 이유는 일단 프로그램을 작성을 시작하는 순간부터 점점 더 복잡하고 중복된 요구사항이 발생하기 때문입니다.
처음 배우는 언어가 너무 어렵다면 요구사항의 복잡도와 중복어서 나타나는 여러가지 상황에서 자신만의 문제해결 방식을 적용하기 어려워 집니다. 표준화 된 방식과 이를 일관된 방식으로 사용하는 것은 향후 내가 작성한 코드를 다른 개발자와 함께 협력해서 작업해야 하는 환경에서는 기술 자체보다 더 중요한 장점을 제공하게 되고, 심지어 필수 능력으로 요구되기도 합니다.
3. 어떤 언어가 있지?
2,500개가 넘는 언어들 중에 내가 배워야 할 첫 언어를 선택하는 기준은 가장 많이 사용하는 언어들과 내가 '어디'에 언어를 사용할지를 고르는 것이 가장 일반적이고 현명합니다. 그렇다면 언어의 사용 순위를 알아보는 방법은 어디에 있을까요?
3-1. Github Push 순위
Github은 Git이라는 버전관리 시스템을 온라인으로 제공하는 서비스 중의 하나입니다. 전 세계 개발자들이 가장 많이 사용하는 서비스라고 봐도 무방할 것 같습니다. Github에는 전 세계 수많은 개인과 기업에서 진행중인 프로젝트들이 등록되어 있습니다. 당연히 언어나 프로젝트의 유형들도 등록되어 있으니 통계가 존재합니다.
아래의 링크로 가시면 현재 2024년 1분기 통계를 확인할 있습니다.
A Samll Place To Discover Languages In Github
GitHub Language Stats
madnight.github.io
위의 통계에서 Full Request를 보면 다음과 같은 순위를 확인할 수 있습니다.
- Python
- Java
- Go
- JavaScript
Java, Go, C++, Typescript 등의 언어들이 상위권에 뒤섞여 있습니다. 하지만 처음 언어를 배우는 분들에게는 선행학습을 해야하는 부분이 많이 있는 언어들입니다. 이 언어들을 제외하면 위에서 언급했던 것 처럼 Python과 JavaScript가 남습니다.
3-2. TIOBE Index
다음은 논란이 많긴 하지만 여전히 언어 사용률 통계에서 빠지지 않는 TIOBE Index 입니다. TIOBE(The Importance Of Being Earnest)는 네델란드 소프트웨어 품질 회사에서 만든 프로그래밍 언어 순위 시스템으로, 매달 업데이트 됩니다. 아래에는 2025년 1월 기준의 정보의 링크를 드렸습니다.
TIOBE는 특정 기업이 보유하고 있는 정보를 기준으로 발표하는 인덱스이기 때문에 언어 진영 별로 순위에서 불리한 통계가 나오면 갑론을박하는 등의 논란이 좀 있는 자료이기도 합니다. 하지만 여전히 20년 이상의 역사적인 데이터를 기반으로 제공되고 있기 때문에 언어의 트렌드를 파악하는 데에는 빠지지 않고 거론됩니다.
TIOBE Index - TIOBE
Home » TIOBE Index TIOBE Index for January 2025 January Headline: Python is TIOBE's programming language of the year 2024! Programming language Python has won the title "TIOBE's programming language of the year 2024". This award is given to the programmin
www.tiobe.com
위의 통계에서도 다음과 같은 최근 통계를 확인하실 수 있습니다.
- Python
- C++
- Java
- C
- C#
- JavaScript
여전히 Python이 1위를 나타내고 있습니다.
하지만 위의 2가지 통계를 통해서 나타나는 순위는 업계의 특성이나 또는 기타 플랫폼을 가리지 않고 일반적인 사용율이나 어느 진영의 논리가 반영된 영향이 있을 수 있어 현재 우리나라 소프트웨어 개발 산업의 시장에서 일어나는 상황과는 거리가 있을 수는 있습니다. 그래서 참고만 해야하고, 언어간 우열을 판단하는 기준으로 사용해서는 절대 안됩니다.
일단 위에서 거론되고 있는 언어에 대해서 개략적인 내용을 알아볼 필요가 있습니다.
- Python: 데이터 과학, 웹, 자동화 및 AI 등에서 널리 사용됨. 작관적인 문법과 높은 생산성(가독성은 작성자에 따라 편차가 큼)
- JavaScript: 웹의 프런트엔드 개발에 필수적인 언어. Node.js를 통해 백엔드 개발 가능, React.js, Next.js, Vue.js 등 몇몇 업계 표준으로 통용되는 라이브러리와 프레임워크에 필수적인 언어
- TypeScript: JavaScript에 타입 시스템을 추가한 언어로 마이크로 소프트에서 개발한 언어.
- Java: 대규모 시스템 개발에 사용되는 플랫폼 독립언어. 안드로이드 앱 개발과 기업, 정부 등의 대규모 조직을 위한 프로젝트 거의 필수적으로 사용됨
- C: 시스템 프로그래밍과 임베디드 시스템 개발에 사용. 최근 Rust로 대체되는 중.
- C++: C의 직접적인 확장으로 게임, 실시간 시스템, 고성능 서버 등의 개발에 사용
위에서 제가 거론한 언어 이외에도 현재 아래와 같은 언어들이 현재 지속적으로 성장하고 있거나 또는 특정 언어에서 해결해 주고 있지 못한 문제들을 해결하기 위해서 존재합니다.
- Rust: 시스템 프로그래밍 언어로 C 언어를 대체할 언어로 지속적인 성장을 보이고 있음
- Go: 구글에서 개발한 언어로 동시성 처리와 빠른 실행 속도를 제공하고 있어 클라우드 및 네트워크 서비스 등에서 사용중
- Kotlin: Jetbrains에서 개발한 언어로 Java의 현대적인 개발언어로서 급상승 하고 있음
4. 마치며
위에서 비유로 식당과 레스토랑을 이야기 한 것처럼 개발과 요리는 비슷한 면이 많이 있습니다. 실제로 개발문서에도 '레시피'라는 단어를 사용하기도 합니다. 어떤 언어를 개발자로서의 커리어 스택의 가장 처음에 담을 것인가를 고민한다면 많은 선택지와 주변의 많은 조언이 있을 겁니다.
하지만 가장 중요한 것은 자신이 가장 관심을 가지고 있는 도메인일 것입니다. 어떤 도메인에 가장 관심이 있고, 그리고 현재까지 일해온 도메인은 어떤 도메인인지를 기준으로 잘 생각해 봐야 합니다. 내가 가장 좋아하고 가장 쉽고 빠르게 일을 처리했던 경험이 있다면 정말 축복받은 분입니다. 왜냐하면 그 분야에서도 소프트웨어가 사용되고 있을 것이기 때문이죠.
개발자는 자신이 쓸 개발물을 만드는 경우는 매우 드뭅니다. 내가 만든 것을 누군가 쓰게 하기위해서 작성하는 경우가 대부분입니다. 내가 만든 요리를 누군가에게 제공하는 겁니다. 평가는 사용자가 내리죠. 다시 이야기하면 피드백이나 평가가 반드시 있다는 겁니다. 그 이야기는 내가 한번 만든 프로그램은 누군가의 요청에 따라서 수정되거나 또는 심할 경우 다시 만들어야 할 수도 있다는 사실입니다. 이 때에 이 과정을 즐길 수 있는 상태가 되어야 합니다. 이때 사용하는 언어가 어렵고 복잡하다면 매 순간이 지옥과 같은 상황이 되어 버립니다.
프로그래밍 언어는 뭘 배우지?
그래서 첫 프로그래밍 언어는 가장 쉬운 문법과 빠르고 쉽게 작성하고 즉시 결과를 확인할 수 있는 언어이어야 합니다. 과정이 복잡하고 작성하는 방법이 번거롭다면 지속적으로 배우고 익힐 수 없습니다. 그래서 처음 언어를 배운다면 Python이나 JavaScript를 권해 드립니다.