[일상스케치] 코딩은 어려워

판교, 커피숍. 앉아서 간만에 회사 일이랑은 관련 없는 코딩을 좀 하고 웹서핑을 하고 있다. 옆에 여자 아이도 한 명 앉아서 뭔가를 만들고 있다. 그렇게 한참 지났을 무렵, 그 여자의 남자 친구가 왔다. 어딘가 면접을 보고 온 것 같다. 바로 옆자리 — 전원 있는 자리가 한정적이다 — 들으려고 듣는건 아닌데 말 소리가 커서 귀에 쏙쏙 꼽힌다. 흥분한 남자의 첫 마디. "넌 링크드 리스트, 요이땅 하면 바로 짤 수 있어?" 못짜지라는 말을 기대하고는 묻는 질문처럼 들린다. 여자가 링크드 리스트는 기본 아니냐는 말을 하자, 남자는 재차 말한다. "기본인데, 요이땅 하면 바로 만들 수 있냐고?" …​ 그렇게 한참을 입사 시험 문제에 대한 이야기들이 오간다. 판교 어딘가에 있는 회사의 코딩 시험을 방금 보고 나온 것 같다. 첫번째 문제가 링크드 리스트를 만들어서 그걸로 스택을 구현하라는 문제였던 것 같다. 다음 문제는 피보나치 수열, 팩토리얼 …​ 대화 내용으로 추정컨데 남자 보다는 여자가 프로그래밍을 잘하는 것으로 보인다.

면접도 많이 보고 프로그래머 채용도 더러 해봐서 그런지 대화 내용이 납득이 가기도 하고 일견 또 이해가 되지 않기도 한다. 과연 프로그래머로 일을 하는데 얼마만큼의 지식이 필요한걸까? 프로그래머라는 직업을 가지는 데 필요한 최소 수준의 지식이라는 게 있을까? 라는 생각을 해봤다. 링크드 리스트를 못 만들어도 요즘은 문제가 없다. 잘 만들어진 링크드 리스트는 정말 많다. 스택을 못 만들면 또 어떤가? 푸시, 팝 하면 기똥차게 동작하는 코드들이 널려 있다. 피보나치 수열, 팩토리얼이 뭔지 몰라도 상관 없지 않을까? 재귀호출을 모르면 또 어떤가? 사실 실전에서 그리 사용 빈도가 높지도 않은데 말이다. 그런데 또 반대로 생각해 보면 그렇다. 링크드 리스트도 요이땅 하면 못 만드는 친구가 더 복잡한 건 어떻게 만들 수 있을까? 푸시는 어떻게든 구현했는데, 팝을 구현 못했다는데 팝을 어떻게 만들어야 하는지도 모르는 친구가 현업에서 작성할 코드가 있을까? 재귀호출은 또 어떤가? 그 정도의 복잡함을 시뮬레이션 할 수 없다면 과연 더 복잡한 추상적인 구조는 어떻게 머리속에서 떠올릴 수 있을까?

하지만 세상 일이 그리 단순하진 않을 것이다. 예전의 나라면 단호하게 말했겠지만 지금의 나는 그러지는 못하겠다. 세상이 얼마나 넓은지 예전보다는 조금 더 알게 되었기 때문이다. 유명한 오픈소스 개발자가 트리를 못 뒤집어서 구글에서 떨어졌다는 일화가 한 때 유행했었다. 그때도 비슷한 생각을 했다. 과연 프로그래머로 일을 하는데 필요한 기본적인 지식이라는 게 무엇일까? 나도 구글이든 페북이든 큰 회사들의 코딩 시험에 나오는 문제들을 못 푼다. 예전에 회사에서 그런 시험에 대비하는 책을 사서 본 적이 있었는데 생각보다 문제가 어려웠다. 우리 회사의 시험 문제도 그럴지도 모른다. 문자열 복사 함수를 구현하는 일이 누군가에겐 쉬워도 누군가에겐 '=' 하나로 되는 일이기도 하고 또 누군가에겐 'strcpy’로 되는 일이기도 하니 실제로 포인터를 조작하면서 구현하는게 어려울 수도 있다. 그래도 한 가지 바램이 있다면 그런 생각이 있다. 적어도 요이땅 하면 링크드 리스트를 구현할 수 있는 프로그래머랑 같이 일하고 싶다는 바램…​ 트리를 뒤집는 문제는 좀 더 생각해보고…​

이랬든 저랬든 코딩은 어렵다. 입사 시험에 나오는 코딩도 이렇게 어려운데 현실 세계의 복잡한 문제들을 해결하는 코드들을 작성하는 일은 또 얼마나 어렵겠는가? 알파고 제로가 하루빨리 코딩을 마스터 하는 날이 오기를 희망해 본다. 너무 어려워서 사람이 하기에 적합한 일이 아닌 것 같다. 코딩이 말이다. 물론 이건 나 혼자만의 생각은 아닌 것 같다. 세계에서 손꼽히는 석학인 Knuth 노교수도 자신이 해 본 어떤 일보다 프로그래밍이 어렵다는 이야기를 했었다.

In fact, my main conclusion after spending ten years of my life working on the TEX project is that software is hard. It’s harder than anything else I’ve ever had to do.

TEX 프로젝트에서 10 년을 보낸 후 내가 내린 주요 결론은 소프트웨어가 어렵다는 것입니다. 내가 이제까지 했던 그 어떤 일보다 더 어려워요.

— Donald Knuth
http://www.ams.org/notices/200203/fea-knuth.pdf