2007년 1월 12일 금요일

프로그래밍의 역사

섭씨 50도의 열과 소음이 가득 채운 커다란 방에서, 한 여자 연구원이 노트를 들고 30 미터에 이르는 방 한 면을 가득 메운 상자들에 꽂혀 있는 전기 케이블의 배선을 바꾸고 있었다. 노트에는 대포의 탄도 계산에 필요한 방정식이 기록되어 있고, 연구원은 그 노트에 따라 꼼꼼하게 케이블을 점검해 나갔다. 6000개에 이르는 전기 케이블을 점검한 후, 계산에 사용할 실험 수치가 기록된 카드들을 기계에 밀어 넣고 스위치를 올렸다. 잠시 후 한쪽에 설치된 천공기(punching machine)가 계산 결과를 카드에 출력했다.

이 광경은 최초의 컴퓨터, 에니악(ENIAC)을 운용하던 모습이다.  한 쪽 벽면을 가득 메우고 있던 상자들은 에니악(ENIAC)이었고 전기 배선은 에니악(ENIAC)이 계산할 때 사용하는 "논리"로써, 현대의 컴퓨터로 치자면 "프로그램"이었다. "프로그래밍"이 프로그램을 제작하는 일을 뜻하니, 연구원이 전기 배선을 하던 그 모습은 바로 프로그래밍이었다고 할 수 있다.

에니악은 당시 엄청난 계산 능력을 갖고 있었지만(286 PC와 비슷했다.), 단점 또한 그 덩치만큼이나 대단했다. 진공관 발열 문제로 인해 거의 매일 반나절은 운영을 멈춰야 했고,  무엇보다 프로그램을 변경하려면 6000개에 이르는 배선을 교체해야 했다. 이후에 이 괴물은 맨해튼 프로젝트에도 참여했던 천재 과학자 존 폰 노이만(John von Neumann)의 마법을 거쳐 조금 더 신뢰성 있는 컴퓨터인 에드박(EDVAC)을 탄생하게 했고, 에드박은 중앙 프로세서, 기억장치, 프로그램, 데이터로 구성된 현대 컴퓨터의 구조를 갖춘 현대 컴퓨터의 조상이 되었다.

노이만 이후 컴퓨터의 발전은 가속도를 더해갔으며, 프로그래밍 방식 또한 컴퓨터의 발전에 발맞춰 나아가게 됐다. 전선으로 구성됐던 프로그램이 이제 거대한 방에서 조그만 상자로 그 "장소"를 옮기게  된 것이다. 
트랜지스터와 이 트랜지스터를 하나의 칩에 집적한 마이크로칩이 개발되면서 컴퓨터는 운영 체제와 기본적인 프로그램, 그리고 명령어들을 자체 내장했다. 그리고 프로그래머는 CPU가 제공하는 기본적인 명령어를 조합하여 보다 효율적인 방법으로 프로그램을 작성할 수 있었다.

이 명령어들이 바로 어셈블리어이다. 프로그래머가 어셈블리어를 이용하여 프로그램 원천 코드를 작성하면,  컴파일러(Compiler)라는 소프트웨어를 이용하여 실행 파일을 만들어 냈다. 그리고 이 실행 파일이 바로 프로그램이었다.

컴퓨터가 보급되면서, 사람들은 보다 많은 업무들을 컴퓨터에 맡기고자 했다. 그러나 필요한 프로그램들은 늘어나는데, 기호와도 다름없는 어셈블리어로는 그 속도를 맞춰나갈 수 없었다. 예를 들어 5+1 식을 계산하는 코드는 어셈블리어로 하면 다음과 같다. (이해하지 못해도 좋다. 아니, 여러분이 이해 못한다면 필자가 아래의 코드를 보여주고자 한 의도가 성공한 것이다.)

data
var1 DWORD 1
var2 DWORD 5
.code
mov eax, var1
add eax, var2 ;

(위 코드는 물론, 그 때 당시에 사용하던 코드는 아니다. 이것은 현재 우리가 많이 사용하고 있는 인텔 계열의 80X86 CPU에서 동작하는 코드이며, 50년 전에 사용되던 코드 샘플은 필자는 안타깝게도 구할 수 없었다.)
프로그래밍 언어가 이렇게 어렵게 생겼으니, 프로그래밍은 전문 과학자나 아주 똑똑한 사람들의 전유물이었다. 하지만 존 배커스(John Backus) 때문이 상황이 달라졌다. 그는 수많은 학교에서 퇴학당한 문제아였지만, 좋은 스승을 만나 컬럼비아 대학을 마치고, 이후 IBM에 입사하게 된다. IBM에 입사하면서 그는 IBM에서 개발이 진행 중이던 일종의 어셈블리어 번역기인 스피드 코딩(Speed Coding) 프로젝트에 참여하고, 이 경험을 기반으로 1957년에는 사람의 언어에 가까운 최초의 프로그래밍 언어, 포트란(Fortran) 언어와 컴파일러를 개발했다. 포트란은 연구소와 과학 기술자를 중심으로 엄청난 인기를 얻어 나갔다. 어떻게 인기를 얻었냐고? 잠시 후에 알게 된다.

