달력

4

« 2024/4 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
2011. 10. 15. 02:01

내가 써 본 언어 Other interests2011. 10. 15. 02:01

한국어, 영어 말고 컴퓨터 프로그래밍 언어.

C 언어의 아버지 Dennis Richie 사망 소식을 보니, C 언어 공부하던 시절 생각이 나서 내가 써 본 컴퓨터 프로그래밍 언어가 뭐가 있나 생각해 보았다.

1. 처음 배운 언어는 당연히 BASIC.

동생이 컴퓨터 학원에 다니면서 덩달아 나도 놀러가서 어깨 너머로 배웠다. 동생은 컴퓨터 경진 대회에 나가 상도 타더니 결국 전공도 이쪽으로 해서 지금도 컴퓨터로 먹고 살고 있다.

그때 학원에는 SPC-1000이 주력 기종이어서 내장되어 있던 BASIC 언어는 Hu-BASIC. 나중에 SPC-1000을 사서 이런저런 프로그랭 많이 짜 보았다. 인상적인 경험 가운데 하나는 모든 점에서 연속이지만 모든 점에서 미분불가능한 Weierstrass 함수가 어떻게 생겼는지 도저히 알 수가 없어서 프로그램을 짜서 그려 본 것. 그래프를 확대하면서 보니 어떻게 모든 점에서 연속이면서도 미분이 불가능한지 알 수 있었다. 컴퓨터가 장난감을 넘어 공부에 도움이 될 수 있다는 사실을 깨달은 순간이었다.

나중에 IBM PC 시대가 되면서 GW-BASIC, QBASIC 등도 조금 다루어 보았다. 1학년 교양 화학 숙제 가운데 복잡한 정적분 문제의 근사값을 중앙전산원 컴퓨터에서 BASIC으로 간단히 프로그램을 짜서 구했던 기억이 난다. Simpson 공식 같은 걸 쓰는 것보다 닥치고 구간을 더 많이 세분하는 게 훨씬 편리하다는 사실로부터 100년 전 사람들은 상상도 할 수 없던 문제 해결 방법이라며 킬킬댔던 기억도 난다.

2. 기계어 Z80

8비트 컴퓨터 시절에는 컴퓨터마다 메인 프로세서가 달라서 기계어도 거기에 맞춰서 따로 배워야 했다.

SPC-1000에 쓰인 것은 Zilog의 Z80 프로세서. BASIC으로 짰던 프로그램을 기계어로 바꿔서 실행했을 때 그 속도 차이는 정말 어마어마했다.

3. 거북 그래픽 Logo

사실 Logo를 제대로 써 본 건 대학 와서였지만, 희한하게도 고등학교 때 이미 알고 있었고, 프로그램도 짤 수 있었다. 당시 최고의 컴퓨터 잡지였던 <마이크로소프트웨어>에 Logo 프로그래밍이 연재되고 있었기 때문이다. 그러니까 마치 "키스를 책으로 배웠어요" 같은 상황이랄까.

8비트 컴퓨터 시절에 Logo를 돌린다는 것은 어려운 일. 그렇지만 거북 그래픽에 매혹되어, BASIC으로 Logo 인터프리터를 짜는 황당한 짓도 해 보았다. 그러나 역시 재귀호출이 없는 BASIC의 한계만 절감하고 말았다.

4. 그리고 C

대학교 2학년 때 학과 전산실이 생겼다. Unix 머신이었고, 전산실 컴퓨터끼리 네트웍 연결은 되지만 인터넷은 아직 안 되던 시대.

내가 써 보고 싶던 언어는 Pascal이었다. <마이크로소프트웨어>에 Pascal 특집이 여러 차례 실리기도 했고, 대단히 멋있어 보이던 언어였다. 그러나 전산실의 Unix 컴퓨터에는 당연히 C가 깔려 있었다. 전산실에 굴러다니던 Kernighan & Richie의 <The C Programming Language>를 보면서 처음으로 C 언어를 공부했다.

Unix에서 돌아가는 게임 하나 없는 상황이어서, C 공부하면서 블럭 맞추기 퍼즐을 짰다. 열다섯 개의 조각을 4x4 판에서 움직여 순서대로 맞추는 시시한 퍼즐이었지만 꽤 공부가 되었다. 숫자로 하면 재미없을 것 같아서 아예 그림까지 그려서 만들었다. 이때 vi 에디터도 귀신 같이 썼는데, 지금은 다 잊어먹었다. 

