코딩, 코드, 프로그램?

제가 어렸을 때만해도 동네마다 아이들을 위한 컴퓨터 학원이 하나쯤은 있었습니다. 종로의 세운상가에서 솜씨 좋은 아저씨들이 애플 2 컴퓨터를 복제하여 만들어 팔았는데, 이런 컴퓨터를 이용해서 애플 BASIC이라는 컴퓨터 언어를 배웠더랬습니다. (제가 BASIC으로 윷놀이하는 프로그램을 짜고서는 신나했던 기억이 아직도 생생합니다.)

apple2




하지만 언제부터인가 이렇게 아이들에게 프로그램을 만드는 방법을 가르치는 학원은 점점 사라지기 시작했습니다. 아마도 컴퓨터가 점점 일상화 될수록 프로그램을 만드는 방법을 알기 원하는 사람보다는 전문가에 의해 만들어진 프로그램을 사용하는 방법을 알기 원하는 사람이 더 많아졌기 때문이겠지요. ​

이렇게 정모 아빠가 어렸을 때 컴퓨터 학원에서 BASIC으로 프로그램을 만들던 바로 그 활동이 바로 코딩(coding)이라는 것입니다. 엄밀한 의미의 코딩이란, 프로그램을 만드는 과정의 여러 활동 중 컴퓨터 언어를 사용하여 컴퓨터가 알아들을 수 있는 명령을 작성하는 활동만을 의미합니다만 요즘 코딩교육에서 사용하는 느슨한 의미로는 프로그램을 만드는 전반적인 과정이라고 이해하셔도 무방합니다. 그 결과로 만들어진 것이 프로그램(program)이고 다른 말로는 코드(code)라고도 합니다.


코딩 교육 열풍이 시작된 (제가 생각하는) 이유

수 십 년이 지난 오늘날 전 세계적으로 어린이 코딩 교육 열풍이 불고 있습니다. 특히 오바마 대통령이 미국의 코딩 공교육을 의무화하는 CS for All 정책을 강력히 펼치면서 더 유명해지게 되었습니다만, 사실 코딩 공교육의 원조는 영국입니다. ​

왜 영국일까요? 영국은 증기기관이라는 신기술로 인한 산업 혁명의 시대에는 이에 걸맞는 새로운 교육을 받은 인재가 필요하다는 것을 가장 먼저 깨달은 나라입니다. 그래서 당시 영국은 농업 인구들을 도시로 불러들여 읽기, 쓰기, 셈하기라는 당시로서는 새로운 내용의 공교육을 실시하였습니다. 그러한 덕분에 산업 시대에 필요한 기술과 지식을 가진 인재를 양산하여 세계 최고의 경쟁력을 가질 수 있었습니다. 이번에도 다르지 않습니다. 영국은 작금의 세상이 소프트웨어 중심의 세상이 될 것임을 깨닫고, 소프트웨어 중심의 시대에 필요한 기술과 지식을 가진 인재를 확보하여 경쟁력을 유지하기 위해서 코딩 교육의 필요성을 절감했던 것입니다.

미국 역시 마찬가지입니다. 미국의 CS for All 정책이 지향하는 바는 다음에 보이는 오바마 대통령 연설로부터 추측할 수 있습니다.


In the coming years, we should build on that progress, by … offering every student the hands-on computer science and math classes that make them job-ready on day one.

President Obama in his 2016 State of the Union Address


obama learn to code



미래에는 세상의 모든 것이 소프트웨어로 움직일 것입니다. 오죽하면 메르세데스 벤츠 회장이 “미래의 자동차는 휘발류로 움직이지 않고 소프트웨어로 움직일 것이다”라는 말을 했을까요. ​

이렇게 모든 것이 소프트웨어로 굴러가는 세상에서 학생들이 졸업 후 사회에 첫 발을 들인 바로 그날부터 효과적으로 업무를 수행할 수 있도록 컴퓨터 과학과 수학의 실무적 지식을 가르치는 것이 CS for All 의 목표인 것입니다.


그러면, 코딩은 장래에 좋은 직업을 얻기 위해서 배우는 것일까요?

영국과 미국의 정책 입안자들이 주장하는 코딩 교육의 당위성만을 보면 코딩 교육은 좋은 직장인이 되기 위해서 또는 사회에 좋은 노동력을 공급하기 위해서인 것 처럼 보입니다. 좀 서글프고 뭔가 실망스럽습니다. 우리 아이들에게 뭔가 정말 좋은 것이 있을 줄 알았는데 (비록 중요한 일이긴 하지만) 기껏해야 회사 사장님들한테 일 잘하는 생산요소를 투입해주기 위해서라고 합니다. 물론 회사에서 열심히 일 하다보면 우리 아이들도 좋은 아이디어가 생겨 네이버나 카카오 같은 멋진 회사를 만들고 큰 성공을 할 수도 있습니다. 하지만 그러한 몇몇 특수한 성공 사례만을 가지고 가뜩이나 힘든 우리 아이들에게 새로운 교과목에 대한 짐을 지우는 것은 무언가 확신이 들지 않습니다. ​

다행스럽게 정모 아빠를 포함한 많은 소프트웨어 엔지니어들은 코딩 교육이 왜 아이들에게 가르칠만한 훌륭한 주제인지 잘 알고 있습니다. 단지 그 이유가 일자리와 국가 경쟁력에 주된 관심을 두는 정책 입안자들과는 살짝 다를 뿐입니다. 스티브 잡스와 빌 게이츠 같은 소프트웨어 산업의 리더들이나 어린이를 위한 코딩 도구인 스크래치를 개발한 MIT의 밋첼 레스닉 교수와 같은 교육자들 모두 같은 이유를 들어 코딩 교육의 중요성을 이야기 하고 있습니다. ​

즉, 코딩 교육은 장래에 좋은 직업을 갖기 위한 것이 일차적 목적이 아닙니다. 일차적 목적은 아이들에게 생각하는 방법과 문제 해결 능력을 가르치는 것입니다. 물론 아이에게 생각하는 방법과 문제 해결 능력을 가르치는 방법은 여러가지가 있을 것입니다만, 코딩은 생각하는 방법과 문제 해결 능력 키우기에 기가 막히게 적합한 행동과 훈련들로 가득차 있습니다. ​

코딩 자체가 이미 “컴퓨터를 이용하여 실제 세계의 문제를 해결하기 위한 무언가를 만드는 작업”을 뜻합니다. 이를 위해서는 실제 세계 현존하는 문제의 인식 능력, 복잡한 문제를 이해 가능한 대상으로 만들기 위해 모델링하고 추상화하는 능력, 모델링된 문제를 컴퓨터로 해결할 수 있도록 완전한 알고리듬(문제의 해결 순서)을 개발하는 능력, 한 가지 문제를 해결하는 여러가지 알고리듬 중에 제약조건+비용+효과를 고려한 최선의 알고리듬을 선택할 수 있는 최적화 능력 등을 필요로 합니다. ​

이것뿐만이 아닙니다. 코딩 프로젝트를 여러 명이 함께 진행할 경우 탁월한 소통 능력협업 능력이 요구되는데, 이는 아이가 자라서 전 세계의 여러 나라 사람들과의 협업을 해야하는 역할을 하게 되든, 한 회사 안에서 여러 부서와 협업을 해야하는 역할을 하게 되든 필수적으로 갖추어야 할 능력입니다. 또한 코딩 프로젝트를 진행하면서 프로젝트 계획과 관리에 대한 많은 것을 필연적으로 배우게 되는데 이 안에는 인생을 지혜롭게 계획하고 이끌어 가는 데 유용하게 사용될 보석 같은 지식들이 빼곡히 들어 있습니다. ​

재미있고 작은 코딩 프로젝트를 아이와 함께 해가는 과정 중에 이상에서 설명한 많은 것을 체험적으로 배우게 되는데, 이것이 바로 코딩 교육이 다른 어떤 학제보다도 아이의 생각하는 방법과 문제 해결 능력을 키우는데 유리한 이유가 됩니다.


정모 아빠가 지향하는 코딩 교육의 7 가지 세부 목표

지금까지 정모 아빠가 생각하는 코딩 교육의 본질에 대해 설명을 드렸습니다. 아직도 할 말이 많습니다만, 이곳에서 글로 풀기에는 무리가 좀 있군요.

현재 우리나라는 코딩 교육의 체계를 잡는 초창기입니다. 코딩 교육의 의미에 대한 학부모님과의 공유도 부족하고, 코딩의 교육적 장점과 기술적 주제를 충분히 이해하여 가르칠 선생님도 부족하고, 커리큘럼도 아직은 더 다듬어야 하는 상황입니다. 초기 혼란기라고 말씀드릴 수 있겠지요. 그런데 이런 혼란기를 틈타 약삭빠른 일부 사교육 사업자들이 이상한 짓을 하는 것을 보고 혼자 분이 치밀어서, 조금이라도 이해를 돕고자 설명이 길어졌습니다. (800 만 원 짜리 코딩 캠프 뉴스와 왠 영어 유치원 원장님이 TV에 나와서 코딩 교육에 대해 전문가인 양 떠들며 전가의 보도 창의력을 운운하는 것을 보고 그 분노가 극에 달했더랬지요.^^)

​ 아무튼 지금까지 설명드린 정모 아빠의 생각을 기준으로, 정모 아빠의 Code to Learn 에서는 다음과 같은 세부 목표에 초점을 맞추어 코딩 수업을 진행합니다. 아래 세부 목표는 제가 지난 25 년 간 다양한 인재들과의 연구개발을 진행하면서 겪은 실제 경험과 관찰을 통해 정리한 내용으로, 실제로 제가 현업에 있을 때에도 지속적으로 관리자들과 팀원들에게 강조하고 훈련시켜왔던 내용입니다. 따라서 공허한 구호가 아니라, 어린 학생들이 일찍부터 습관화하면 좋을 내용으로 구성되어 있고, 수업 중에 단순히 코딩 지식을 가르치는 것이 아니라 코딩을 배움으로써 아래 7 가지 항목에 익숙해지도록 수업을 진행하고 있습니다.


  1. 문제를 인식하고 정의하는 능력 (Problem identification an definition)
  2. 해결책을 탐색하는 능력 (Solution design and evaluation)
  3. 여러가지 해결책들의 장점과 단점을 파악하고 주어진 상황에 적합한 최적의 해결책을 선택하는 능력 (Trade-off identification and optimum solution decision)
  4. 자신의 선택을 비판적으로 분석하고 사실과 증거에 바탕을 두고 논증할 수 있는 능력 (Critical thinking and evidence-based argumentation)
  5. 아이디어를 공유하고 협업하는 능력 (Idea share and collaboration)
  6. 프로젝트를 계획하고 관리하는 능력 (Project planning, monitoring and controlling)
  7. 코딩 프로젝트를 통한 다양한 학제의 지식을 융합하여 이해하고 실제적 의미를 파악하는 능력 (Understanding physical meaning of theories based on multi-disciplinary knowledge)


7 가지 세부 목표들이 수업을 통해 어떤 방식으로 달성되어 가는지는 앞으로 올리는 포스팅을 통해 좀 더 공유할 기회가 있을 것이라 생각합니다.

감사합니다.