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

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

각인효과

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

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

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

이름붙이기

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

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

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

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

생각하기와 글쓰기

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

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

교사와 함께 코딩하기

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

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

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

수용적이고 존중하는 분위기

창조적인 프로그래밍을 위해서는 학급의 수용적인 분위기가 필요하다. 비단 프로그래밍에서만 필요한 것은 아니겠지만, 창의적인 생각이 자연스럽게 모두에게 인정받을 수 있는 분위기를 이끌어내는 것이 매우 중요하다.

초등학생들과 컴퓨터프로그래밍(이하 프로그래밍) 접하기 전에 생각해 볼 문제가 있다. 우리는 학급 담임제이기 때문에 한 학급 단위를 기준으로 생각해 보자.

생각해 볼 문제

  1. 학급 전체에게 가르칠 것인가? – 보조교사가 없는 현실에서 학급 전체일 수 밖에 없다. 일단은 영재반이나 방과후나 동아리 활동은 빼고 생각해 보자.
  2. 목표를 충분히 생각하고 있는가? – 코딩 기술? 프로그래밍 원리? 창의적 사고? 문제 해결력? 교과연계? 진로지도? 소질계발?
  3. 흥미나 관심이 없는 학생은 어떻게 해야 할 것인가? – 프로그래밍에 흥미를 가진 친구와 팀을 이루어 다른 분야의 능력으로 협동하게 할 것인지, 어떤 자극을 통해 함께 참여하도록 유도할 것인지.
  4. 왜? 프로그래밍을 접해야 한다고 생각하는가? – 1,2,3이 준비되긴 했는데, 왜 프로그래밍을 접하게 해야 하는지 충분하고 분명한 이유를 제시할 수 있을 만큼, 교사 스스로 동기부여가 되어 있는가? 단지 유행이라서? 교과서에 하라고 하니까? 연수에서 배운대로 한 번 해보려고?는 아닌지.

나는 교사야. 전분가란 말이지. 나의 수업과 교육관에 미루어 교육적으로 유의미한 활동이고, 우리 학급 학생들에게 필요한 내용이라면 망설일 필요 없지.

수용적 분위기

모두 갖추어졌다면, 다음으로 필요한 것은 동기부여일 것이다. 그런데, 이것보다 더 중요한 것이 있는데, 어느 누구도 지적하지 않는 부분이다. 바로, 학급의 분위기다. 뭐, 여기에 대해 두 말 할 나위 없을 것이다. 비단 프로그래밍이 아니더라도, 도국수사과음미실체영바슬즐을 포함한 수 많은 학교 교육의 기반이 되는 것이니까. 학급 자체의 분위기가 ‘발견했거나 만들어낸 무언가’에 대해 모두가 감동하고 부러워할 준비가 항시 되어 있어야 한다.

  • 집에서 만들어 온 색종이 접기
  • 낙서로 그린 어떤 그림
  • 이쑤시개로 만든 집
  • 싹이 나온 강낭콩 씨앗
  • 유튜브를 보고 만든  특이한 종이 비행기
  • 아버지와 만든 플라모델
  • 학급 줄넘기 3종목 3관왕
  • 놀러가서 찍은 사진

저런 작은 것들이 당연하거나 손쉬운 것이 결코 아니다. 어느 누구에게는 엄청난 노력의 결과인 것이고, 서로 칭찬하고 격려해야 할 ‘노력’의 결과다. ‘저런건 나도 할 수 있어’라는 말과 생각이 어느 구석에서 나온다거나, ‘그러게말이야’라는 맞받아치기가 나와서는 절대로 안된다. 왜냐하면, 저런 결과물들이 모두 프로그래밍의 다른 형태이기 때문이다.

창작물에 대한 존중

나의 손끝에서 땀방울로 맺어진 창작물이 존중해 주지 못하는 분위기에서 ‘도전’과 ‘성취’를 맛본다는 건 어지간한 마인드컨트롤 없이는 불가능한 일이다. 특히나 프로그래밍을 배워가는 과정에서는 ‘동기부여’와 ‘문제해결’과 ‘배경지식보충’과 이를 넘어서려는 ‘창의적사고’ 등이 계속적으로 이루어져야만 그 중독성에 빠져들 수 있다. 이런 유기적이고 복합적인 활동을 지속하는 것은 매우 지치고 힘들고 어려운 일이다. 그런데, 학급의 분위기가 갖추어지지 않아 번번이 좌절하거나 무시당하는 경험이 누적되면, 프로그래밍 수업을 지속할 이유가 사라져 버린다. 처음에는 쉽지 않겠지만, 작은 고개 몇 개를 넘고 나면 내가 만들 수 있는 세상이 무한히 열리게 되는데, 작은 고개를 넘는 고난의 여정은 스스로의 자기 암시보다 주변 친구들의 격려와 기대가 훨씬 더 큰 도움이 된다.

고등학교시절 내가 만든 컴퓨터바이러스로 담임 선생님의 컴퓨터를 감염시켜 디스켓을 망가뜨리고 아무렇지도 않게 복구해드리는 장난에 대한 내 친구들의 격려(?)가 엄청난 힘이 되었다.

학급 경영의 중요성과 교사의 뚜렷한 교육관이 바탕이 되어야만 한다는 ‘교과서적’인 뻔한 이야기가 프로그래밍교육의 시작이라니. 이게 무슨 말도 안되는 소리란 말인가. 그러게말이다. 여하튼, 그 다음이 ‘동기부여’ 다. :맥노턴.

한국형 저작도구들은 어디로?

최근 영국을 비롯한 일부 선진국에서 컴퓨터 프로그래밍 원리를 수업에 활용하거나 컴퓨터 프로그래밍을 교육과정으로 진행하고자 한다는 소식이 들린다.

