링크드 리스트를 추억하며…

@codemaru · June 27, 2012 · 10 min read

중학교 2학년 때였다. 그 때까지 베이직만 배웠던 나에겐 실행 파일을 만들어보고 싶은 열망이 있었다. 그리고 실행 파일을 만들기 위해서는 컴파일러 언어라는 것을 배워야 한다는 것도 알게 되었다. 서점에 C언어 책이 많았던 시절이었다. 그 중에 내가 살 수 있는 책은 딱 두 종류 밖에 없었다. 무료 컴파일러가 번들로 끼워져 있던 책이 두 가지 밖에 없었기 때문이었다. 하나가 맥가이버 C언어였던가 그랬고, 다른 하나는 제목은 생각나지 않는데 PCC인가 하는 컴파일러가 들어있던 책이었다. 난 PCC가 들어있던 책을 샀다. 사실 맥가이버 C언어는 서점을 들락날락 하면서 거의 다 봐버렸고 좀 더 비싸기도 했기 때문이었다.

PCC가 들어있던 그 책은 자료형에 대한 설명으로 시작하는 책이었다. 잠수함 게임을 만드는데 뭐 미사일의 공격력은 정수여야 하니깐 int를 써야 하고, 잠수함 이름은 문자라서 char를 쓴다는 식의 비유로 시작하는 책이었던 것 같다. 나중에 느낀 사실이지만 입문서 치고는 참 괜찮았던 책이었다.

그 책으로 C언어를 좀 배우고는 만들고 싶은 게 하나 생겼는데 MDIR 같은 프로그램이었다. MDIR은 도스 시절 거의 국민 유틸리티로 통했던 파일 관리자였다. “C로 하드웨어 주무르기”라는 책을 통해서 나름 시스템 프로그래밍에 대해서도 눈을 떴던 나는 금방이라도 MDIR을 만들 수 있을 것 같은 느낌이었다. 그래서 거침없이 코딩을 시작했다. 하지만 안타깝게도 500줄을 타이핑 하기도 전에 코딩을 멈출 수 밖에 없었다.

MDIR 짝퉁을 만들면서 한 가지 궁금한 게 생겼던 것이다. 디렉터리마다 파일 개수가 다 다른데 그걸 어떻게 저장할까, 라는 질문이었다. 그 당시 배열만 알고 있던 나에게는 무척 궁금한 질문이었다. 내가 3000개를 지정했는데 파일이 4000개가 있으면 어떡하지, 라는 생각이었다. 물론 malloc같은 동적 할당을 사용해서 복사를 하면 되는데 그건 또 답이 아닌 것 같은 느낌이었다. 난 그 질문을 한참을 가지고 있었다. 그리곤 500줄에서 진도는 더 나가지도 못했다.

그 질문에 답을 찾기 위해서 대형 서점의 컴퓨터 코너에 있는 책은 정말 거의 다 읽다시피 했다. 그런데 그 어느 책에도 답이 나와 있질 않았다. 물론 사실 답은 지천으로 널려 있었지만 단지 내가 찾지 못했을 뿐이었다. 그 답을 중학생도 이해할 수 있게 써 놓은 책은 그리 많지 않았던 것이다. 그러다 한날 “PC Tools 따라하기”라는 책을 통해서 그 마법 같은 방법을 배웠다. 링크드 리스트였다. 충격과도 같은 방법이었다. 동시에 난 왜 이 방법을 생각하지 못했을까라는 자괴감이 들었다.

링크드 리스트를 배우고 나서도 난 MDIR을 만들지 않았다. “PC Tools 따라하기”라는 책에 그 모든 것이 나와 있어서 재미가 없어졌기 때문이었다. 책의 예제 코드만 따라해도 반쪽짜리 MDIR은 만들 수 있을 정도로 굉장한 책이었다. 그러다 djgpp의 allegro라는 게임 라이브러리에 빠져서 한동안 게임 프로그래밍을 했었던 것 같다.

