1.

컴퓨터 언어 중에 함수형 언어라는 게 있다. Lisp, ML, F# 등의 언어가 여기에 들어가는데, 이 언어들은 아주 재미있는 특징을 가지고 있다. 첫 번째는 컴퓨터 전공자들이 이 특이한 언어를 배우느라 고생을 좀 한다는 것이고, 두 번째는 그렇게 고생을 해서 배워 놓고서는 강의실 밖으로 가면 이 언어를 안 쓴다는 것이다. 농담 아니고 정말 하나도 안 쓴다. 산업 현장에서 쓰는 언어들은 c나 java 같은 언어들, 소위 "기계식 언어"가 거의 다기 때문이다1. 그렇다고 해서 이 언어가 배워도 그만 안배워도 그만인 것도 아니다. 예를 들어 우리 학교는 관련 수업이 아예 전공 필수라, 수업 안 들으면 졸업을 못 한다(!).

수업을 듣다 보면 과장 안하고 정말 교수님이 이렇게 보인다(...).

도대체 왜 이 고행을 하는 것일까? 실은, 나도 처음 이 언어를 배울 때 고생을 좀 심하게 했다. 그러고도 안 써서 그때 배운 것들을 거의 다 까먹었다. 하지만 나는 지금, 프로그래머라면 누구나 예외없이 함수형 언어를 배워봐야 한다고 주장한다. 나도 당해봤으니 니들도 당해보라는 얘기가 아니다. 함수형 언어를 배우는 것은 단순히 언어 사용법을 암기하는 것 이상이기 때문이다.

2.

컴퓨터 프로그램은 영어나 한국어로 쓴 글들과 마찬가지로 인간의 생각을 표현한 것이다. 여기서 문제가 되는 것은 바로 "생각하는 방법"이다. 프로그램 작성에 접근하는 사고방식으로는 기계식 사고와 함수형 사고가 있다. 기계식 사고는 처음 배우기엔 쉬워 보이고 아주 직관적이다. 하지만 문제가 있다. 같은 기계식 언어로 프로그램을 짜도 함수형으로 생각하고 짠 프로그램과 기계식으로 생각하고 짠 프로그램이 다르다는 것이다. 함수형 사고를 바탕으로 짠 프로그램들이 기계식으로 짠 프로그램보다 훨씬 더 버그가 적으며 테스트하기 좋고 다른 사람이 알아보기도 쉽다. 그래서 소위 프로그램 좀 짠다는 사람들은 정도 차이는 있지만 대개 함수형으로 생각하는 경우가 많다.

재미있는 건, 이 사람들의 상당수가 함수형 사고라는 말을 모른다는 것이다. 사실 나도 한달 전까지 함수형 사고라는 말을 몰랐다. 하지만 나는 매일 함수형으로 생각하면서 프로그램을 짰다. 나는 대체 어디서 저걸 배운 것일까? 정답을 말하자면, 앞에서 말한 바로 그 수업 시간에 배웠다. 기계식 언어는 기계식으로 생각해도 쓸 수 있고, 함수형으로 생각해도 쓸 수 있다. 하지만 함수형 언어는 함수형으로 생각해야만 사용할 수 있다. 과제를 하면서, 나는 익숙하지도 않은 함수형 사고를 하느라 끙끙대야 했다2. 시간이 흐르면서 그 때 배웠던 구체적인 문법들은 잊혀졌지만, 그 과정에서 암묵적으로 배운 함수형으로 사고하는 습관은 머릿속에 남았던 거다.3

3.

우리는 보통 명시적으로 배운 것들에 매우 집착하는 경향이 있다. '나는 함수형 언어를 배웠어' 이런 식으로 말이다. 하지만 어떻게 보면, 명시적으로 배우는 것들은 대개 사다리와 비슷하다. 사람이 사다리에 매달리는 것은 그게 좋아서가 아니라, 지붕에 올라가기 위해서다. 함수형 사고를 익히고 체화시키기 위해서 함수형 언어를 배우는 것과 마찬가지다. 이렇게, 명시적인 지식은 진짜 필요한 암묵적인 지식을 체득하기 위한 과정에 불과한 경우가 많다.

일단 지붕에 올라가고 나면, 사다리 같은 건 이제 아무래도 좋게 된다. 실제로 나는 함수형 언어 문법을 일치감치 다 까먹었다. 하지만 전혀 문제가 되지 않는다. 중요한 건 함수형으로 사고하는 능력이지 인터넷에 굴러다니는 시시콜콜한 문법 사항 같은 게 아니기 때문이다.

