공장에서 쿠키를 굽는 과정을 프로그래밍적으로 표현한다고 해보자. 이를테면 함수 a는 밀가루를 입력받아 밀가루 반죽을 출력하고 함수 b는 밀가루 반죽을 입력 받아 오븐에 구운 후 완성된 쿠키를 출력한다. 각각의 함수에는 반죽을 하는 힘의 세기나, 온도, 굽는 시간 등 구체적인 지침과 명령들이 포함 될 것이다. 엄밀한 검토 후 일단 함수 a와 b를 완성한 다음부터는 의심의 여지없이 함수 a와 b를 사용할 수 있다. 즉, 함수가 구체적으로 무슨 원리로 어떤 일을 하는지 신경 쓰지 않고 단지 어떤 입력을 주었을 때 어떤 결과물이 나오는 지만 정확하게 알고 있으면 된다. 심지어 함수 a, b를 합성한 새로운 함수 c를 정의 함으로써 밀가루를 입력 받으면 바로 쿠키가 출력되도록 할 수도 있다. 맛있는 쿠키를 만드는 복잡다단한 과정이 단 하나의 함수로 표현 될 수 있는 것이다. 이를 프로그래밍 용어로 표현하자면 구현(Implementation)을 감추고 추상적인 작동 방식(Abstraction)만을 기억하는 것이다.
이러한 개념을 수학 과목을 공부하는데도 적용시킬 수 있을 것 같다. 이를테면 미분을 공부할 때 공식에 대한 증명의 과정이 필요할 것이다. 이는 위에서 함수 a, b를 만들 때 엄밀한 검토를 하는 것에 대응된다. 증명을 통해 공식이 논리적으로 무결하다는 것이 확인되면 그 다음부터는 의심의 여지 없이 공식을 쓸 수 있다. 내가 수학을 공부하면서, 특히 미약한 정도나마 대학 과정의 수학을 공부하면서 힘들었던 것이 있다. 복잡한 공식, 정리들을 내가 스스로 증명까지 다 해놓고서도 이해가 가지 않는 느낌을 받을 때 그대로 그 공식을 그대로 활용해도 좋은지의 문제였다. 특히, 하나의 정리를 바탕으로 다른 정리를 도출하는 식으로 여러 단계의 거쳐 나온 정리의 경우 도저히 전체 구성을 직관적으로 이해할 수가 없어 활용하기가 두려웠다. 내가 이러한 두려움을 떨쳐 낼 수 있도록 도와준 것은 다름아닌 프로그래밍 경험이었다.
현실에서는 아무리 간단한 프로그램이더라도 먼저 수많은 함수를 정의해 놓고 그 함수들을 호출하는 식으로 작동한다. 여러 함수를 내가 계획한 실행 흐름에 맞추어 적절하게 호출되도록 배치할 때 각각의 함수의 구체적인 구현까지 알고 있을 필요는 없다. 단지 그 함수가 어떤 일을 하는지 추상적인 개념만 가지고 있으면 되는 것이다. 프로그램이란 까다로운 것이어서 1만줄의 코드 중에서 점 하나의 오타만 있어도 실행이 제대로 이루어지지 않는다. 하지만 각각의 함수가 어떻게 작동하는지 기억을 못하더라도 무엇을 하는지만 잘 파악하고 있다면 충분히 오류 없는 1만줄의 코드를 짤 수가 있다. 처음에는 내가 만든 코드가 정말로 돌아갈 때 눈앞에서 보고서도 믿지는 못했는데 하다 보니 익숙해지게 되더라. 오늘 간만에 수학공부를 하였는데 수학에 대한 거부감이 확 가신 것을 문득 깨닫고 매우 놀랐다. 만약 수학 공부를 하는데 나와 비슷한 문제를 겪고 있는 사람이 있다면 프로그래밍 공부를 할 것을 추천한다. 수학에서 공식을 활용하는 것은 결국 프로그래밍에서 잘 짜인 라이브러리(일종의 미리 정의된 함수들의 집합)를 활용하는 것과 별반 다르지 않다.