콘텐츠로 건너뛰기

프로그래밍 언어 배우기 – 로봇하는 사람이 알려주는 프로그래밍 언어 10가지

10년 정도 전 부터 컴퓨터 공학으로의 관심이 몰리면서 프로그래밍을 배우는 데에 관심이 급격히 많아졌던 것을 기억하는데, 최근에는 AI 바람을 타고 그 정도가 더 급격해 진 것 같습니다. 이에 따라 프로그래밍 언어에 대한 언급도 주변에서 많아진 것을 느끼고 있습니다. 실제로, 시간이 갈 수록 비전공자 혹은 청소년들이 프로그래밍을 배우고 어느정도 전문적인 용어와 함께 질문을 주는 경우를 많이 보고 있습니다.

이번 포스팅에서는 로봇공학을 전공하는 입장에서 바라보는 프로그래밍 언어에 대해 소개드리고, 어떤 언어를 선택하여 배우는 것이 좋을 지에 대한 생각을 적어보도록 하겠습니다.



프로그래밍 언어

프로그래밍 언어

프로그래밍은 언어라고 불리는 프로그래밍 규칙을 따라 컴퓨터에게 결과적인 instruction을 전달하는 과정을 거치게 됩니다. 조금 더 정확히 설명하자면, 사람이 생각하는 논리를 정해진 규칙대로 적어내리면 이것이 컴퓨터가 이를 해석하고 실행하게 되게 되는 전달방법이라고 볼 수 있습니다. 이렇게 논리가 전달되는 과정이 프로그래밍 언어의 핵심인데, 이에 대해 적어보겠습니다.

컴퓨터의 언어로 번역하는 과정

컴퓨터 공학을 전공하거나 관련된 분야에 있는 사람이 아니라면 이 내용이 너무 추상적이라 이해하기 어려울 수 있습니다. 최대한 쉽게 적어보겠습니다.

사람보다 더 많은 일을 AI가 더 잘 해낼 수 있는 현실이지만, 아이러니하게도 컴퓨터는 본질적으로 받아들일 수 있는 정보가 0와 1 밖에 없습니다. 예전에는 이를 Digital 이라는 단어로 많이 표혔했는데, 요즘은 가상환경, AI 같은 새로운 용어들로 대체하고 있는 것 같습니다.

실제로 컴퓨터라고 보기 어려울 정도로 초기의 컴퓨터는 실제로 사람이 0과 1에 해당하는 입력을 기계적으로 주어주는 방식이었다고 합니다. 사진 픽셀 하나도 8개의 0 혹은 1로 이루어져 있는데, 이를 하나씩 직접 입력하는 것은 요즘의 기준으로는 사실상 불가능한 작업 입니다.

컴퓨터 언어는 이런 문제점에서 부터 시작되었습니다. 컴퓨터가 직접 받아들일 수 있는 0과 1을 사람이 입력하는 대신, 큰 틀의 논리를 적어주면 이를 셀 수 없이 많은 0과 1로 자동으로 바꿔주는 방식을 생각하게 된 것이라고 보면 될 것 같습니다. 여기서, 자동으로 바꿀 논리를 적는 규칙을 언어, 이를 바꿔주는 장치를 컴파일러 라고 부릅니다.

프로그래밍

프로그래밍 언어의 종류

프로그래밍 언어는 하나가 아닌 여러가지가 존재하고, 그 수도 수십종류가 됩니다. 동작의 원리를 적는 도구로서 이용되다 보니 목적에 따라 더 편리한 방법이 있기 때문이기도 하고, 기존의 언어의 부족한 점을 개선하기 위함 등의 이유로 어려가지 언어가 나오게 되었는데, 최근에는 그 수를 늘이기 보다는 존재하는 언어 중 선택하는 쪽으로 모이고 있는 것 같습니다.

단순한 비유로 공구를 들어볼 수 있습니다. 벽에 못을 박을 때는 망치가 적합하고, 벽에 구멍을 뚫을 때는 드릴이 적합하 듯 목적에 더 적합한 도구가 있는 개념으로 볼 수 있습니다. 망치로도 구멍을 뚫지 못하는 것은 아니지만 효율성이나 정확성에서 드릴을 이용하는 방법 보다는 어려움이 많습니다. 그렇다고 무조건 공구의 종류가 많은 것이 더 좋다고도 볼 수 없는 것도 비슷한 점이라고 볼 수 있습니다.