사실, 세상의 거의 모든 지식들이 이런 식이다. 철학을 배웠다고 해서 온갖 시시콜콜한 주장과 논증들을 다 기억하지는 않는다. 하지만 논리적으로 생각하는 능력은 남는다.4 역사를 공부했다고 해서 역사상의 자잘한 사건들을 연대기순으로 기억하지는 않는다. 하지만 사물이 지나온 내력을 통해 현재와 같은 모습이 된 내력을 판단하는 능력은 남는다. 컴퓨터 프로그래밍을 배웠다고 해서 전문 프로그래머만큼 프로그램을 잘 짤 수도 없고, 프로그램 언어의 문법도 다 기억하지 못한다. 하지만 자기가 생각하는 바를 기계가 알아들을 수 있을 정도로 명확하게 표현하는 능력은 남는다.5 회계학 수업을 들었다고 해서 대차대조표의 항목들을 모두 기억하지는 않는다. 하지만 기업 내부에 얼마나 다양한 특성을 가진 자산이 있으며, 이들이 어떤 식으로 상호 연계되어 있는지6에 대한 개념은 머릿속에 남는다. 지붕이 뭐가 됐건, 중요한 건 사다리가 아닌 것이다.

4.

진보신당에서 최근 펴낸 공약집 내용을 보다가 뒤집어졌다. "미적분 같은 건 선택으로 하고 모든 학생이 악기 같은 걸 하나씩 연주할 수 있도록 교육과정을 개혁하겠다." 란다. 커다란 사다리가 보기 싫으니 치워 버리겠다는 얘기다. 죄송한 얘긴데, 나도 그 사다리가 별로 마음에 들지 않는다. 그 사다리 없어도 먹고 사는 데 지장 없다. 하지만 그 사다리가 없으면, 근대 이후 인간 세상을 혁명적으로 발전시켰던 사고 방식에 대해 어린 학생들에게 설명할 도리가 없다. 지붕 위로 못 올라간단 말이다.

그런데 내가 좋아하는 악기도 가르쳐 줄라나? 이건 한국에서 가르치는 데가 한 곳 뿐인데(...)

물론 그 사다리, 문제 많다. 지붕 위로 머리를 내밀어도 모자랄 판국에 사다리 오르락 내리락만 하는 교육도 한심하고, 그 지붕 말고 올라가야 할 다른 지붕도 많은데 거기에만 붙들려 있는 꼴도 못 봐주겠다. 하지만 그것이 사다리를 치워 버려도 되는 이유가 되지는 못한다. 아니, 그보다 그 사다리가 왜 필요한지에 대해 생각이라도 해봤는지 궁금하다. 생각을 해 봤다면 저런 소리 못 할 것이고, 생각 안하고 저런 걸 공약집에 넣었다면 공당으로서의 자격이 없을 터다.

5.

아마 많은 사람들이 헬스장에서 운동을 할 게다. 하지만 우리가 헬스장에서 아령을 드는 이유는 실생활에서 아령을 들 일이 있어서가 아니라, 그렇게 함으로써 근육이 붙고 더 건강해지기를 바라기 때문이다. 학문도 이와 그리 다르지 않다. 아령이나 미적분학이나, 결과적으로는 그저 사다리에 불과한 것이다. 몸을 위한 사다리는 마다하지 않으면서 머리를 위한 사다리는 치워 버리고 싶다는 건, 머리는 팔다리보다 덜 중요하다는 이야기인가?

사다리는 뭐가 됐든 대체로 거추장스럽게 크기 때문에, 치워 버리고 싶은 생각이 드는 건 이해한다. 하지만 그거 없으면, 지붕 위로 못 올라간다. 그러니까 제발, 사다리는 생각하지 마.


  1. 이 글에서는 함수형 언어와 기계식 언어 두 가지만 언급하지만, 실제로는 몇 가지 종류의 언어가 더 있다. 하지만 그 부분에 대해서는 언급하지 않기로 한다. 

  2. 정확히 이야기하면 시험은 없고 과제만으로 채점하는 수업이었는데, 차라리 시험 봤으면 좋겠다는 생각이 굴뚝같았다. 

  3. 사실 여기서 함수형 언어에 대한 설명은 매우 비학문적인 범위에 초점을 맞춘 설명이고, 학문적으로는 조금 그 의미가 다르다. 

  4. 괜히 외국계 기업들이 철학 전공자를 좋아하는 게 아니다. 

  5. 괜히 게임회사에서 기획자들에게 프로그램 공부하라고 하는 게 아니다. 게임 기획이란 쉽게말해 게임의 룰을 정하는 작업인데, 이게 두리뭉실하면 프로그램 구현 중 문제가 생기거나 밸런스가 붕괴될 위험이 높다. 같은 이유에서 컴퓨터를 다룰 일이 많은 이공계생 대부분도 어느 정도 프로그래밍을 배운다. 

  6. 실제로 내가 회계원리를 가르쳐 주신 교수님은(나이가 좀 많으셨는데) 가능하면 이런 쪽으로 많이 설명해 주셨다. 지금도 감사한다.