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 프로그래밍을 지원하는 델파이 등으로 발전해갔다.

트랙백 주소:
another_k  2009/9/10 오후 10:07
펄의 프라그마 use가 파스칼에서 온 거군요. 명시적 변수를 선언할 때 use vars;를 선언하는데 그것도 비슷하고. BEGIN, END 블록 이름도 직접 조상은 awk지만, 먼 조상은 파스칼일 수도 있겠습니다.
그러고 보니 로터스, 볼랜드의 시장을 몽땅 마이크로소프트가 가지고 갔네요.
예전에 배치와 매크로란 책으로 배치프로그래밍을 배웠는데, ERRORLEVEL이 뭘 말하는 건지 몰랐습니다. 쉘 프로그래밍을 배우고 나서 배치프로그램을 다시 보니 다 이해가 가더군요. 좀 베낄 때는 확실히 베껴주면 좋았을텐데요.

readme  2009/9/11 오전 9:42
내가 파스칼을 처음 접한 건 87년이었을 겁니다... 벌써 20년 전이네요. BASIC의 원시성에서 놀다가 객체성이 이해되지 않더군요. 대산님의 94년도 파스칼 화면도 87년도 것과 별로 다르지 않네요. 윈도우즈 3.0이 91년도 쯤에 나오지 않았던가? 옛날 생각이 나네요... 좋은 글 많이 쓰세요.

먼곳  2009/9/13 오후 7:49
죄송합니다만 한가지 여쭙겠습니다. 대산님의 글을 구독하고 싶은데 아무리 찾아봐도 rss알리미가 보이지 않네요. 일부러 rss를 하지 않으셨는지 아니면 있는데 제가 찾지를 못한건지. 아무튼 방법을 좀 가르쳐 주시면 감사하겠습니다.

포레스트  2009/9/14 오전 1:09
지금이야 상황이 다르겠지만 당시 "개인적인 목적으로 프로그램을 만들어 쓰는게 과연 실용적인 일일까?"에 대한 답이 어떻게 나왔는지 궁금해집니다. 저는 학생 때 전공 공부에 소홀해질까 조심스러웠고, 지금도 일때문에 보고는 있지만 경계를 하고 있는 상황이라서요. ㅎㅎ 다음 이야기에 나오려나요? 궁금하면서도 내심 제가 원하는 답이 나오길 바라는것 같기도 합니다. ^^;

大山  2009/9/14 오전 11:34
@another_k: 프로그래밍도 역사 공부가 많이 도움이 되더라구요. ㅎ 프로그래밍 언어 계보도 링크입니다.

http://commons.wikimedia.org/wiki/File:Genealogical_tree_of_programming_languages.svg

@readme: 윈도우 3.0이 90년, 3.1이 92년인가 그랬을 겁니다. 제가 미국에 94년에 갔는데 그때는 아직 도스와 윈도우가 많이 혼용되더라구요. readme님 파스칼 처음 접하셨던 해에 저는 컴퓨터를 처음 접했네요. ^^;

@먼곳: RSS 링크는 다음과 같습니다. 아마 IE6 쓰시나 보네요. ^^

http://blog.daesan.com/feed/index

@포레스트: 포레스트님 오랜만입니다. 잘 지내시죠? 질문주신 거는 연재 최종 결론입니다. ㅎㅎ

먼곳  2009/9/14 오후 1:11
에구에구 컴맹이 이렇답니다. RSS -_ㅡ:: 감사드려요^^

yuna  2009/9/14 오후 10:55
대산님의 프로그래밍 언어 이야기는 제가 개발자가 아님에도 불구하고 흥미로운 구석이 있어요.

大山  2009/9/15 오전 11:32
@먼곳: :)

@yuna: 듣던 중 반가운 소린걸요. ㅎ