프로그래밍 언어 역시 각 목적에 적합한 언어들이 있습니다. 저와 같이 로봇을 다루는 사람들에게 유리한 언어가 있고, 홈페이지를 만드는 개발자에게 유리한 언어가 있는 등 여러 목적에 맞는 언어들이 다양하게 사용되고 있습니다.

미국의 Northeastern 대학에서 공개하고 있는 통계에서는 2023년 가장 많이 사용되는 10가지 프로그래밍 언어를 아래와 같이 소개하고 있습니다.


  1. SQL
  2. Python
  3. Java
  4. JavaScript
  5. C#
  6. C++
  7. R
  8. C
  9. Go
  10. Perl

이 중에서 제가 알고있는 언어에 대해 소개드리도록 하겠습니다.

SQL – 데이터베이스 언어

SQL 자체는 수십년 전 부터 언어로서 만들어져 사용되었지만, 최근에는 사실상 Database를 다루는 언어로 사용되고 있습니다. 짧은 명령어로 데이터를 손쉽게 가져올 수 있는 방식으로 되어있어 다른 언어에 비해 배우기가 상대적으로 쉬운 편이기도 하고, 데이터베이스 용도에 한정됨에도 그 수요가 어마어마하여 가장 많이 사용되는 언어로 소개되고 있습니다.

Python – 성능보단 쉬운 사용

리스트에 있는 언어 중 가장 늦게 알려졌지만 프로그래밍을 하는 사람이라면 반드시 거쳐가게 되는 언어로서 자리매김 하였습니다. 컴퓨터 성능이 점점 좋아지면서 어느정도의 성능 차이는 무시할 수 있을 정도가 된 것이 Python이 본격적으로 사용되기 시작한 동기가 된 것 같습니다. 사람의 언어와 더 비슷하게 구성되어 있고, 편리하게 사용할 수 있는 기능이 많아 한가지 목적 보다는 범용적으로 많이 사용되는 언어이긴 하지만, 그 중에서도 머신러닝에서의 사용이 특히 돋보이는 언어입니다.

Python이 본격적으로 각광을 받게 된 것은 머신러닝의 눈부신 발전 입니다. 머신러닝 초기에 Python을 이용한 방식이 그 편리함으로 인해 더 많은 선택을 받으면서 점점 더 많은 사람들이 Python을 이용하게 되었고, 이제는 절대다수가 머신러닝에 Python을 이용하고 있습니다.

Python은 장치 간 호환성에서도 큰 장점을 가지고 있습니다. 각 장치 구조에 맞게 0과 1로 번역하는 언어들과는 달리, Python은 통일된 구성을 따르기 때문에 컴퓨터의 하드웨어적인 특징을 거의 타지 않는 것이 장점입니다. 이 과정에서 성능은 조금 손해를 볼 수 있지만, 편리함이 이를 보상해줄 수 있을 정도로 뛰어난 장점이기도 합니다.

Java

Python의 등장 이전에는 가장 높은 호환성을 보이던 Java는 웹 프로그래밍에서는 여전히 많이 사용되고 있는 언어입니다. 성능에서는 C++, 편리함과 호환성에서는 Python에 비교되며 사용되는 용도가 적어지긴 했지만, 안드로이드 개발의 주 언어로서 입지를 지키고 있기도 합니다.

C#

Microsoft 전용 언어로, Windows 프로그램 개발에 많이 사용되던 언어입니다. Java와 마찬가지로 그 입지가 많이 줄었지만, Unity의 개발 언어로 자리잡으며 개임 개발자에게는 여전히 필요한 언어로 남아 있습니다.

C++

수 십년에 걸쳐 여러 용도로 사용되는 범용 언어이면서 프로그래밍 언어의 표준이라고 볼 수 있는 언어입니다. 아직 컴퓨터의 성능이 뛰어나지 못할 때 부터 사용되던 언어인 만큼 사용성 보다는 성능을 더 중요시하는 언어이며, 실제로 사용성을 중시하는 Python 보다 수십배에서 수백배 까지도 빠른 성능을 보일 수 있습니다. 그만큼 배우기가 조금은 어려울 수 있는 언어이지만, 컴퓨터의 동작 원리부터 파악하며 배우기 마련이라 프로그래밍을 제대로 배우는 데 기반이 되는 언어로도 볼 수 있습니다.

