'풀리퀘'는 깃허브에서 타인의 코드에 리뷰를 요청하는 기능인 '풀 리퀘스트'의 줄임말입니다. 풀리퀘를 통해 코드는 더 발전하는데요. 알아두면 쓸모 있는 IT업계의 크고 작은 사건들을 변규홍 스켈터랩스 개발자가 격주로 '풀리퀘' 드립니다.
개발자들에게 가장 사랑받는 프로그래밍 언어는 무엇일까. 스택 오버플로우(Stack Overflow)에서 2021년 실시한 연례 개발자 설문조사에선 ‘써본 적이 있는 프로그래밍 언어’, ‘지금 쓰고 있고 앞으로도 쓰고 싶은 사람의 비율이 높은 언어’, ‘아직 써 보지 않았지만 기회가 되면 써 보고 싶은 언어’의 1위로 각각 자바스크립트(JavaScript), 러스트(Rust), 파이썬(Python)이 꼽혔다.[1][2] 매일 파이썬 언어로 다양한 오픈소스 프로젝트에 참여하고, 러스트 언어로 만들어진 파일 본문 검색 프로그램 ‘ripgrep’을 쓰는 사람으로서 참 반가운 소식이다.[3]
이런 순위에 자연스럽게 따라오는 질문이 있다. ‘지금 시대에 많이 쓰이는 프로그래밍 언어이니, 이 언어도 배워야 하는 걸까?’ 하지만 시간이 흐르면서 인기 있는 프로그래밍 언어는 계속 바뀌기 마련이다. 그럼 질문을 좀 바꿔보자. 각 프로그래밍 언어는 어떤 이유로 각광 받았고, 요즘은 주로 어떤 용도로 쓰이고 있을까.
라이브러리는 프로그래밍 언어로 코드를 작성할 때 개발자 본인이 직접 만들 필요 없이 다른 개발자가 이미 만든 기능을 그대로 가져다 쓸 수 있도록 정리해 둔 것을 말한다. 필요한 지식이 있을 때 책의 모든 내용을 달달 외우는 게 아니라 도서관에서 책을 빌려 정보를 발췌하는 모습을 생각하면 이해하기 쉽다. 1990년대 후반에서 2000년대 초반까지는 윈도우 응용 프로그램을 만들려면 윈도우 자체에 대한 방대한 지식이 필요했지만, 델파이 언어를 쓰는 사람은 VCL이라는 멋진 도서관 덕분에 시간을 아낄 수 있었다.
지금의 코딩교육 시장에서는 파스칼이나 델파이의 이름을 더 이상 찾아보기 어렵다. 2022년 현재는 비슷한 강점을 갖는 다른 대체재가 많기 때문이다. 그런데도 한국의 델파이 커뮤니티는 2022년 현재도 사용자들의 지식 공유가 비교적 활발하게 이루어지고 있다. 놀라운 일이다.[5]
C 언어가 쓰이는 영역 중 가장 유명한 것은 리눅스(Linux) 운영체제(OS)의 핵심을 구성하는 리눅스 커널(Linux Kernel)이 아닐까 싶다. 커널은 쉽게 말하자면 OS 자체와 OS 위에서 돌아가는 모든 프로그램 사이의 소통을 총괄하는 프로그램이다.[6] 커널 개발자들도 2022년 2월부터 각종 버그를 줄일 방법 가운데 하나로 최신 C 언어 표준을 적용하는 방안을 논의하고 있다.[7] 이외에 사물인터넷(IoT)·임베디드 프로그래밍(Embedded Programming)·펌웨어(Firmware)를 다루는 영역에서도 C 언어가 차지하는 비중은 여전히 높다. 펌웨어는 주로 하드웨어, 즉 기기 그 자체의 제어에 쓰이는 프로그램을 말한다. 아직 열일하는 조상님의 면모다.
C++ 언어에는 객체 지향 프로그래밍(OOP, Object-Oriented Programming)이라는 패러다임을 표현하기 위한 클래스 프로토콜(Class Protocol), 그리고 방대한 종류의 자료구조(Data Structure)와 알고리즘을 미리 구현해 유연하게 쓸 수 있는 STL(Standard Template Library)이 추가돼 있다. 3년에 한 번씩 국제표준의 개정도 이뤄지고 있다. 만만찮게 노력하는 젊은 조상님이다.
텐서플로(Tensorflow)나 파이토치(PyTorch)등의 머신러닝 라이브러리는 파이썬 언어를 통해 주로 사용되는데, 정작 이들의 핵심적인 부분은 C나 C++ 언어로 작성돼 있다. 필자도 텐서플로의 음성 파일 관련 버그를 살피는 과정에서 C++ 언어로 작성된 부분을 들춰본 적이 있다.[8] 바꿔 말하면, 파이썬 언어에 C++ 언어도 쓰는 개발자는 텐서플로를 단순히 도구로만 사용하는 것을 넘어 고장난 부분도 직접 고칠 수 있다.
여기까지 파스칼, 델파이, C, C++, C# 프로그래밍 언어에 대해 아주 간단히 살펴보았다. 단순한 인기나 유행에 따라 언어를 배우기도 하지만 커뮤니티의 활력, 라이브러리의 풍성함, 적용 혹은 표현 가능한 패러다임, 그리고 만들고 싶은 프로그램을 빠르게 구현할 수 있는 도구의 존재도 언어를 배울 땐 중요한 요소다. 다음 풀리퀘에서는 이런 지점이 특히 자바(Java) 계열의 프로그래밍 언어들이나 스크립트 프로그래밍 언어들에 어떤 영향을 줬는지 중점적으로 살펴보고자 한다.[기고|변규홍 스켈터랩스 개발자]
※각주
[1]: https://insights.stackoverflow.com/survey/2021
[2]: 원문: "Which programming, scripting, and markup languages have you done extensive development work in over the past year, and which do you want to work in over the next year? (If you both worked with the language and want to continue to do so, please check both boxes in that row.)"
[3]: https://github.com/BurntSushi/ripgrep
[4]: https://www.bloter.net/newsView/blt201508260003
[5]: https://www.delmadang.com/
[6]: https://www.kernel.org/
[7]: https://zdnet.co.kr/view/?no=20220227145019#_enliple
[8]: https://github.com/tensorflow/tensorflow/issues/26247
[9]: https://unity.com/kr/how-to/programming-unity#if-you-have-c-background