파이썬·C언어 다 영어, 프로그래밍 언어는 만국 공통어

중앙일보

입력 2022.04.09 00:21

수정 2022.04.11 08:55

SNS로 공유하기
페이스북
트위터

코딩 휴머니즘 

코딩 휴머니즘

코딩이 대세인 요즘, 취업을 준비하는 취준생이거나 중고등학생이라면 파이썬(Python)을 배우라는 말을 한 번쯤 들어 봤을 것이다. 파이썬은 현재 세계에서 가장 주목받는 프로그래밍 언어다. 우리나라 중고등학교에서도 채택하여 코딩 교육을 하고 있다. 문법이 간결하고 표현 방법이 인간의 사고체계와 많이 닮아서 학생들이 이해하기가 쉽다. 따라서 코딩을 쉽게 배울 수 있다는 장점이 있다. 코딩을 처음 접하는 인문 학도들도 많이 선택한다. 그렇다면 파이썬이 가장 쉬운 언어일까?
  
파이썬 개발자는 네덜란드인
 
쉽다, 누구나 할 수 있다는 파이썬의 특징이 간혹 코딩에 대한 근본적인 개념을 오해하게 하기도 하는 것 같다. 우리가 파이썬을 써서 코딩을 손쉽게 한다고 해도 컴퓨터가 이해하는 언어는 모두 ‘0’과 ‘1’이다. 파이썬은 인간의 언어와 비슷하지만, 컴퓨터가 이해하는 ‘0’과 ‘1’로 수렴하기 위해 여러 단계의 절차를 거치게 된다. 그 절차는 무엇일까?
 
파이썬처럼 컴퓨터가 이해할 수 있는 언어를 ‘프로그래밍 언어’라고 부른다. 이에 반해 사람이 사용하는 언어는 저절로 생겨났기 때문에 ‘자연어’라고 부른다. 저절로 생겨났다는 말은 어느 한 사람이 만든 것이 아니라 많은 사람이 사용하다 보니 자연스레 언어가 된 것이고, 지금도 사용하는 사람들에 의해 조금씩 사용법이나 의미가 변하게 된다. 자연어는 문법도 복잡하고, 예외도 많고, 화자의 의도에 따라 다양하게 쓰이기도 한다. 이에 반해 프로그래밍 언어란 누군가가 의도를 갖고 인위적으로 만들어 낸 ‘인공언어’라고 할 수 있다.


이렇게 만들어진 프로그래밍 언어는 만든 사람 혹은 조직에 의해 적극적으로 홍보된다. 많은 사람이 사용하고 많이 활용될수록 좋은 언어가 되기 때문이다. 전 세계적으로 사용되는 프로그래밍 언어는 대부분 ‘영어’를 기반으로 제작되어 있다. 영어권 개발자들이 대부분인 데다가, 비영어권 사람들조차 영어로 만들었다. 세계적으로 널리 쓰이길 원했기 때문일 것이다. 앞서 말한 파이썬 역시 네덜란드 사람에 의해 발명되었지만, 네덜란드어를 쓰지 않고 영어로 만들어졌다.
 
프로그래밍 언어가 다양하지만, 영어를 기반으로 하고 있다는 점은 아주 중요한 특징이다.  단언컨대 인류 역사상 전 세계가 이토록 하나의 언어로 통합된 적은 없었다. 그렇다. 이것은 모든 인류의 지식이 프로그래밍 언어를 중심으로 한 곳으로 모이고 있음을 의미한다. 최근 기술 발전 속도가 그 어느 시대보다 빠른 이유도 이 때문이라고 생각한다. 4차 산업혁명을 맞이하며 특정 기술을 구현하기 위해서 한국, 미국, 중국, 일본, 인도 등 다양한 국가의 개발자들이 한 가지 언어로 소통하고 있다. 바로 만국 공통어인 프로그래밍 언어를 통해서 말이다.
 
프로그래밍 언어는 영어로 되어 있지만, 문제는 컴퓨터가 영어를 이해하지는 못한다는 사실이다. 컴퓨터는 오로지 0과 1이라는 이진수만을 이해하는 기계니까. 따라서 중간에 어떤 처리 과정이 일어나야 검퓨터 이해를 하는데, 그것은 언어의 치환, 번역, 해석과 같은 일들이다.
 
지금은 믿기 어렵겠지만, 과거의 프로그래머들은 0과 1만으로 코딩을 했다. 초창기에는 키보드나 모니터 같은 입출력 장치도 없었다. 대신 ‘천공카드(punched card)’가 있었다. 이것에 구멍을 뚫어 컴퓨터에 집어넣는 것이 코딩이었다. 구멍이 뚫린 것은 1이고 구멍이 뚫리지 않은 것은 0을 의미했다.
 

Business network concept. Group of businessperson. Teamwork. Human resources.

예를 들어, ‘1 더하기 2’를 컴퓨터에 입력한다고 가정해 보자. 1은 2진수로 0001이고, 2는 2진수로 0010이다. 문제는 ‘더하기’다. 컴퓨터는 ‘더하기’라는 글자를 알지 못한다. 그래서 0과 1을 이용해서 ‘더하기’를 대신하는 것을 정의해야 한다. 예를 들어 앞으로 ‘111111’은 숫자가 아니라 ‘더하기’를 의미하는 것이라고 컴퓨터의 CPU와 미리 약속해두는 것이다. 이런 약속은 CPU 안에 마이크로코드(microcode)로 미리 프로그램되어 있다. 그 후에 CPU에게 ‘0001 111111 0010’이라고 명령을 내리면 비로소 ‘1 더하기 2’를 실행하게 된다. 그에 따라 CPU는 이진수로 ‘0011’이라는 계산 결과를 도출해 낼 것이고, 이를 모니터에 ‘3’이라고 출력하게 된다.
 
