의미 구문 자체와 구현되는 순서(로직)까지 외우는 까닭?
김포프(pope)라는 닉네임의 개발자가 있다. 게임 개발업계뿐만 아니라 개발자 중에 유명한 한국인이다. 그가 차린 포프 아카데미의 C언어 강좌 하나를 수강할까 말까를 고민하기를 어느덧 2년, 내년에 C 언어 강의를 듣기로 결정을 미뤘다. 왜냐면 강의 하나가 백만 원인데, 내년 5월쯤 회사에게 복지카드가 발급되면 한 방에 그을 요량이다. 또한 그의 강좌 중 필자가 생각키로 C++ 이 가장 어려울 것 같았는데, 오히려 수강자 후기 평에서 C > 공학용 수학 > C++ > C# 순으로 난이도가 쉽다는 리뷰가 많았다.
그전에 이 개발자가 한 말로 본인은 개발을 좋아하게 된 까닭이 억지로 외워야 할 게 없었기 때문이라고 했던 것으로 기억한다. 그가 연대 법학과를 나오고 캐나다 워털루 컴공 학과를 진학한 거 보면 그러한 말을 한 계기가 아마도 한국과 캐나다에서의 교육방식에서도 비롯되었다고 추측되지만, 무엇보다 법학과에서 수도 없이 외운 판례들에 질려 있던 가운데, 캐나다의 수학교육방식이 한국과는 달리 외우지 않고 접근하는 데 있었을 거라는 확신이 든다.
필자는 언어를 배울 때 결코 어떤 프로젝트를 만들기 위해 어떻게 구현해야 될지에 대해 고민한 적이 없었다. 대한민국의 판에 박힌 코딩 교육(크게 보면 대학입시)처럼 특정 언어(학교로 치면 과목)를 짜인 커리큘럼대로 먼저 배우고 어떤 것을 만들어볼까 하는 게 당연한 순서였고, 그러한 과정을 따라가노라면 컴퓨터 언어조차 처음에는 문법부터 외워야 한다는 압박감이 도사린다. 특정 프로그램이 구현될 때, 실제 컴퓨터 내부에서 어떠한 동작이 이루어지는지를 먼저 알면 왜 이런 문법(개념이나 공식)이 만들어졌는지에 대한 이해하기를 알짜 고민 하나 없이 말이다.
실제 구현되는 알고리즘의 원리를 모르니, 특정 프로그램을 만들기 위해서는 이러한 로직대로 짜야한다는 암기가 요구된다. 이러한 로직을 왜 컴퓨터에서는 이루어질 수밖에 없는지에 대한 교육이 누락되니 자연스럽게 특정 소스를 '카피 앤 페이스트(Copy & Paste)' 하거나 그러한 공식, 이를 테면 싱글톤 객체(Singleton pattern)*라는 패턴을 자바에서 왜 쓰는지에 대한 정확한 이해가 없다면 필요할 때마다 복사해서 붙여 넣는, 이른바 코더의 역량이 된다.
언어를 배우는 데, 최소한의 문법을 외우고 있으면 코딩할 때 기본 베이스가 되기 때문에 런타임 오류가 뜨면 무엇을 고쳐야 하는지 알 수는 있다. 하지만 프로그램 소스가 구현되는 과정(알고리즘)까지 외우는 게 당연한 거처럼 생각하면 그것은 개발을 하는 게 아니라, 대한민국에서 흔히 저지르는 문제를 시간 내에 풀 수 있는지의 결과물밖에 산출하지 못하는 것이다. 어떠한 규칙성을 가지고 자신의 사고력으로 끝까지 문제를 해결하려는 몰입이 코딩 교육에서 가장 필요한 역량이라고 생각하는데 이 글을 읽는 독자분은 어떻게 생각하나요?
*Singleton pattern: 내가 만든 객체를 메모리에 '딱 하나'만 올려놓고 공유하고 싶을 때 사용하는 패턴으로, 반환 값(return)이 장기간 사용되지 않으면 null이 될 수 있음. 어쨌든 메모리에 객체를 하나만 얹히기 위해 사용함.