극단적인 착각 – 알고리즘에 대한 과도한 칭찬과 과도한 멸시

개소리 오브 개소리 – CS Fundamental, 자료구조, 알고리즘 깊이 몰라도 된다는 개소리에서 적은 글이랑 성격은 비슷하지만, 좀 다른 이야기를 하고 싶다. 페이스북에다가도 똑같이 적었는데, 트위터로 날 접하는 사람들한테도 좀 들려주고 싶다.

알고리즘… 이게 언제부터 막 그렇게 거창한 거였나 싶었다.

그냥 단순 서비스 개발을 하면서도, 기술서에 나와있는 내용이나 기술 협의를 하면서 나온 내용에 대해서도 우리가 어떤 식으로 구현할 수 있을까를 머릿속에서 짜내는 것 또한 알고리즘이다. 그걸 수학적으로 풀어 써야지만 알고리즘이라고 한다면 프로그래머는 죄다 수학자여야만 하는 건가?

알고리즘을 공부하면서 생각의 폭이 넓어지는 것이지, 굳이 “정답은 하나입니다!”와 같이 정답만 찾아 헤메는 수능 공부를 하는 게 아니란 말이다. 별 것 아닌 생각으로도 상책을 내어 해결할 수 있다면, 굳이 복잡한 알고리즘 갖다 붙일 이유 또한 없는 거 현업에서 개발해본 사람이라면 누구나 다 안다. 오히려 조직 플레이를 잘 하라, 협업을 위한 기술들을 더 잘하자고 하면 더 하지. 근데, 뭔 문제 생겼을 때 해결하려는 수단 중 별 거 아닌 듯한 생각, 의외의 생각들이 있다. 그런 조금이나마 더 유연한 생각, 더 해볼려고 하는 노력에서 유연한 사고에서 나오는 거라는 것 정도는 이미 알고 있는 거 아닌가? 그거 땜에 조금이나마 더 오픈소스들을 보고 참고하고, 어느 정도의 구조적인 알고리즘까지 조금이나마 더 이해하려는 거 아닌가? 왜 그런 것 까지 싸잡아 무시하는 거지?

대학에서 알고리즘 수업을 수학적 증명이니 뭐 그딴 식으로 가르치는 건, 그냥 그 교수들이 그렇게 가르치는 것 뿐이다. (근데 그걸 맹신하는 일부 교수들이 있어서 문제.) 어차피 맨 첫 시간에 잠깐 이야기 한다. 아니면 알고리즘들 책 앞쪽 부분에도 똑같은 이야기들이 있다. “알고리즘은 문제 푸는 해결력을 높이는 데 필요합니다.”라고 적힌 책들 많다. 심지어 Art of computer programming에서도 나와있는 거지만 “프로그래밍 접근법에 대한 참고 내용입니다.”, “수학적 증명이 어려우면 그냥 넘기셔도 됩니다.”라고 나와있다. 단순히 생각 넓히기일 뿐이다.

근데 그걸 프로그래밍에 대한 일종의 종교적 믿음? 거기에 대한 불편함? 하. 그런 믿음, 그런 불편함. 인공지능 기술 이전에 이미 미친듯이 진행된 프로그래밍 자동화 기술들 갖다 들이밀면 단 한방에 무너질 믿음이다. “그럼 당신보다 이 자동화 기술이 더 발전하는 게 효율적이겠네요?”라고 하면 뭐라고 할 껀가? 그 툴 잘 쓰면 된다고 반박할껀가? 그런 레벨이면 이미 몸으로는 CRUD하고 있는 본인 스스로를 부정하고 있는 거나 마찬가지인 거다. 아니면 이야기가 너무 진행되었다는 식으로 회피하겠지.그런 불편함 또한 갖다 버릴 고정관념이다.

사실 알고리즘에 대한 경고는 일종의 미래에 대한 경고다. 생각이 굳어지는 그런 개발자들이 되지 말자는 거지 그게 뭐 “당신은 Art of computer programming에 나오는 문제 하나도 풀지 못하는 사람이니 개발 할 가치가 없습니다.” 라고 하는 그런 게 아니다. 그런 고차원적 수학을 요구하는 건 아니지만, 그렇다고 해서 그게 뭐 아예 수학을 못해도 된다고 직결되고 하는 그런 건 아니다.예상 외의 것일지도 모르지만, 이미 우리는 프로그래밍 언어를 공부할 때부터 필요에 의한 최소한의 수학적 사고를 같이 익히면서 시작한다. 그게 몇 년 단위로 계속 프로그래밍 언어 몇 가지를 써보고 하면서 본인 스스로가 모를 뿐이지. 그리고 그 정도의 사고도 못하면 다른 사람과의 협력 따윈 기대할 수도 없다.

알고리즘에 대해서 너무 극단적으로 몰고 가지 말자.