brunch

You can make anything
by writing

C.S.Lewis

by wangane Jun 27. 2022

인문학적 반도체_5. SW개발(1)

3장. 반도체는 어떻게 만들어지나?

 5. SW개발


프로그래밍 언어의 역사


비트겐슈타인은 「논리철학논고」에서  "언어의 한계가 곧 세계의 한계" 라는 명언을 남겼습니다. 이는 우리 인간뿐 아니라 컴퓨터에게도 적용되는 철학적 명제입니다.

컴퓨터가 이해할 수 있는 언어를 ‘프로그래밍 언어’라고 합니다. 반면에 사람이 사용하는 언어는 저절로 생겨났기 때문에 ‘자연어’라고 부르죠. 


맨 처음 컴퓨터와 사람은 어떻게 소통 했을까요?

컴퓨터는 단순합니다. 

오직 0 아니면 1인 세상이 전부입니다. 

이진수만을 이해하는 컴퓨터를 이해시키기 위해 초기 프로그래머들은 소위 노가다를 했습니다. 초기 컴퓨터에는 키보드나 모니터 같은 입출력 장치도 없었기 때문에  0과 1로만 코딩을 해서  ‘천공카드(punched card)’에 구멍을 뚫어 컴퓨터에 집어넣었습니다. 구멍이 뚫린 것은 1이고 구멍이 뚫리지 않은 것은 0을 의미했기 때문에 컴퓨터가 알아먹는 방식이지요.

이런 방식으로 0과 1로만 이루어진 언어를 1세대 언어인  ‘기계어(machine language)’ 라고 합니다.


당연히 2진수로만 이루어진 기계어는 컴퓨터가 바로 이해하기는 쉬워도 사람이 이해하기에는 너무 어려웠습니다. 그래서 기계어를 대신해 탄생한 것이 2세대 언어인 ‘어셈블리어(assembly language)’입니다. 어셈블리어의 특징은 기계어 1라인당 어셈블리 명령어가 대부분 1라인씩 대응되어 있고 이를 비교적 간단하게 짤 수 있는 어셈블러를 통해 기계어로 변환되도록 한 것입니다. 이 때문에 어셈블리어는 고급 언어와 기계어 사이에 있다 하여 '중간 언어'라고도 불립니다. 

문제는 기계어는 컴퓨터의 CPU가 채택한 ISA에 따라 다 다르기 때문에 어셈블리어의 명령어 역시 통일된 규격이 없습니다. 따라서 컴퓨터(CPU)가 바뀌거나 업그레이드가 된다면 코딩을 새롭게 해줘야 했습니다.  프로그래밍 언어가 다 그렇듯이 기계어에 가까울 수록 바이너리 파일크기가 작고 프로그램의 작동속도가 빠릅니다. 어셈블리어는 C언어보다 훨씬 빠르므로 어떠한 프로그램을 만들어도 성능이 좋지만  너무 어렵고 노가다라 현재 운영체제 커널은 개발자의 생산성과 프로그램의 성능을 고려한 절충안으로 C언어나 C++ 등 상위의 언어를 선택하는 경우가 많습니다.


3세대 언어로 불리는 'C언어'는 1972년 켄 톰슨과 데니스 리치라는 턱수염 가득한 두 괴짜 천재 해커들에 의해 개발되었습니다. 벨연구소 연구원인 켄 톰슨은 '멀틱스'라는 운영체제 개발 경험을 토대로  PDP-7이라는 컴퓨터에서 돌아 갈 새로운 운영체제인 유닉스(Unix)를 어셈블리어로 개발중이었습니다. 그런데 한창 코딩을 하던 도중에 컴퓨터가 PDP-11이라는 최신 기종으로 업그레이드되어 어셈블리어를 다시 짜야하는 불상사가 벌어졌습니다. 이때 동료인 데니스 리치는 B언어에 문자 타입을 추가하고 컴파일러를 다시 작성해서 PDP-11 기계어를 생성하도록 했습니다.1973년에 기본적인 기능이 구현되었고, 이름을 C언어로 불렀는데  B언어는 1969년 역시 켄 톰슨과 데니스 리치가 함께 멀틱스에서 사용하기 위해 개발한 프로그래밍 언어여서 B의 다음 버전이라서 그냥 C언어로 부르게 되었다고 합니다. 데니스 리치는 같은 해에 C언어로 유닉스를 다시 작성하기 시작하여 데이터를 정의할 수 있는 구조체 타입(structure type)을 완성하였습니다. 그래서 자기가 만든 프로그래밍 언어로 운영체제까지 만든 데니스 리치를 C언어의 아버지로 부르고 있습니다. 

[ C언어의 아버지 데니스 리치 ]


이후 C언어와 유닉스는 컴퓨터 역사에 지대한 공헌을 하게 됩니다. C언어로부터 C++, C#, JAVA, 파이선과 같은 수많은 파생 언어가 탄생했고, 유닉스로부터 리눅스, 안드로이드, iOS 같은 수많은 파생 운영체제가 만들어졌습니다.








        

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari