많은 학부모님들께서 궁금해하시는 사항이기도 하고 저도 늘 고민하고 있는 문제입니다. 제가 고민하는 이유는 다음과 같습니다.

  1. 코딩 공부에 끝이 없다는 것을 학부모님에게 이해시키기가 쉽지 않다. (오해 사기 딱 좋다!)
  2. 훌륭한 소프트웨어 개발자의 잠재력을 가진 학생들은 실제로 매우 빨리 배우며, 어느 수준 이상이 되면 혼자서 컴퓨터, 책, 인터넷 자료와 싸우며 공부할 수 있다. 그리고 그렇게 공부해야만 한다. (사실, 이런 학생들은 코딩 학원 다닐 필요 없다. 빌 게이츠, 스티브 잡스, 마크 저커버그가 코딩 학원을 다녔을까?)
  3. 전문 소프트웨어 개발자들 간에도 실력 차이가 열 배 이상 (다른 산업의 전문가 집단 사이에서는 쉽게 볼 수 없는 비율임이 여러 연구에서 검증됨) 나는 것과 마찬가지로 코딩을 배우는 학생들의 수학 능력 차이도 열 배 이상 차이가 날 수 있다. 이에 따라 획일적으로 특정 커리큘럼이 끝났다고 하산시킬 수는 없다.
  4. 코딩 교육의 궁극적 목표는 (computational thinking 에 기반한) 문제 해결 능력인데 세상에 문제는 끝없이 많고 그 복잡성도 각기 다 다르다. 과연 어느 정도 복잡도의 문제 해결 능력을 습득해야만 하산시킬 수 있을까?


위와 같은 고민에 의거하여, 정모 아빠의 코딩 교실에는 딱부러진 일정이 없습니다. 지금까지 수업을 진행해본 경험에 근거해 보아도 딱부러진 일정이 없는 것이 맞는 것 같습니다. 예를 들어, 제 나름대로 커리큘럼과 이정표를 준비해서 그것에 따라 수업을 진행해 보았지만 학생들의 개별 수준과 당일 학생들이 보여준 호기심 정도에 따라 진도가 차이가 납니다. 진도가 빨라지는 경우는 없고 대부분 진도가 느려집니다. 진도가 느려지는 이유는 다음과 같이 정리됩니다.

  1. 다른 수업과 달리 준비한 내용을 무조건 주입시킬 수 없다. - 학생들이 따라 오든 말든 무조건 선생님이 할 말을 하고 마치는 방식은 코딩 수업에는 통하지 않습니다. 코딩은 무언가 동작하는 코드를 성공적으로 만듦으로써 완료되는 것인데, 따라 오지 못하는 학생은 동작하는 코드를 완성할 수 없고, 그럴 경우 학생이 이해하여 완성할 때까지 지도가 필요합니다. 또한 무조건적인 주입은 제가 코딩교실을 시작한 동기와 목표에 부합하지도 않습니다.
  2. 학생들이 정말로 컴퓨터 과학의 이모저모에 대해 호기심이 많다 - 수업을 진행하다 보면 특정 주제에 대해 학생들의 끊임없는 질문이 이어지는 경우가 많습니다. 컴퓨터는 정말 멋진 물건이라는 것과 코딩을 통해 무언가 기가 막힌 일을 할 수 있다는 것을 학생들이 본능적으로 아는 것 같습니다. 따라서 질문이 많아질 수 밖에 없는가 봅니다.
  3. 수업 중에 코딩만 가르치지 않는다. - 홈페이지에 밝혔듯이 코딩 기능을 가르치기 위한 수업이 아니기 때문입니다. 컴퓨터 과학, 수학, 문제 해결 등등을 코딩을 도구 삼아 가르치는 것 뿐입니다. 그래서 수업의 진행도 코딩을 하는 것, 컴퓨터 과학의 다양한 주제를 배우는 것, 컴퓨터 과학과 수학이 우리 생활에 미치는 영향을 생각하고 토론하는 것 등이 순환식으로 혼재되어 이루어집니다. 코딩 교실의 내용이 특정한 책과 언어를 끝내는 것이라고 오해하시는 학부모님들의 생각과는 많이 다른 부분입니다.


하지만 이렇게 딱부러진 일정이 없이 간다고 하더라도 구체적인 이정표는 어느 정도 있어야 하고, 특히 고학년 학생의 경우에는 더욱 더 그러하기에 아래와 같은 정도로만 정리할까 합니다.

  1. 저학년의 경우 고학년 수준이 될 때까지 계속 스크래치 + CS Unplugged + 수학 + 타이핑을 중심으로 진행한다.
  2. 고학년의 경우 스크래치 + CS Unplugged + 수학 + 타이핑을 학생의 수준에 따라 약 3~6 개월 정도 학습하고, 이후로는 Python + 스크래치 고급 프로젝트 + CS Unplugged + 수학을 계속 공부한다. 이 과정에서 Python 프로젝트의 난이도를 점차 올려간다.
  3. 고학년의 경우 다른 코딩 기술 학습의 일환으로 C/C++과 HTML5+CSS+Java Script를 부가적으로 기초 수준에서 공부한다.


고급 프로그래밍 언어로서 Python을 선택한 이유는 코딩 기술을 체계적으로 가르치기에 적합하고, 실제로 재미있는 프로젝트를 만들기도 다른 언어에 비해 매우 쉬우며, 전문 개발자 사용자층이 엄청나게 두터워서 장래에 학생이 사용할 가능성이 아주 높은 언어이기 때문입니다.

그럼 과연 언제 코딩 교실을 그만 두어야 할까요? 이에 대해서는 요즘 주로 사용하는 소프트웨어 개발 프로세스 중의 하나인 애자일 방법론의 예를 들어 설명하겠습니다. (아래 그림을 참고하세요.)

애자일 방법론은, 간단히 말해서, 실제 기능을 하는 소프트웨어(Sprint 1 - 쉬운 말로 버전이라고 생각하셔도 됩니다.)를 소규모로 만들어 출시한 후, 이후에는 여기에 조금씩 살을 더 붙여가면서 단계적으로 좀 더 많은 기능을 하는 소프트웨어들(Sprint 2, 3, …)을 지속적이고 연속적으로 출시하는 방식을 말합니다. 소프트웨어 사용자들은 Sprint 1 부터 가져다가 사용을 시작하되, 본인이 원하는 충분한 기능을 포함한 Sprint 2 가 나오면 더 이상 후속 소프트웨어를 채용하지 않을 수 있습니다. 또 다른 사용자는 Sprint 3 의 보다 많은 기능이 필요하기 때문에 Sprint 2 를 거쳐서 Sprint 3 까지 채용한 후, Spring 4 이후도 계속 채용할 것인가 여부를 결정할 수 있습니다.

따라서 코딩 교실을 그만 두는 시점은 마치 소프트웨어 사용자들이 몇 번 Sprint 까지의 소프트웨어를 채용할 것인가를 결정하는 것과 유사합니다. 정모 아빠의 코딩 교실은 끝없이 Sprint 를 지속할 것이고, 최종 사용자인 학생과 학부모님께서 “자, 이만하면 되었다.” 라는 생각이 드실 때 하차하시면 됩니다.

물론, 간혹 정모 아빠가 먼저 나서서 “너는 이 정도면 혼자서 공부할 수 있거나 다른 더 좋은 사부님을 찾아나서야 할 때이다.” 라고 이야기하는 상황도 나올 수 있겠지요. ^^

감사합니다.