이렇게 0과 1로만 이루어진 언어를 ‘기계어(machine language)’라고 부른다. 이것이 바로 최초의 코딩이자 프로그래밍 언어이기 때문에 ‘1세대 언어’라고도 부른다. 어떻게 보면 1세대 언어는 사람이 컴퓨터의 눈높이로 수준을 맞춰서 코딩해준 셈이었다.
 
문제는 0과 1만으로 표현된 기계어 코드를 사람이 쉽게 이해하기가 어렵다는 점이다. 이런 기계어에 질린 사람들이 0과 1보다 좀 더 인간의 언어에 가까운 방법이 필요하다는 것을 실감했다. 그래서 기계어를 대신해 탄생한 것이 바로 ‘어셈블리어(assembly language)’이다. 예를 들어, ‘더하기’를 의미하는 ‘111111’을 이제부터 ‘ADD’나 ‘PLUS’라고 부르기로 약속하는 것이다. 그러면 프로그래머는 ‘0001 ADD 0010’과 같이 코딩할 수 있다. ‘더하기’가 기계어로 무엇인지 외우고 다닐 필요가 없어지는 셈이다. ‘ADD’라고 치면 ‘111111’로 자연스럽게 치환되니까 말이다. 이 어셈블리어는 1세대 언어인 기계어 다음에 탄생했기 때문에 ‘2세대 언어’라고 불린다. 그런데 이 어셈블리어에도 기계어와 마찬가지로 치명적인 약점이 있었다. 만약 컴퓨터(CPU)가 바뀌거나 업그레이드가 된다면 코딩을 새롭게 해줘야 했다. 예를 들어, 인텔 CPU에서는 ‘111111’이 ‘더하기’를 의미하지만 삼성 CPU에서는 ‘빼기’를 의미할 수도 있기 때문이었다.
  
C언어, 유닉스 코딩하다 탄생
 
벨 연구소의 연구원이던 켄 톰슨은 PDP-7이라는 컴퓨터에서 돌아갈 운영체제인 유닉스(UNIX)를 어셈블리어로 코딩하고 있었다. 그런데 한창 코딩을 하던 도중에 컴퓨터가 PDP-11이라는 최신 기종으로 업그레이드되는 불상사가 벌어졌다. PDP-7을 대상으로 작성하던 어셈블리어 코드를 PDP-11을 대상으로 다시 작성해야 하는 귀찮은 상황이 발생한 것이다. 결국 이 문제로 고심하던 중 동료였던 데니스 리치가 그 유명한 C언어를 개발하게 된다. C언어는 컴퓨터가 바뀌거나 업그레이드가 되어도 새로 코딩할 필요가 없는 언어였다. 그 이유는 ‘번역기’라는 것이 중간에 존재했고, 그 번역기가 C언어 코드를 기계어 코드로 번역하도록 개발되었기 때문이다. 그리고 리치는 톰슨과 함께 자신이 개발한 C언어를 사용해서 유닉스를 개발하게 된다. 우리는 이러한 C언어를 ‘3세대 언어’라고 부른다.
 
사실 C언어는 유닉스를 만들기 위해 탄생한 언어였다. C언어와 유닉스는 이후 컴퓨터 역사에 지대한 공헌을 하게 된다. C언어로부터 C++, C#, JAVA, JavaScript, PHP와 같은 수많은 파생 언어가 탄생했고, 유닉스로부터 리눅스, 안드로이드, macOS, iOS 같은 수많은 파생 운영체제가 만들어질 수 있었다. 결국 안드로이드폰과 아이폰에서 사용되는 모든 운영체제(OS)의 원형이 다 이때 만들어진 셈이다. 앞서 언급했던 파이썬도 마찬가지로 C언어와 같은 3세대 언어라고 할 수 있다.
 
그렇다면 3세대 언어보다 더 높은 수준의 언어도 있을까? 다시 말해서 파이썬보다 더 쉽게 코딩을 할 수 있는 언어도 있을까? 지금도 그런 언어를 개발하기 위해 누군가는 부단히 노력하고 있으리라 믿는다. 미래의 어느 순간에는 인간이 대충 말해도 번역기가 그 의도를 제대로 해석해서 컴퓨터에게 전달해 줄 수 있다면, 인간은 더는 프로그래밍 언어를 배우기 위해 고생할 필요가 없게 된다. 이렇게 생각해 보면 가장 이상적인 세상이란 컴퓨터와 인간이 자유롭게 소통하는 세상일지도 모르겠다. 
 
오민수 멀티캠퍼스 minsuu.oh@sericeo.com
정보산업공학을 전공했고 코딩을 배웠으나 글쓰기를 더 좋아한다. 멀티캠퍼스에 입사 후 삼성그룹 파워블로거, 미디어삼성 기자를 병행하면서 ‘디지털 전환’과 관련한 글쓰기를 시작했다. 현재는 ‘멀티캠퍼스’에서 IT 생태계의 저변을 넓히는 일을 하고 있다.