조각을 섞을 때 처음에는 아무 생각없이 랜덤하게 섞었는데, 마지막에 두 조각이 서로 바뀐 상태로 더 이상 맞출 수 없는 결과가 나오곤 해서 처음에는 이상하게 생각되었다. 열다섯 개의 조각을 아무렇게나 배열해도 당연히 순서대로 만들 수 있을 줄 알았으니까. 나중에 현대대수학을 공부하면서 홀치환과 짝치환을 공부하고 나니 무엇이 문제인지 알게 되었다. Sam Loyd의 유명한 퍼즐에 대해서도 나중에 알게 되었다.
 
대학교 3학년 때 386 PC를 사면서 드디어 Turbo-C를 쓰게 되어, 한동안 내 주력 언어가 되었다. 수치해석 과제도 모두 C로 작성했고, 좀 어려워 보이는 수학 문제다 싶으면 일단 C로 짜서 돌려보곤 했다.

초등학교 5학년 탐구생활에 "1부터 9까지 아홉 개의 숫자를 순서는 그대로 두고 사칙 연산을 이용하여 100을 만들라"는 문제가 있었다. 이 문제의 모든 해를 구해 본 것도 이때 C를 이용해서였다.

5. 아마 아무도 모를 ABC

석사 학위 논문을 쓸 때, 다항식에 대한 계산을 해야했다. C로 짜서 할 수도 있었지만, 빈번하게 나오는 유리수 연산 부분을 따로 만들려니 너무 귀찮았다. 그러던 중 ABC라는 언어를 알게 되었다. 무한정밀도 연산을 지원하는 언어라는 점이 무엇보다 매력적이었다. 예를 들어, 1/(2**100)을 변수 x에 넣은 다음, 1/x를 출력하면 \(2^{100}\)의 결과를 그대로 보여준다.

ABC 덕분에 석사 논문에 실을 계산을 무사히 해낼 수 있었다. 나중에 다시 보니 중간에 계산 실수를 해서 결과가 좀 이상하긴 했지만.

이 재미있는 언어를 소개해야겠다는 생각에 하이텔 프로그래밍 동호회 자료실에 ABC 언어 인터프리터를 올리기도 했지만 아무도 관심을 갖지 않았다. C 같은 초강력 언어가 인기를 끌던 시대에 ABC처럼 장난감 같은 언어에 관심을 가지는 사람이 없는 건 너무나 당연한 일이었다.

6. 실행 가능한 의사 코드 Python

인터넷 시대가 되면서 홈페이지에서 cgi를 처리하는 PERL 같은 언어도 구경해 보았지만, 너무 어려워 보여 엄두가 나지 않았다. 그냥 C 잘 쓰면 되지라는 생각이었다. 그런데 뭔가 간단한 프로그램을 짜기에 C는 너무 불편했다. ABC처럼 무한정밀도 연산을 할 수도 없었고. 이럴 때 쓸만한 간단한 프로그래밍 언어가 없을까 궁금해졌다.

어려서부터 여러 컴퓨터 프로그래밍 언어에 관심이 조금 있다 보니, 새로운 언어가 무엇이 있나 기웃기웃하다가 Python이라는 언어를 알게 되었다. 내가 원하던 무한정밀도 연산이 가능할 뿐만 아니라, 문법도 너무나 명쾌해서 "실행 가능한 의사 코드"라는 말이 어울리는 언어였다.

Python을 처음 쓸 때, C에서 블럭을 { }로 묶는 것과 달리, 들여쓰기로 블럭을 만드는 것을 보고, 어쩐지 ABC와 비슷하다고 생각했는데, 나중에 알고 보니 Python을 만든 Guido van Rossum이 ABC 언어 팀에서 같이 일한 적이 있다고 한다. 그러니까 나는 Python을 만날 수밖에 없는 운명?

7. 바둑 프로그램 만들려고 배운 PHP

원대했던 처음 계획은 MSN 메신저로 바둑을 두는 것이었다. 바둑 사이트에 접속해서 바둑을 두려니 시간 문제가 커서, 메신저에 좌표를 입력하면 바둑판이 텍스트로 출력되는 형태를 생각했는데, MSN 메신저의 글자수 제한 때문에 포기했다. 그 대신에 웹에 바둑판을 보여주고, 아무나 아무 때나 둘 수 있으면 어떨까 하는 아이디어가 떠올랐다. 문제는 이런 프로그램을 돌릴 웹 서버.

