Trace foward

[연재] 프로그래밍 언어 이야기 2 - 파스칼

"프로그래밍 언어 이야기" 연재

-----

80년대만 하더라도 마이크로소프트는 IBM 호환 컴퓨터용 공식 운영체제인 MS-DOS를 공급하는 그냥그런 소프트웨어 회사에 불과했다. MS-DOS는 SCP사의 86-DOS를 인수해서 이름만 바꾼 것이었고, 86-DOS 또한 Digital Research사의 CP/M을 배껴 만든 클론 제품이었다. (86-DOS의 원래 이름이 QDOS = "Quick and Dirty Operating System" = "대강 빨리 개발한 운영체제"였다는건 시사하는 바가 적지 않다.)

평상시 유닉스 쉘을 쓰다가 가끔 윈도우에서 DOS 창을 띄울 일이 있으면 한숨부터 쉬는 이들이 많을텐데, 그런게 30년전 누군가가 "대강 빨리 개발한 운영체제"의 한계인 것이다. 시장에서 성공하는게 꼭 좋은 기술이지 않다는건 늘 모두의 불행이니까. 물론 마이크로소프트는 MS-DOS를 "Microsoft Disk Operating System"의 줄임말로 홍보했고 오늘날 대부분의 사람들은 DOS를 "디스크 운영체제"라는 의미로 기억하고 있다.

마이크로소프트가 오늘날의 종합 소프트웨어 회사로 입지를 굳히기 시작한 것은 90년대 중반 DOS가 윈도우로 대체되면서 부터였다. DOS 시절엔 워드 프로세서는 워드 퍼펙트사, 스프레드시트는 로터스사, 소프트웨어 개발 도구는 볼랜드사 등이 각각의 시장에서 독주하고 있었다. 로터스의 총 자산 규모가 마이크로소프트를 상회했던 시절이다. 이후 마이크로소프트는 윈도우 운영체제 공급자로서의 위계를 지렛대삼아 이들 회사 모두를 시장에서 사장시켜 버렸다.

내가 파스칼을 처음 접한 것은 1994년, 그러니까 정확히 15년전의 일이다. 아직 윈도우와 DOS가 병행으로 사용되던 시기였고, 나의 파스칼 개발 환경도 볼랜드의 터보 파스칼이었다. 아래는 터보 파스칼의 실행 화면이다.

간단한 파스칼 코드도 한 번 살펴보자. 코드 첫째줄의 "uses crt;"는 crt 라이브러리를 사용하겠다는 의미이고, var 섹션은 변수 선언, 그리고 begin/end는 코드 섹션이다.

uses crt;

var
  Name : String;
begin
  Clrscr;
  Write('What is your name? ');
  Readln(Name);
  Writeln;
  Writeln('Hello, ', Name, '.');
end.

당시 프로그래밍에 푹 빠져 지내던 나는 "개인적인 목적으로 프로그램을 만들어 쓰는게 과연 실용적인 일일까?"라는 질문에 답을 찾고 있었다. 수십명의 프로그래머가 여러해에 걸쳐 개발하는 거창한 프로그램 보다는 혼자 만들어서 일상에서 쓸 수 있는 프로그램을 만드는 것에 관심이 더 많았기 때문이다.

왠만큼 파스칼이 손에 익었을때 나는 탁구 게임 하나를 만들기 시작했다. 그건 프로그래밍의 ROI 효율성을 가늠해 보려는 일종의 테스트였다. 얼마나 오래걸릴까? 3개월, 6개월, 1년? 탁구대 위로 탁구공이 원근효과를 내며 날아가는 모션을 모델링하는데만 꼬박 2주가 걸리더라. 그런 속도라면 1-2년은 족히 걸릴 듯 했다. 그 이후로 나는 프로그래밍의 실용성에 다소 회의적인 인식을 갖게 됐고, 이 중독성 강한 취미를 자중하느라 애썼다.

흔히 파스칼을 교육용 프로그래밍 언어라고 말하는데, 그건 역설이 아니었나 하는 생각을 해본다. 교육용으로 특화된 언어가 되려 프로그래밍에 대한 열정과 흥미를 반감시켰으니. 10년쯤 지나서 그때 펄(Perl)을 접했으면 어땠을까 하는 생각이 들었던건 아쉬움일거다.

개인적인 목적으로 프로그램을 만들어 쓰는게 과연 실용적인 일일까? 이 질문은 지난 15년간 내게 중요한 화두였다. 그 막연한 가능성 하나가 내가 이 시간 먹는 하마 같은 취미를 놓지 않았던 이유였으니까.

어찌됐든 나는 파스칼을 3년간 잡고 있었다. 이후 파스칼은 객체지향 프로그래밍을 지원하는 옵젝트 파스칼, GUI 프로그래밍을 지원하는 델파이 등으로 발전해갔다.