프로그램 개발이 본업은 아니지만, 하는 일이 필연적으로 프로그래밍을 적지않게 하게되는쪽이다 보니 프로그래밍 언어, 나아가 어느정도의 개발에는 익숙하면서 생각도 많이 하는 편 입니다.
해가 갈 수록 컴퓨터 전공이 아닌 분들이 프로그래밍을 배우는 경우가 많아지는 것 같고, 제 주변에서도 이제 막 프로그래밍을 배우려는 사람들의 관련 질문이 점점 많아지는 듯 합니다.
오늘은 로봇을 하는 사람의 시선에서 보는 프로그래밍 언어에 대한 전반적인 저의 생각을 공유해보고자 합니다.
프로그래밍 언어가 뭔가요?
언어라는 용어가 붙어있지만, 진짜로 언어처럼 복잡하고 오래배워야하는 건 아닙니다. 컴퓨터에게 명령을 주는 소통을 한다는 의미에서 'Language' 라는 용어가 붙은 것 같은데, 사실상 개발 도구라고 보는 편이 더 가깝다고 생각합니다.
조금더 자세히 들여다 보겠습니다. 전문가가 아니더라도 아래 내용은 언뜻 들어본 적이 있을 것입니다.
컴퓨터는 0과 1 밖에 모른다.
AI가 사람보다 글도 더 잘쓰는 마당에 좀 이상하다는 생각도 들 수 있지만 이는 사실입니다.
컴퓨터의 구성을 바닥까지 파고들다보면 0 아니면 1만 존재하는 눈에도 안보이는 작은 반도체 소자까지 내려가게 됩니다. 이를 트렌지스터라고 하는데, 일종의 전자 스위치라고 보면 될 것 같습니다. 요즘 개인용 CPU는 이런 트렌지스터 수십억개로 구성됩니다.
반대로, 사람이 복잡한 논리를 모두 0과1로 풀어내서 일일이 입력하는 것은 끔찍하게 비현실적인 작업입니다. 예전에는 종이로 된 카드에 구멍을 뚫고, 구멍의 여부로 0과 1을 구분하는 식으로 프로그래밍을 여러장의 카드에 걸쳐 했었다고는 하는데, 순서가 섞이기라도 하면.. 끔찍하죠.
컴퓨터와 사람간 현실적으로 논리를 주고받을 수 있도록 설계된 명령어의 조합을 프로그래밍 언어라고 볼 수 있겠습니다.
프로그래밍 언어는 왜 여러가지 인가요
배우기도 어려운데 언어가 하나만 있다면 그나마 편할 수도 있을텐데 실상은 그렇지 않죠. 사람도 아닌데 왜 언어가 여러개가 공존할까요?
이유는 용도에 따라 편한 언어가 다르기 때문입니다. 언어가 아니라 도구라는 관점에서 보면 조금 더 이해가 쉬운데, 공구가 왜 종류가 그렇게 다양한지와 비슷한 이유라고 볼 수 있을 듯 합니다. 피스를 박더라도 망치로 못을 박는 경우도 있고 드라이버나 렌치로 나사를 돌려서 고정시키는 방법도 있죠.
프로그래밍 '언어'가 아니라 프로그래밍 '도구' 라고 생각해 보면, 용도에 따라 적합한 '도구'가 다르기 때문이라고 생각하면 이해가 더 쉬울 것 같습니다.
물론, 용도가 겹치는 언어가 수없이 많이 존재했고, 다수는 경쟁에서 밀려 자연스럽게 사라졌습니다. 그리고 살아남은 언어들이 현재까지도 많이 쓰이고 있죠.
언어는 어떻게 선택해야 할까요?
언어가 용도에 맞게 설계된 '도구'라는 관점에서 본다면, 어느 언어를 사용할지도 어떤 '용도'로 쓰게될지에 따라 배우고 사용하기 적합한 프로그래밍 언어가 다를것입니다. 나사를 돌릴 때 플라이어(일명 뺀치)로 잡아서 돌려도 돌아가지만, 모양이 맞는 렌치로 돌리는 것이 가장 편하고 최고의 효과를 낼 수 있듯, 다른 언어로 동일한 기능구현이 가능하더라도 특정 언어가 특히 유리한 경우가 많습니다.
프로그래밍 언어 중 어느 언어가 가장 많이 사용되는지에 대한 통계가 있어 가지고왔습니다.
이 통계에 따르면 개발자가 가장 많이 배우는 프로그래밍 언어는 아래와 같고, 각 언어가 쓰이는 분야를 제가 붙여보았습니다.
- Python - 범용 언어. 최근들어 머신러닝에 특히 많이 사용됨.
- JavaScript - 홈페이지 제작에 특히 많이 사용.
- Java - 범용 언어. 안드로이드 어플에 필요. 웹 프로그래밍에도 많이 사용. 다양한 PC 프로그램 개발에 용이함.
- C# - 범용 언어. 게임 엔진인 Unity를 사용한 개발에 가장 많이 사용되는 언어.
- C - 범용 언어. 1세대 언어이자 지금은 저성능 임베디드 시스템 프로그래밍에 많이 사용.
- C++ - 범용 언어. 언어 중 개발자의 자유도가 가장 높아 최고의 성능 최적화가 필요할 때 적합.
- GO - 어디에 쓰는지 잘 모르겠음.
- R - 통계분석에 특화되어있다고 함.
- Swift - 모바일기기 앱 프로그래밍에 사용.
- PHP - 홈페이지 제작에 사용.
여기서, 범용 언어라고 적어둔 언어들은 한가지 용도에 특화된 것이 아닌 다양한 용도로 사용할 수 있는 일종의 공용언어 정도의 개념으로 볼 수 있을 것 같습니다. 물론, 그 사이에도 차이는 있습니다.
단순히 개발자의 수로 따지자면 홈페이지나 서버 개발, 그리고 어플 개발을 주로 하는 개발자의 수가 압도적으로 많기 때문에 JavaScript와 Java, PHP와 같은 언어의 사용빈도가 가장 높고, 로봇을 하는 사람으로서는 이 언어들 중에서도 범용 언어, 그 중에서도 Python과 C++을 특히 많이 사용합니다.
이렇게 용도에 따라 적합하고 또 많이 사용되는 언어가 다르기 때문에, 각자가 목표로 하고자 하는 용도에 따라 선택하는 것이 좋습니다.
범용 언어 하나를 배워서 다 하면 안되나
자유도가 높은 언어 하나를 잘 배워서 이걸로 다 하면 되는거 아닌지 하는 생각을 한번쯤은 하곤 합니다. 이론적으로는 가능하지만, 용도에 맞는 언어를 배우는 것이 사실상 필수적인 이유가 있는데, 저는 아래와 같이 적어볼 수 있을 것 같습니다.
특정 용도의 개발에서 편리성이 다르다.
복잡하게 설명할것 없이, a언어로 10분이면 가능한 일을 b언어로는 1시간은 걸리는 차이라고 볼 수 있습니다.
다른 개발자와의 협업에 다른 언어는 상당히 번거롭다.
개발분야에서는 필연적으로 다른 개발자들과 협업을 해야 합니다. 이 과정에서 다른 개발자들은 a언어를 사용하는데 나만 b언어로 해야한다면, 추가적인 번잡함과 시스템의 복잡도가 올라갈 수 밖에 없습니다.
커뮤니티의 도움을 받을 수 있다.
프로그래밍 분야는 혼자 책보고 배우는 것 보다 인터넷에서 검색해서 알아내는 경우가 훨씬 더 많습니다. 그만큼 커뮤니티의 사이즈가 생산성과 적지 않은 연관성이 있는데, 특정 목적으로 많이 사용되는 언어라면 그 용도에서 도움을 받을 수 있는 여지가 많습니다. 또한, 특정 언어로만 사용이 가능한 소프트웨어 툴도 많이 있어서, 이런 면에서도 언어의 선택이 생산성에 크게 영향을 줄 수 있습니다.
정리
프로그래밍 언어가 대략 무엇인지와 많이 사용되는 언어, 그리고 배우고 사용할 언어를 어떻게 선택하는지에 대해 생각나는 내용을 적어보았습니다. 다음 글에서는 로봇하는 사람의 시선에서 본 프로그래밍에 대해 적어볼까 합니다.
'Robotics' 카테고리의 다른 글
ROS에서 OpenCV 사용하기 (C++) (11) | 2023.05.10 |
---|---|
Arduino IDE로 Raspberry Pi Pico 프로그래밍 - 파이 피코를 아두이노처럼 사용하기 (12) | 2023.04.18 |
로봇하는 사람이 본 ChatGPT - OpenAI (20) | 2023.01.17 |
라이다가 뭔가요? - LiDAR 원리 소개 (20) | 2022.11.12 |
연구논문의 발행 - 학회, 저널, 그리고 arxiv (5) | 2022.11.08 |