※ 이 글은 예전 Tumblr 블로그에 썼던 글을 이전한 것입니다. 오래된 글이라 현재 블로그의 문체와 일치하지 않습니다.


※ 이 글은 버그가 좀 있더라도 돌아가는 간단한 프로그램(구구단 같은거라도)을 만들 수 있는 사람에 대해 말하는 것이 아닙니다.

내 주변엔 코딩을 못하는 사람이 많다. 어느 정도로 못하냐면 간단한 별찍기나 구구단을 못 만든다. 언어가 어려워서도 아니다. C, JavaScript, Visual Basic, C++, PHP 어느 언어를 가져다 줘도 짜지 못한다. 그런 사람들은 나를 외계인 보듯이 하면서 자기도 코딩을 잘 했으면 좋겠다는 말을 하곤 하는데 몇 년이 지나도 실력이 전혀 진보하지 않는걸 보면 뭔가 문제가 있다는 생각이 든다.

한번은 코딩이 어렵다고 하는 친구에게 코딩에 정 힘들면 코딩 관련 일은 외주를 주는게 차라리 심신에 좋을 것 같다고 말한 적이 있다. 불같이 화를 냈지만 내 생각은 딱히 변하지 않았다. 프로그램을 만들기 위해서는 알고리즘 이전에 흐름을 만들 수 있어야 한다고 생각하는데 그 흐름을 만들기 위해서는 어느정도의 일반적으로 널리 쓰이지 않은 사고력이 필요하다고 생각한다. 그 사고력을 가질 수 없다면 프로그래밍은 그저 알 수 없는 알파벳을 나열해서 수수께끼의 동작을 일으키는 흑마술 같은 느낌일 것이다. 그렇기에 이러한 사고가 힘들다면 진작에 포기하거나, 이러한 사고를 하는 과정을 익혀야 한다.

무엇이 그러한 사고방식을 이끌어내줄 수 있을까? 나는 일단 욕구를 느끼고 고민하는 것에서 출발한다고 생각한다. 살아가는데 있어서 필요하지 않다면 생각을 하려고 해도 잘 안 될 것이다. 학교 과제를 내야하니 필요하다고 느끼는 동기는 약하다. 그 문제가 내가 낸 것도 아니고 (학점에는 영향을 주겠지만) 내 삶에 변화를 주지 않기 때문이다. 과제를 안하면 마이너스이고 과제를 해야 기본이라는 생각이 들기에 더욱 심해진다. 학점이 걸려있는 한 과제는 프로그래밍을 하기 위해 필요한 사고력을 키우는데 큰 도움이 못 될지도 모른다. 그럼 뭘 해야할까?

내 생각에는 자신에게 필요한 것을 만들어야 한다. 당장에 필요하니까 만들어야겠다는 욕구를 느껴야 비로소 고민이 시작된다. 옷에 단추가 떨어졌는데 수선을 맡길 수 없다면 자신이 단추를 달기 위해 무엇을 해야하는지 고민하는 것과 같다. 단추를 달려면 무엇이 필요할지, 무엇을 어떤 순서로 해야할지 고민을 하게 된다. 그 순서가 옳지 않을지도 모른다. 하지만 줏어들은 것, 본 것과 자신의 상상력을 동원해서 자기 나름대로의 과정도를 만들고 실행하게 된다. 한 번에 될 수도 있지만 잘 안풀려서 시행착오를 거칠 수도 있다. 그렇게 과정을 거쳐 단추를 달고 나면 “아! 내가 해냈다!” 라는 성취감을 느낄 수 있고 그간의 시행착오가 경험치로 남는다.

프로그래밍도 마찬가지다. 자신에게 필요한 무언가가 필요하다. 학교 과제 말고 자기가 무엇이 필요한지 먼저 생각해봐야한다. 필요한게 없다면 굳이 어렵게 익힐 필요가 있는가 하고 나는 생각한다. 그래도 굳이 배워야겠다면 필요한 것을 생각해봐야 한다. 당장에 밥값을 내야해서 돈을 모았는데 잔돈을 어떻게 나눠줘야 할 지라던가 하는 생활 속 소소한 문제라도 계산기를 두들겨보는 대신 프로그래밍으로 해결해보겠다는 생각을 해봐야 한다. 사실 프로그래밍으로 해결할 수 있는 문제인데도 프로그래밍으로 할 수 있는지 몰라서 모르는거 일수도 있으니까 말이다.

자신의 필요에 의해 만들어진 프로그래밍으로 문제를 풀어보고 그것에서 나오는 성취감을 여러번 느끼고 나면 그 후로는 다른 문제에도 도전할 수 있는 감각이 자라나기 시작한다고 본다. 그 감각 없이 처음부터 덤비자면 어렵고 지겨운 문제일 뿐일 것이다.

그런 관점에서 볼 때, 학교에서 무턱대고 과제를 많이 내주는 것은 학생들의 실력에 그다지 도움이 되지 않을지도 모른다. 문제 몇개를 줄이고 스스로 문제를 설계하고, 그 답을 구하는 과정을 묻는 것이 오히려 더 성장에 도움이 되지 않을까?

그리고 또 한가지 중요한 점은 자신이 프로그래밍을 못한다고 생각하는 이면에는 프로그래밍 언어를 잘못 사용해서 생기는 문제들이 있다. 많은 사람들이 C나 Java로 프로그래밍을 시작하는데 이러한 언어들은 가뜩이나 잘 모르겠는 프로그래밍을 언어 자체의 난이도로 인해 더 어렵게 느끼게 만들 소지가 있다. 학교에서 C나 Java를 요구할지라도 자기 자신의 학습용으로는 다른 쉬운 언어를 선택해야할 필요가 있다. 가령 Ruby, PHP, Python, lua같은 언어들. 좀 더 눈에 보이는 결과를 원한다면 Scratch도 나쁘지 않다. 어렵게 배울 필요 없다. 아무런 근거도 없이 어렵다, 힘들다, 나와는 맞지 않는다는 것은 핑계다. 비전공자도 필요만 느낀다면 할 수 있고, 실제로 멋쟁이 사자처럼1에서 비전공자라도 충분히 할 수 있음을 입증해보였다. 더 이상 자신에게 핑계대지 말자. 코딩을 못 하는게 아니라 해야 할 이유를 모르는 것일 뿐이다.