로봇연구에서 실시간 영상처리와 같이 연산 속도가 중요한 일부 기능에는 필연적으로 C++를 사용하기도 하고, 저 역시 C++을 주로 사용하고 있습니다.

범용 언어로서 Python과 C++

위 리스트에 있는 언어 중에서도 한가지 목적에 특화된 것이 아닌 범용으로 사용되고 있는 언어 중에는 Python과 C++가 단연 가장 많이 언급되고 또 사용되고 있습니다. 로봇개발에는 특이 이 두 언어가 전부라고 봐도 과언이 아닙니다.

그렇다면 왜 하나로 통일하지 않고 둘로 나눠져있는지 의문이 들 수 있습니다. 결론부터 말씀드리면 사용성과 성능 사이의 선택이기 때문입니다.

스크립트 언어 vs 컴파일 언어

두 언어가 사용성과 성능에서 큰 차이를 보이는 이유는 언어가 0과 1로 번역되는 과정에서 차이를 보이기 때문입니다. 쉬운 이해를 위해 비유를 하자면 준비되지 않은 길을 뚫고가는 오프로드 주행과 잘 뚫린 고속도로를 달리는 주행을 비유로 들 수 있습니다.

비포장 도로를 달리는 Python

Python은 적당한 아이디어를 바로 실행해 볼 수 있도록 설계된 도구입니다. 번역 과정을 매번 거치는 방식이 아닌 미리 번역된 범위 안에서 조합하여 실행하는 방식인데, 이를 스크립트 언어라고 합니다. 미리 번역된 내용을 사용하기 때문에 호환성도 좋고 빠르게 실행시켜 볼 수 있지만, 동시에 딱 맞게 번역된 것이 아니라 실행 과정에서의 성능 효율을 떨어집니다.

딱 맞춰 길을 만들고 달리는 것이 아닌 비포장 도로를 달리는 것과 비슷한 것 같습니다.

고속도로를 만들어 달리는 C++

C++는 0과 1로의 번역하는 과정에 해당하는 컴파일 과정을 거친 후 실행하는 방식의 도구 입니다. 작성하는 프로그램 마다 딱 맞는 번역과정을 먼저 거치고 나서 실행하는 방식이기 때문에 실행하기 까지 작업이 더 필요하지만, 실행에 최적화된 번역이 있어 실행 성능이 뛰어납니다.

마치 먼저 고속도로를 만들고 달리는 것과 비슷한 것 같습니다.

로봇연구에 사용되는 언어

결론부터 적자면 로봇분야에서는 Python과 C++ 두 언어 모두 많이 사용됩니다. 로봇연구 중에서도 머신러닝과 같이 Python이 필요한 언어가 있는 반면 빠르게 실행되어야 하는 C++가 필요한 분야도 있기 때문입니다. 여러 기능을 조합해야 하는 로봇 시스템의 특상 상 두 언어를 모두 사용하는 경우도 자주 있습니다.

사람이 여러 언어를 배우기도 하는 것과 마찬가지로 프로그래밍 역시 여러 언어를 사용하여 기능을 완성하기도 합니다. 로봇의 경우라면 Python과 C++ 두 언어 모두 배우는 것이 바람직할 것 입니다.

정리

이번 포스팅에서는 프로그래밍을 배우기에 앞서 어떤 언어를 배우는 것이 좋을 지 알아보기 위해 여러 언어를 소개드려 보았습니다. 가장 많은 사용을 보이는 언어들은 가장 높은 개발자 수요를 보이는 웹개발 관련 언어들이지만, 용도에 맞는 언어가 있는 점 역시 중요한 점 입니다.

프로그래밍 언어를 하나만 배워야 하는 것은 아닙니다. 로봇에서와 마찬가지로 여러 언어로 개발된 프로그램을 조합하는 경우 여러 언어를 모두 알고 있어야 유리합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다