프로그래밍을 좋아하는 사람이라도 한 번쯤은 code 를 쳐다보기만 해도 지겹고 어질어질 해 질 때가 있다. 이러한 증상이 기계의 연료가 모두 불타버려 작동을 못하는것과 비슷하기 때문에 번아웃이라 한다. 매일 프로그래밍만 하는 개발자들에게는 굉장히 자주 발생하는 질병이다. 그런데 프로그래밍 자체는 좋은데 백준만 보면 번아웃 증상이 올 때가 있다. 그럴 때는 “백준 번아웃”을 의심해 볼 필요가 있다.
백준에서 문제를 해결하는 것을 우리는 PS(Problem Solving)라 한다. PS는 엄연히 말하면 프로그래밍 보다는 수학 문제 풀기에 가깝다. 기초적인 구현 능력만 받혀준다면 문제 해결을 위한 중요한 요인은 주어진 시간내에 올바른 답을 도출 할 수 있는 알고리즘을 작성 할 수 있는지이다. 복잡한 계산을 할 필요가 없다는 것 외에는 논리적으로 문제를 해결하기 위한 타당한 풀이법과 식을 통해 답을 도출하는 수학과 크게 다를 점이 없다. 이러한 PS는 좋은 개발자가 되기 위한 필수 소양을 기르기에 굉장히 좋은 방법이다. 프로그래밍 문제를 해결하는 과정에서 실제 개발시에 발생하는 문제들을 해결하기 위한 사고력을 기를 수 있다. 다양한 알고리즘을 배우고 알고리즘을 적재적소에 배치해가는 과정에서 정보척 처리 역량도 기를 수 있고, 복잡한 문제를 해결하며 프로젝트 관리 기법도 터득 할 수 있다.
하지만 우리가 아무리 수학문제가 우리에게 좋다는 것을 알아도, 몇년동안 매일매일 수학 문제만 풀다 보면 수학 덕후가 아닌 이상 정신이 피폐해진다. PS도 동일하다. 특히 프로그래밍에 대한 환상을 가지고 들어온 사람이면 더 그렇다. 이런 사람들에게는 과도한 백준은 오히려 독이 될 수도 있다. 정보과목을 어려워 하거나 싫어하는 친구들에게 이유를 물어보면 십중 팔구 PS 문제 해결을 어떻게 공부해야하는지 전혀 감을 잡지 못했다고 대답한다. PS 문제의 본질을 제대로 잘 알지 못하면서 “암기 코딩”으로 문제를 해결하니 당연히 재미가 있을 수가 없고 어려울 수 밖에 없다. 그러면 프로그래밍이 재미없다는 생각이 들게 되고, 공부하고 싶다는 의욕이 사라져 더더욱 암기코딩을 하게 되는 악순환의 고리에 빠지게 된다. 그럼 과연 이 친구들은 정보에 재능이 없는 것일까?
작년 1학년때, 인공지능 기초 과목에서 프로그램 제작 수행평가를 진행하는 친구들을 보며 정말 놀라웠다. 정보를 잘하는 친구들은 물론 엄청난 프로그램을 개발했지만, 성적이 낮거나 심지어 수업 이해에 어려움을 가지는 친구들도 실생활이나 자신의 전공 과목에서 프로그래밍으로 문제를 찾고, 해결을 위한 적절한 알고리즘을 만들고 구현하는 것에 성공하였다. 심지어 낮은 퀄리티가 아닌 실제 Product 같은 높은 상품성 가치가 있을 정도의 프로그램을 개발한 친구들도 있었다. 나는 이러한 능력을 갖춘 친구들이 백준문제를 풀며 번아웃이 와 정보를 포기하는 것을 보며 너무나도 안타까웠다.
이 글을 읽으며 “혹시 나인가?” 라는 생각이 드는 친구들에게 “프로그래밍 = 백준” 이 아니라는 것을 꼭 알려주고 싶다. 장래 전공으로 컴퓨터 공학을 생각하는 친구가 아니라면 알고리즘은 사실 생각보다 중요하지 않다. 수업 내용을 이해할 정도면 충분하다. 그 대신 백준에서 문제를 찾는 것이 아닌 자신이평소에 귀찮았거나 불편하다 느꼈던 문제를 해결하려 해 보자. 저절로 기존에 배웠던 알고리즘을 사용 하게 될 것 이고, 흥미를 잃지 않으면서 알고리즘을 습득하고 단련 시킬 수 있게 된다.