1. GREAT, KAS, 새빛

교육대학교 90년대 학번들은 한번쯤 들어봤거나 현장에서 각종 자료전을 통해 활용해 본 저작도구들이다.

뭐, 지금은 우리의 기억속에서 완전히 사라졌다.

GREAT는 알고리즘이나 복잡한 수치연산이 필요한 코드를 만드는 도구는 아니지만, 비교적 짧은 시간내에 효율적으로 학습용 소프트웨어를 개발할 수 있던 MS-DOS기반의 저작도구’였다’. 완성도는 별 다섯개 중 세개 반 정도?

KAS는 GREAT와는 다른 방식의 저작도구였다. 그래픽 도구도 제공되었고, 왠만큼 활용가능한 수치연산이 가능하고 화면 표현이 뛰어났던 것으로 기억된다. 솔직히 KAS를 오픈소스로 전환했거나, 다양한 플랫폼으로 개발되었다면 스크래치 정도는 뭐 우습게 볼 수 있을 정도의 강력한 도구로 탄생했을 것이다. 혹시나 해서 KAS를 찾아보았더니 http://www.kasnara.com 에서 KAS2010을 공개배포 중이다. ActiveX로 익스플로러 기반의 웹으로 실행이 가능하고, Server-Client 프로그래밍까지 지원 가능한 상태다.

새빛은 윈도우 기반의 플로어차트식 저작도구였다. 뭐 완성도는 가장 낮았지만, 윈도우기반에서 접할 수 있는 편리한 기능들이 돋보였었었었었다. 편리한 저작 인터페이스를 KAS와 합쳤으면 대박이었을지도…

2. 국산 저작도구들은 어디로?

한창 각종 연구대회들이 저작도구를 기반으로 제작되어 다양한 교육컨텐츠들이 탄생하고 세계 최고의 IT교육강국으로 뻗어나갈 도약기를 맞이하나 싶었는데, 갑자기 인터넷이 보급되고 윈도우가 사용되고 웹서비스가 급속도로 퍼져나가면서,  온통 웹과 HTML이 대세일 것이라는 심리가 생기기 시작했다.

물론, 저작도구들이 새로운 운영체제와 사용환경 변화에 발빠르게 대처하지 못한 문제도 있었겠지만, 웹서비스 예찬론자들로인해 저작도구들은 하나 둘 자취를 감추기 시작한다. 물론, 나도 웹이 대세가 될 것으로 예상하고 PERL로 CGI 만들어서 웹페이지 제작 알바도 했었지만, 그래도 꾸준히 비주얼베이직, 툴북, 오소웨어같은 도구들을 이용해 무언가를 만들어내고 있었다.

3. KAS 2014 발표!!

[KAS 2014] 윈도우7,맥OSX, 리눅스지원

  • 2D 벡터 그래픽 지원, 3D 오브젝트 활용 가능!
  • 플로어차트 형태의 손쉬운 프로그래밍
  • 학생들을 위한 명령어 100% 한글화
  • 모든 웹브라우저에서 HTML5로 실행!
  • 강력한 네트워크 서버-클라이언트 프로그래밍을 지원!
  • 라즈베리파이용 ‘라즈비안’ 탑재 및 하드웨어 제어 가능!

물론, 나름대로 생각해 본 광고다. 이렇게 우리나라에서 발표만 된다면 얼마나 좋을까.

이미 15년 전에 우리는 초등학교 실과시간에 저작도구를 이용한 프로그래밍을 가르쳤고, BASIC은 동네 컴퓨터학원에서 공짜로 가르쳐줬었다. C는 동네 형들 집에 놀러가서 배우던 중딩들의 비기(?)였다.

4. 뒷북이라도 제대로

뒷북이 분명하다. 하지만, 이제라도 제대로 울리면 된다. 교육에서 이야기하는 컴퓨터 프로그래밍이라는건 산업 인력을 양성하기 위한 기술교육 같은 한 부분이 결코 아니다.

  • 합리적인 순서대로 – 순차 실행
  • 자주 하는 일은 한 곳에서 – 함수와 프로시져를 통한 모듈화
  • 필요에 따라 나눠서 – 조건과 분기
  • 매일매일 규칙적으로 – 반복

인간만사를 크게 넷으로 구분하고, 삶을 설계하는 것을 블럭맞추기 연습을 해 보는게 컴퓨터 프로그래밍 교육이다. 학문적 연구나 공부는 말할 것도 없고, 요리, 건축, 제조, 예술 모든 분야에 컴퓨터 프로그래밍의 원리가 들어 있기 때문에, 어릴적 부터 이런 감각을 키워 디지털 시대에 적응과 복잡다단한 미래사회에 대비하자는 것이 목적인 것이다.

예상컨데, 지금까지 해온 행태를 보면 분명 교육부로부터

  1. MIT에서 만든 Scratch나 SUN의 Java 같은 언어 몇 가지를 찍어서,
  2. 컴퓨터프로그래밍교육 선도요원을 뽑고,
  3. 교사들을 열심히 연수시킨 다음에,
  4. 각 학교에 1년 10시간 필수적으로 프로그래밍교육을 실시하라! 지침을 내려보내고,
  5. 모든 교사를 대상으로 프로그래밍 직무연수 16시간 받도록 강요하고,
  6. 아이들은 프로그래밍 대회를 만들어서 마구 상주고
  7. 지도교사 표창을 주면서 독려

시퀀스대로 프로그래밍하고 컴파일하여 실행할 것 같다. 그저 기우였으면 좋겠다.

앞으로 여러 조각에 걸쳐 한국형(?) 컴퓨터 프로그래밍 교육에 대해 나름의 생각을 이야기 해볼까 한다.

 

:맥노턴.