컴퓨터프로그래밍교육과 언어(외국어)의 벽, 사고와 글쓰기

범용적인 프로그래밍 언어로 아이들에게 컴퓨터프로그래밍을 교육하는데 가장 큰 걸림돌은 역시 ‘외국어’이다. 변수와 상수, 배열, 프로시져, 함수, 객체를 명명하는데 영어는 큰 장해물이 된다. 초등에서는 사고와 글쓰기를 통해 준비의 단계로, 중등에서 영어와 함께 본격적으로 시도해 보는 것은 어떨까?

각인효과

BASIC이 프로그래밍 언어로 우리에게 다가와 오타쿠 초호기들의 모니터 형광물질을 초록으로 불태우던 시절…

사실, 지금까지도 빌 게이츠 형님이 버리지 못한 이유를 이해할 수 있을 것 같은 ‘각인’ 효과와… (빌 형이 살아있을 동안에는 절대로 BASIC이라는 언어가 사라지지 않을 것이라는 예언도 있었지;;;)
프로그래밍에서 아이들은 일단 언어의 벽에 부딪히게 된다.

흔히들 명령어셋을 이야기하지만… 알고리즘을 구현하는데 실제로 명령어셋은 몇 개 안된다. 몇 개 안된다는 것은 시간이 지나면 저절로 익혀지는 것이라는 뜻인지라, 이 보다 변수/상수의 명명이 훨씬 아이들에게 어렵게 다가오는 것이고, 무척이나 중요한 습관이다.

이름붙이기

일전에, 상용 소프트웨어의 코드를 (루트는 비밀) 받아서 자연어처리를 위해 분해해 재가공한 적이 있다. 놀라운 사실은… 이 코드가 꽤 여러 차례 버전업을 했음에도 불구하고…

변수와 배열 정의가 $aa, $abc, $jaum(자음), $sajeun(사전) 이런 식으로 되어 있었다… 함수와 프로시져도 open_sajeun(사전열어?), nanum_munja(문자나눔?) 너무 놀라서 전체 코드를 다 봤는데… 부분부분 이런 식이었고, 다른 사람이 손댄 부분은 또 알아보기 쉬운 사전적 단어들이 이용되어 있었다.

프로그래밍 중 코딩교육에서 절대로 가볍게 생각해서는 안되는 부분이
$a=1
$b=2
$c=$a+$b
이런 것이라 생각한다.

일시적으로 사용하는 변수는 일시적이라는 의미의 단어tmp/temp등을 변수명 앞에 붙인다거나, 변수의 목적에 맞는 단어를 앞에 붙이고, 대소문자를 적절히 활용하고, 특수한 목적에 따라 언더바(_)를 이용하는 등의 룰이 있다. 이런 룰이 시작부터 각인되어야 할 부분이고, 기본적인 약속이므로 지키도록 해야 한다. 우리 아이들에게는 한글로 코딩할 수 있는 인터프리터가 나오지 않는이상… 결코, 쉽지 않은 부분이다.

생각하기와 글쓰기

그래서 초등학교에서 프로그래밍의 시작은 생각하기와 글쓰기와 생각하기와 글쓰기다. 이게 완성되어 중등학교에서 영단어와 매칭시키는 단계로 연결되어야 하지 않나 생각해본다. (영재아들 이야기는 일단 생략)

하고자 하는 알고리즘과 동작을 글로 남기고, 글을 읽어가며 문단문단을 순서에 맞게 재배열하고, 문장과 문장을 나열하여 연결하기 쉽도록 단어를 고치고, 처음부터 끝까지 함께 읽어가며 동작과 알고리즘을 정확히 이해하도록 하는 것이 시작이다.

교사와 함께 코딩하기

프로그래밍의 백미, 컴파일되어 실행되는 코드를 보면서 느끼는 성취감과 희열이다. 아이들에게도 물론 필요할 것이다. 어렵지 않다. 코딩은 교사가 해주면 된다. 아이와 옆에 앉아서 네가 내린 명령은 이렇게 작성하면 되고… 실행하면 이렇게 되는거야~ 실행해보자! 손으로 도화지에 그려온 오브젝트를 스캔해서 이미지로 변환시키고 코드에 넣는 활동이 바로 교사가 해야 할 역할이고, 보조교사가 도와야 할 부분이 아닌가 생각한다. 이런 활동 속에 스스로 해보고 싶은 아이들이 탄생할 것이고, 소양을 키워나가는 것은 그들의 몫으로 남겨두는 것은 어떨까?

우리 반에서 아이들과 시도해 본 것들에 대한 시행착오와 나름의 시도를 개선해 나가고 있지만, 항상 어려움에 부딪히는 것들이 저런 사고와 글쓰기 부분이고, 이런 활동이 선행되지 않으면 프로그래밍이라는 것이 그저 새로운 경험과 놀이 정도로 끝나게 되어 안타까움을 느끼고 있다.

(가르치는 사람이 컴맹이라 그런 것일지도 모르겠다… ㅠㅠ;;)