난 여기서 반쯤은 위안을 얻기도 하고 반쯤은 좌절하기도 한다. 위안을 얻는 부분은 내가 배열이 정답은 아니라는 사실을 본능적으로 알았다는 점이다. 그럼에도 좌절하는 부분은 링크드 리스트를 절대로 내 머리로는 생각해 낼 수 없었다는 사실이다. 알고 나면 그렇게 어려운 내용이 아니기에 더 좌절감이 큰 것 같기도 하다.

그 이후로도 난 상당히 오랜 시간 프로그래밍을 했는데 내가 가지는 장점과 단점은 그 일화에 거의 모두 다 들어있다는 느낌이 든다. 난 프로그래밍적인 문제에 대한 직관은 뛰어난 편이다. 답을 알진 못하더라도 답이 있을지 없을지, 내지는 이 방법이 옳은지 틀린지를 판단하는 능력은 좀 좋다는 말이다. 반면 역시 그리 똑똑한 편은 아니다.

우습게도 나중에 알게 된 사실이지만 초창기 MDIR은 배열을 사용해서 디렉터리 목록을 관리했다고 한다. 그래서 지정된 배열의 원소 개수를 초과하면 해당 파일이 조회되지 않는 문제가 실제로 있었다는 이야기를 들은 적이 있다. 그 이야기를 듣고 난 큰 교훈 하나를 깨닳았는데, 바로 분야에 따라서는 오덕스런 꼼꼼함과 집요함보다는 느슨한 실용성이 더 중요할 수도 있다는 점이었다.

덧) 가끔 뜨문뜨문 아빠 생각이 날 때가 있다. 중학교 때 이야기를 쓰고 나니 그 때 생각이 난다. 중학교 때 난 난생처음 내 컴퓨터를 가지고는 신나서 밤새 컴퓨터를 하곤 했었다. 종종 아빠는 내 방에서 같이 잠을 잤는데, 그런 날도 난 아랑곳하지 않고는 컴퓨터를 늦게까지 했다. 그러던 어느 날이었다. 새벽에 컴퓨터가 고장나서 디스크를 고치는 중이었다. 지금 생각해보면 진짜 욱긴데 scan disk같은걸로 치료를 하는데 백업을 디스켓에 하겠냐고해서 난 멍청하게 하겠다고 한 것이었다. 새벽 늦게까지 컴퓨터는 미친듯이 디스켓을 갈아 끼우라고 시켰고, 난 또 그걸 꼬박꼬박 했다. 컴퓨터가 새벽에 디스켓에 뭔가를 쓰는 소리는 분명 잠을 자는 아빠한테는 엄청 거슬리는 소리였을텐데 아빠는 나에게 아무 말도 하지 않았다. 내가 컴퓨터 프로그래머가 되는데 가장 큰 사건이 무엇이었냐고 물으면 난 이 이야기를 하곤 한다. 웃기지만 아마 그 때 아빠가 머라고 했다면 난 프로그래머가 안됐을 수도 있었을 것 같기 때문이다. ㅋㅋㅋ

나이가 들어서도 그랬다. 엄마는 항상 말한다. 치대가라. 약대가라. 졸업할 때는 공무원 해라. 대기업 가라. 그래도 아빠는 항상 나의 편이었다. 내가 하는 일을 잘 아시진 않았지만 언제나 아들이 하는 일이 멋있어 보인다며 말이다. 글을 써놓고 보니 그런 아버지가 유난히 생각난다. 무에 그리 급하셨는지… ㅠㅜ~ 아버지, 좋은 곳에 잘 계시죠?

 1  0

 

@codemaru
돌아보니 좋은 날도 있었고, 나쁜 날도 있었다. 그런 나의 모든 소소한 일상과 배움을 기록한다. 여기에 기록된 모든 내용은 한 개인의 관점이고 의견이다. 내가 속한 조직과는 1도 상관이 없다.
(C) 2001 YoungJin Shin, 0일째 운영 중