그 무렵 내가 운영하던 퍼즐 홈페이지가 있던 웹 서버가 있었다. 후배가 관리하던 컴퓨터였는데, 무슨 언어가 깔려 있나 보니 PHP뿐. Python이라면 금방 만들 수 있을 텐데, 상황이 이렇다 보니 그냥 PHP로 만들기로 했다. 사실 바둑 프로그램의 운영 방식을 생각하면 PHP가 가장 적절한 선택이기도 했다. 강력한 기능은 별로 필요없고, 웹의 요소만 활용하면 충분했으니까.

그래서 한 줄 한 줄 책 보면서 만들었다. 처음 쓰는 언어라 시행착오도 무지하게 많았지만 결국 완성해서 잘 두었다. 나중에 후배가 관리하던 서버가 없어지면서 이 바둑 프로그램도 끝이 났는데, 그냥 없애기 너무 아까워서 프로그래머인 동생에게 넘겼다. 내가 만든 프로그램은 온갖 땜질에 엉망진창이었는데, 동생이 깔끔하게 잘 다듬어서 지금도 잘 돌아가고 있다. 참고도 기능까지 넣었으니 과연 프로는 다르다.

내 퍼즐 홈페이지에도 PHP로 온갖 기묘한 짓(?)을 많이 해 놓았다.

8. 홈페이지 제작을 JavaScript도 쓸 줄 모르는 회사에 맡기다니

홈페이지 만들다 보면 JavaScript는 어느 정도 만지게 되니, 이것도 내가 써 본 언어라 할 수 있겠다. 학과 홈페이지에 내 소개를 넣으려고 보니, 어떤 회사에서 만들었는지 HTML 코드가 완전 개떡이었다. 싹 정리하려고 보니 PHP도 없고, 그나마 쓸 수 있는 게 JavaScript. 그래서 교수 이름, 전공, 사진 파일명 등등을 넣으면 일관된 형태로 출력하는 함수를 만들어서 코드 길이를 반 정도로 줄였다.

9. 그밖에

가끔 재미 삼아 어떤 컴퓨터 언어가 있는지 구경하곤 하는데, 어떻게 돌아가는지 구경 삼아 설치했다가 지운 언어가 몇 가지 있다.

하이텔에 동호회도 있었고 프로그래밍 연재도 되었던 Forth. 이 언어는 <마이크로소프트웨어>에서도 연재를 했다. Forth는 후위연산 방식을 쓰고 있어서 우리말 어순과 잘 맞는다는 점에 착안하여, 명령어를 한글로 바꾼 "늘품"이라는 언어가 개발되기도 하였다.

유명한 김창준 님 덕분에 알게 된 언어 J. 알고 보니 Iverson의 APL을 사용가능하도록(?) 바꾼 것이라 할 수 있었다. APL도 그렇지만 J는 너무 어려웠다. 생각을 그대로 타이핑할 수 있다고 하는데, C 스타일에 찌든(?) 나에게는 너무 어려웠다.

논리 퍼즐을 푸는 데 적합한 언어인 Prolog. 역시 머리가 굳은 건지 제대로 된 프로그램을 짜기는 어려웠다.

굳이 따지자면, 수학 논문 쓸 때 사용하는 (La)TeX도 프로그래밍 언어의 일종이라 할 수 있겠다. 그냥 수식 처리하고 문서 형태 맞추는 정도만 배워도 충분하지만, TeX 코드를 잘 활용하면 재미있는 결과를 많이 얻을 수 있다. 요즘 TeX에서 그림 그리는 방식의 표준이 되어가고 있는 PGF/TikZ도 프로그래밍 언어의 일종인 셈이고, 역시 그림 그리는 프로그램인 MetaPost도 마찬가지.

여기에 제대로 다시 공부해야 할 언어로 Mathematica를 들어야겠다. 그냥 그때그때 인터넷 뒤져가며 프로그램을 짰더니 아직도 Mathematica 프로그램은 영 익숙하지가 않다. 명색이 수학 전공이면서 Mathematica 하나 제대로 못 쓴다니 부끄러운 일이다.









 
반응형

'Other interests' 카테고리의 다른 글

맥 OS 업데이트하다 먹통될 때  (8) 2015.08.03
John McCarthy  (0) 2011.10.25
DMR  (1) 2011.10.13
iSad  (1) 2011.10.06
고문치사  (2) 2009.05.28
:
Posted by puzzlist