포트란 언어의 덧셈 코드는 다음과 같다.

a = 5 + 1

어셈블리 코드와 비교해 보라. 이 이상 단순해질 수 없을 정도로 단순해졌다. 프로그래밍 코드답게 생긴 것은 앞에서 선보인 어셈블리어 쪽이지만, 이해하기에는 포트란 쪽이 어셈블리어보다 100배는 더 낫다. 우리가 수학 시간에 배운 덧셈과 등가 기호만으로 덧셈 연산이 가능하지 않은가?

포트란 이후, 1천여가지가 넘는 프로그래밍 언어들이 수 없이 탄생하고 사라져갔다. 그러던 중 1964년, 베이직(BASIC : Beginner's All - Purpose Symbolic Instruction Code) 언어가 미국 다트머스 대학의 존 케머니(John Kemeny)와 토마스 쿠르츠(Thomas Kurtz) 교수에 의해 탄생됐다. 이들은 컴퓨터 프로그래밍이 더 이상 과학자나 엔지니어의 전유물로 남지 않길 바랬다. 그래서 학생부터 청소부까지 누구라도 배워 사용할 수 있는 언어를 고안해 냈고, 그것이 바로 베이직이다.

이 베이직 언어는 너무 사용하기 쉬웠기 때문에 수많은 컴퓨터 광들을 프로그래밍의 세계로 끌어들일 수 있었다. 레이크사이드 스쿨에 다니던 앳된 중학생 빌 게이츠(Bill Gates)와 폴 앨런(Paul Allen)도 예외는 아니었다. 당시 컴퓨터는 엄청나게 비싼 기계였지만, 레이크사이드 스쿨은 재정적으로 풍부한 사립 학교였고, 어머니회의 후원으로 컴퓨터와 터미널을 보유할 수 있었다. 게이츠와 그의 친구들은 그야말로 하루종일 베이직 프로그래밍에 빠져들었다. 빌 게이츠는 학교를 졸업하고 하버드에 진학하지만, 얼마가지 않아 중퇴하고 마이크로소프트를 창업한다(많은 사람들이 빌 게이츠가 공부에 염증을 느꼈다고 생각하지만, 그것은 사실이 아닌 것으로 보인다. 그저 앞으로 도래할 미래가 뻔히 보이는 상황에서 기회를 놓치고 싶지 않았기 때문에 학교를 포기했던 것이다.). 그리고 마이크로소프트의 첫 번째 제품이 바로 베이직 인터프리터(BASIC Interpreter)였다.

컴파일러와 인터프리터

앞서 어셈블리 언어와 포트란 언어에서는 "컴파일러"라는 단어를 사용했고, 베이직 언어에서는 "인터프리터"라는 단어를 사용했다. 프로그래밍 언어에는 크게 두 가지 종류가 존재한다. 하나는 소스 코드에서 실행 파일로 변환하는 과정을 거치는 컴파일 방식의 언어이고, 또 다른 하나는 소스 코드를 실시간으로 읽어 해석하여 프로그램을 실행하는 방식의 인터프리트 방식의 언어이다.  컴파일 언어의 장점은 작고 효율적인 실행 파일의 생성에 있고, 인터프린트 언어의 장점은 소스 코드를 작성해서 바로 실행해 볼 수 있기 때문에 프로그램 개발이 용이하다는 데 있다.

마이크로소프트의 베이직은 IBM이 개발한 PC(그렇다. 우리가 사용하고 있는 그 PC)에도 이식되었고, PC의 수많은 응용 프로그램을 탄생시킬 수 있도록 했다. 이 베이직 언어는 이후에도 마이크로소프트가 윈도우를 출시 했을 때 비주얼 베이직(Visual Basic)으로 새롭게 거듭나면서 윈도우 응용프로그램을 보급하는 일등 공신이 된다.

* 이 포스트에는 오류가 있을 수 있으며, 추후 고증 검증 절차에 의해 변경될 수 있습니다.
* 제 블로그의 글들은 모두 저작권의 보호를 받습니다. 무단 복사 및 전제를 금합니다.

댓글 없음:

댓글 쓰기