앞서 컴퓨터가 이해할 수 있는 말로 컴퓨터에게 명령을 내리는 것을 코딩(프로그래밍)이라고 설명했습니다.
그리고 컴퓨터에게 명령을 내리려면, 사람에게 말을 거는 것과는 다른 방법이 필요하다는 것도요.
컴퓨터가 이해할 수 있는 말을 프로그래밍(코딩) 언어라고 합니다.
여러분이 흔히 들어 보았을 엔트리, 스크래치, 블록클리, 파이썬, 자바스크립트 등이 바로 이런 코딩 언어라고 할 수 있지요. 이런 코딩 언어에는 아주 여러 가지 종류가 있어요. 그리고 처음부터 우리가 알고 있는 것 같은 모습은 아니었습니다. 지금부터 코딩 언어가 어떻게 발전해 왔고, 어떤 종류가 있는지 차근차근 알아볼게요.
수많은 프로그래밍 언어들. (사진 출처: 플리커 Daniel Iversen)
1세대 - 1과 0으로 이루어진 기계어
컴퓨터는 1과 0이라는 값을 인식하고 처리하는 기계입니다. 때문에 컴퓨터에게 어떤 일을 시키려면 0과 1만을 사용해서 명령해야 하지요. 실제로 초기 프로그래머들은 이 두 가지 숫자만을 사용해서 코딩을 했습니다. 옛날에는 키보드도 없었기 때문에 종이에 구멍을 뚫어 1과 0을 나타내는 방식을 사용했어요. 심지어 종이에 구멍을 뚫어 주는 펀처(puncher)라는 직업도 있었답니다!
1과 0으로만 이루어진 기계어(machine language) (사진 출처: 위키피디아 W.Rebel)
초기 컴퓨터 중 하나인 포트란에 사용된 프로그래밍 카드. (사진 출처: 위키피디아 Arnold Reinhold)
이렇게 0과 1만으로 컴퓨터에게 명령을 내리면 따로 컴퓨터가 알아들을 수 있게 통역할 필요가 없습니다. 컴퓨터의 눈높이에 맞춰서 코딩을 해 주는 것이지요. 하지만 이런 언어들은 컴퓨터 기계에 따라 달랐습니다. 똑같은 '1111'이라도 삼성 CPU와 애플 CPU에서 의미가 다르다 보니 그 때마다 새로 코딩을 해야만 했습니다. 이런 작업을 포팅(porting)이라고 합니다.
2세대 - 사람의 언어에 가까운 어셈블리어
1과 0만으로 이루어진 기계어가 헷갈리고 어려웠기 때문에, 사람들은 좀 더 인간이 사용하는 말과 비슷한 언어를 만들어야겠다고 생각했습니다. 그래서 어셈블리어가 탄생했습니다. 이제 영어 단어마다 기계어를 짝지어 약속해 두는 것이지요.
하지만 이것도 쉽지는 않았습니다. 간단한 명령 하나만 하려고 해도 여러 줄의 어셈블리어를 써야 했고, 여전히 기계마다 새로 코딩을 해야만 했어요. 단순히 기계어를 모양만 바꾸었을 뿐이니까요.
3세대 - 고급 언어
기계가 바뀔 때마다 새로 코딩을 해야 한다니, 정말 불편합니다. 예전의 컴퓨터는 복잡한 계산을 대신해 주는 계산기의 역할에 더 가까웠기 때문에 약간의 불편함을 감수할 수 있었을지도 모르겠지만, 컴퓨터가 발전하면서 점점 더 많은 일들을 하기 시작했고 불편함도 커져만 갔습니다.
이에 벨 연구소의 연구원 데니스 리치(Dennis Ritchie)는 컴퓨터마다 새로 코딩할 필요가 없는 C 언어라는 새로운 언어를 만들어 냅니다. 중간에 번역기가 있어서, C 언어를 기계어로 바꾸어 주었거든요. 그리고 유닉스라는 운영체제도 만들었지요. C 언어로부터 C++, C#, Objective-C, JavaScript와 같은 수많은 파생 언어가 만들어졌고, 유닉스로부터 리눅스, 안드로이드, macOS, iOS 등 수많은 운영체제가 만들어졌습니다.
정말 위대한 발견이었지만, 이때부터 코딩은 어려워지기 시작했습니다. 인간의 언어와 가까워지기는 했지만 인간과 컴퓨터가 둘 다 이해할 수 있도록 만들어진 언어이기 때문에 컴퓨터의 이해 방식을 알아야만 하기 때문이지요. 또 언어와 기계어가 1:1로 대응하지 않기 때문에 번역기가 아주 중요합니다.
자연어?
고급 언어보다 더 사용하기 쉬운 언어를 개발하기 위해 사람들은 노력하고 있습니다. 미래에는 인공지능처럼 사람이 그냥 편하게 말만 하면 그것을 기계어로 해석해 줄 수도 있을 거예요. 요즘에는 흔히 볼 수 있는 인공지능 스피커도 그 대표적인 예라고 볼 수 있습니다.
교육용 언어
앞서 설명한 것처럼 수많은 프로그래밍 언어들이 있어 왔고, 지금도 발전하고 있습니다. 하지만 누구나 처음부터 복잡한 프로그래밍 언어를 이해할 수 있는 건 아닙니다.
컴퓨터의 사용과 코딩이 점차 중요해지면서 어린이들에게도 코딩 교육이 필수로 인정받는 시대가 되었습니다. 때문에 어린이들이 쉽게 배우고, 컴퓨터의 작동 원리를 깨달을 수 있는 교육용 언어들이 많이 개발되었습니다. 바로 엔트리, 스크래치, 블록클리 등이지요.
오조봇은 특이하게도 컬러코드라는 명령어를 사용합니다. 또한 블록 형태의 언어인 블록클리로도 코딩할 수가 있지요. 대시는 그림 아이콘 형태의 원더, 그리고 블록 형태의 블록클리로 코딩이 가능합니다.
나라마다 하는 말은 모두 다르지만, 코딩 언어는 전세계가 동일합니다. 프로그래밍 언어를 이해하면 컴퓨터의 사고방식을 이해할 수 있을 것이고, 코딩에도 더 가까워질 수 있을 거예요.