정부의 한국사 국정교과서 도입을 반대합니다.


  기왕 시작하기로 한 코딩교육을 제대로 가르치기 위해서 무엇을 어떻게 해야 할까요?

현재 시장에 나와있는 교육관련 툴과 언어들을 정리해보겠습니다.


  코딩 교육 툴


언플러그드(Unplugged, http://csunplugged.org/ )



  언플러그드는 컴퓨터가 없이도 프로그래밍에 대한 원리를 이해하고 공부할 수 있는 도구입니다. 뉴질랜드의 캔터베리 대학에서 개발한 프로그래밍 학습용  도구입니다. 현재 오픈소스로 누구나 비영리 활동을 전제로 활용이 가능하며, 번역판이 국내 온라인 북샵에서 구매 가능합니다. 영어판의 경우, 홈페이지에서 pdf 파일을 다운로드 받아 바로 사용할 수 있습니다.


  언플러그드에 실린 다양한 활동들은 컴퓨터과학의 기본원리를 놀이와 게임을 통해 쉽게 배우고 익힐 수 있습니다. 저도 프로그래밍 멘토링을 하면서 스크래치를 가르치기 전과 활동 중간에 필요한 내용들을 혼합하여 학습하였습니다.


  이 활동은 컴퓨터 없이 바로 시작할 수 있으며, 교사용 지침서가 있지만 수업을 하기 전 핸드아웃을 준비해야하는 단점이 있습니다. 그리고, 수업을 진행하기 전 지침서를 꼼꼼히 읽고 수업에 임해야 놀이를 벗어난 학습과정이 될 수 있습니다.


  홈페이지에는 이 활동을 어떻게 진행해야 하는지에 대한 비디오가 있어 보고 참고한 뒤, 수업에 적용할 수 있다는 점이 입문용 도구로 큰 장점을 지니고 있습니다.

  가장 기초적인 바이너리 부터 알고리즘과 암호화, 튜링테스트까지 다양한 과정을 가르칠 수 있기 때문에 학교에서 혹은 가정에서 소프트웨어를 가르치려는 선생님께 적극 추천하는 도구입니다.


  다만, 학습내용을 충분히 숙지하지 않고 수업에 임할 경우, 수업이 무한루프에 빠지는 사태가 발생할 수 있기 때문에 교재연구에 충분한 시간을 투자하셔야 합니다. 또, 인스트럭터가 약간의 소프트웨어에 대한 지식을 가지고 있어야 쏟아지는 질문공세로 부터 살아남으실 수 있습니다.



스크래치(Scratch, https://scratch.mit.edu/)



  초등 교육용 도구로 가장 잘 알려진 스크래치입니다. 블럭 프로그래밍을 가능케 하는 도구로 MIT 미디어랩의 Lifelong Kindergarten Group 에서 운영하는 프로젝트입니다. 스크래치 또한 무료로 다양한 솔루션을 제공하고 있으며, 다양한 언어를 기본지원하기 때문에 한국어로 되어 있는 프로그램으로 바로 가르칠 수 있는 장점이 있습니다.


  설치과정 없이 온라인에서 바로 실행이 가능한 에디터와 인터넷이 되지 않거나 불안정한 경우, 오프라인에서 설치 후 사용할 수 있는 오프라인 에디터를 제공하기 때문에 안정적인 학습환경 구성이 가능합니다.


  스크래치는 다양한 블럭을 조합하여 프로그램을 만들 수 있고, 기존의 프로그래밍 언어가 지원하는 거의 대부분의 기능을 지원하기 때문에 블럭 프로그래밍 치고는 유연한 모습을 보여줍니다.

  아두이노와 라즈베리 파이 등 다양한 하드웨어와 조합을 통해 실제 구현 모습을 눈으로 확인할 수 있는 기능 또한 다양한 학습법을 원하는 교사에게 큰 장점으로 부각됩니다.


  스크래치는 이미 교육현장에서 많이 쓰이고 있으며, 가장 인기있는 학습도구로 인정받고 있습니다. 스크래치로 큰 교육효과를 얻기 위해서는 단순한 알고리즘의 행진을 탈피해 다양한 프로그래밍을 보여주어야 하며, 교육그룹이 소규모일 때 큰 효과를 발휘하는 도구입니다. 스크래치로 할 수 있는 활동들에 대한 예제들을 충분히 해보시고, 수업에 임하신다면 좋은 성과를 내실 수 있을겁니다.


코드카데미(Codecademy, https://www.codecademy.com/)



  코드카데미는 미국의 기업에서 운영하고 있는 웹사이트입니다. 웹프로젝트(HTML, CSS, Javascript) 부터 Python, Java, SQL, AngularJS, Ruby, git, commandline 까지 웹 관련 언어들을 배울 수 있는 홈페이지입니다. 구글과 페이스북 계정으로 간단히 가입하여 배울 수 있으며, 한 챕터당 배울 내용들을 인스트럭션을 따라 한 줄씩 채워나가면서 프로그램을 완성하는 구조를 가지고 있습니다.


  이 툴을 사용하기 위해 가장 중요한 것은...... 영어입니다. 아직 한글을 지원하지 않아(codekorea.or.kr 라고 codecademy와 제휴하여 한글화 작업중이었으나 홈페이지 접속이 불가능하다능..) 영어로 읽고 문제를 이해하여 답안을 제출해야 합니다. 물론, 코딩에 필요한 단어들 몇가지와 기본적인 문법만 알고 있으면 해석이 가능할 정도로 어려운 문법이 나오는 것은 아닙니다. 초등학교 4학년 아이도 파이썬 과정을 무사히 마친 전력이 있습니다.(물론 그 전에 영어를 가르쳐야 했지만..)


  하나의 미션을 완료하기 위해서는 완벽하게 코드를 작성하고 실행해야 합니다. 문법에 맞지 않는 것은 둘째치고, 이 페이지가 원하는 답과 정확히 일치해야 챕터를 넘길 수 있습니다. 이로 인해 교사가 불려다니면서 일일이 디버깅해줘야 하는 단점이 있습니다. 문법적 문제가 아닌 대소문자, 띄어쓰기 등등 여러 문제가 있습니다. 이 툴을 생각하고 계시다면 고려하시기 바랍니다.



Code.org(https://code.org/)



  오바마가 추천하는 맛집 code.org 입니다. 2013년 빌게이츠와 마크주커버그 등 페이스북, 트위터, 마이크로소프트의 엔지니어들이 참여한 비영리재단입니다. 다양한 언어와 다양한 프로젝트를 진행하며 유명인이 설명하는 튜토리얼을 따라가다보면 프로그램을 완성하게 되는 구조입니다.

  일회성 행사로 이 플랫폼을 이용하는 것은 좋을 수 있으나 주로 이용하기에는 깊은 내용을 가르칠 수 없다는 점에서 수업 사이사이에 끼워넣어 학습하는 것이 좋습니다.


  매년 Hour of code 행사를 진행하고 있으며, 1시간동안 코딩을 가르치면 수료증을 수여하게 되는 시스템입니다. 2015년은 12월 7일부터 13일까지를 Hour of code 주간으로 정하고 있으며 전세계적인 행사에 학생들과 함께 참여하시기 바랍니다. 참고로, 교사용 페이지에서 참여 신청 후 이를 재단에 인증하면 수료증과 함께 교사께는 드랍박스 크레딧을 드리고 있습니다. 한국에서도 다양한 곳이 이번 행사에 참여할 수 있었으면 좋겠네요.



생활코딩(https://opentutorials.org/)


  생활코딩은 이고잉이라는 개발자가 오픈라이선스를 지향하며 코딩 세션을 만들어 배포할 수 있는 플랫폼입니다. 이 페이지에 기술되는 모든 내용들은 오픈라이선스를 따르며, 유저가 배포자가 될 수 있는 오픈 플랫폼입니다. 생활코딩의 내용들은 다양한 유저들이 참여하여 함께 만드는 플랫폼이므로 그 페이지의 기술수준부터 컨텐츠의 퀄리티까지 천차만별입니다. 수업에 이용하기 전 선생님께서 충분히 수업내용을 따라해 보시고, 컨텐츠를 신중히 고르셔야 할 것으로 보입니다.




  언어


HTML, Javascript, CSS


  웹 프로젝트를 수행하기 위해 필요한 가장 필수적인 컨텐츠입니다. 엄밀히 말하면 마크업랭귀지로 프로그래밍언어로 보기에는 무리가 있지만, 초보적인 수준은 쉽게 배울 수 있고, 몇번의 구글링을 통해 어지간한 샘플들을 둘러볼 수 있으며, 메모장으로도 쉽게 만들 수 있으므로 프로그래밍 언어를 가르칠 때 가장 먼저 배우면 좋을 만한 언어들입니다.


  HTML5 로 버전업이 되면서 플래쉬 의존성을 탈피하고, 단독으로 얼마든지 화려한 컨텐츠를 만들 수 있다는 점이 매력적입니다.


Python

print ("Hello, World!")


  파이썬은 전문가들 사이에서도 입문용 프로그래밍 언어로 가장 많이 추천되는 언어입니다. 1991년 귀도 반 로썸이 고급 프로그래밍 언어입니다. 이미 하버드와 MIT 등 다양한 대학에서 Python을 컴퓨터과학 입문용으로 가르치고 있으며 위에서 언급하지 않은 edx 라는 플랫폼에서 강의실의 학습내용을 그대로 배울 수 있습니다.

  스크립트 언어로 동적타이핑을 지원하면서 다양한 모듈을 지원해 쉽게 배우고 쉽게 적용할 수 있습니다. 엄격한 들여쓰기는 처음 프로그래밍을 배우면서 지켜야 할 들여쓰기에 대한 개념을 가르치는데 큰 도움을 주며, 읽기 쉬운 언어가 쓰기도 쉽다는 점을 주지시키는데 좋은 언어입니다.


  다만, 2.x 버전과 3.x 버전은 호환이 안되는 단점이 있으며, 처음 가르치는 학생들에게는 현재 많은 예제들이 있는 2.x 버전 보다는 그에 못지않게 많은 예제들도 있고, 앞으로 지향하게 될 3.x 버전을 가르치는 것이 좋습니다. 3.x 버전에서는 문자열을 유니코드로 처리하므로 한글로 변수를 설정할 수 있다는 점이 매우 매력적입니다.(강추!!) 별다른 IDE 필요없이 Python을 설치하고 내장된 쉘을 사용하여 실행 할 수 있다는 점 또한 번거로운 환경설정이 필요없어 편리합니다. 간결한 문법과 높은 생산성, 위의 HTML과 Django 프레임워크를 조합해 강력한 웹 프로젝트를 진행할 수 있는 학습연관성 등 많은 장점을 가지고 있습니다.

  병렬처리와 같은 고급적인 활용에 있어 분명한 단점을 가지고 있지만 프로그래밍의 문턱을 넘는데에는 가장 훌륭한 언어이며, 많은 학생들이 Python을 통해  즐거움을 느낄 수 있었으면 좋겠습니다.



Go

package main
import "fmt"
func main() {
    fmt.Printf("Hello, World!")
}


  2009년 구글에서 발표한 Go 언어 입니다. (바둑아닙니다..) Go 라는 이름으로 구글에서 검색을 하신다면 관련문서를 찾으시기 힘들 겁니다. 주로 검색하실 땐 Golang 이라고 키워드를 바꾸신다면 원하는 자료를 잘 찾으실 수 있을 겁니다. Go 언어는 2009년 발표한 이후 빠른 속도로 발전중입니다. 고루틴을 비롯한 Cooncurrency를 장점으로 점차 그 기반을 넓혀나가는 중입니다. C와 비슷한 정적타이핑을 지원하면서도 Python과 같은 강력한 생산성을 체험할 수 있는 요상한 언어입니다.

  서버사이드 언어로 개발되었지만, Go.js 등 점차 그 영역을 확장시켜 나가는 중입니다. 현재 구글의 주요서비스들이 Go 언어 기반으로 작성되고 있으며 Go 프로젝트 중 가장 유명한 Docker 를 통해 Go 언어의 장점을 발산하고 있습니다.

  현재 Java 기반의 안드로이드도 오라클과의 싸움 결과에 따라 혹은 Go 언어의 완성도에 따라 안드로이드 개발 지원을 통해 또 한번 구글의 힘을 확인 할 수 있을 지도 모를 일입니다. 아직 다른 언어들 만큼 궤도에 오르지 않아서인지 관련 서적이 부족합니다. 하지만 조금의 시간만 구글에 투자하신다면 책보다 더 유용한 튜토리얼 들과 관련 토론들을 맞이 하실 수 있습니다.

  곧 선생님의 시간과 노오오오력만 투자하신다면 미래의 인재를 키워낼 훌륭한 토양이 될 수 있다는 점입니다. Tour of go(http://go-tour-kr.appspot.com/#1)를 통해 한페이지씩 넘겨보시면서 손쉽게 Go 언어의 주요기능들을 체험하고 학습할 수 있습니다.

  또 하나의 문제는 마땅한 IDE가 없다는 점입니다. OS X 혹은 리눅스 계열을 사용한다면 별 문제없이 사용하실 수 있겠지만 윈도에서 개발을 하기 위해 환경변수 설정을 일일이 해줘야 하고 liteide 나 goclipse 등의 IDE가 있지만 조금씩 아쉬운 부분들이 있습니다. Go 언어를 가르칠 때 가장 높은 벽이 아닐까 생각합니다. 물론 위의 페이지에서 간단한 예제를 학습하고 직접 실행이 가능한 점을 이용하여 학습을 할 수 있다는 것이 단점 속 장점이 될 수 있습니다.


  미래의 가능성에 투자하신다면 Go 언어 어떨까요?


C

#include 
int main(void){
    printf("Hello, World!\n");
}


  설명하는 것이 민망할 정도로 잘 알려진 C 언어입니다. C 언어는 1972년 데니스 리치가 벨연구소에서 만든 프로그래밍언어입니다. OS 설계를 위해 만들어진 언어 답게 어셈블리어 만큼 기계적 접근이 가능한 언어로 기계적 특성을 충분히 이해하고 사용한다면 매우 파워풀한 언어입니다. 대한민국에서 컴퓨터관련 전공 혹은 공대 진학을 염두에 두고 있다면 피해갈 수 없는 언어이기도 합니다. 그만큼 산업에서 많이 사용되고, 강력한 성능을 가지고 있습니다.

  컴퓨터 구조에 대해 충분한 이해를 가지고 있지 않다면 포인터를 학습하는 과정에서 좌절을 겪으실지도 모르겠습니다. 그만큼 많은 공대생들이 포인터를 넘지 못하고 프알못으로 진화하게 됩니다.

  공대에서 C 언어란 임베디드와 하드웨어 제어를 위해 가장 필수적인 언어로, 이 언어를 제대로 마스터하지 않고 임베디드를 한다는 것은 어이 없이 멧돌을 돌리는 상황과 비슷합니다.


  초등학생에게 C 나 Go 언어를 가르치는 것은 무리라고 생각되며, 기초적인 지식을 충분히 쌓은 뒤 도전한다면 학생의 미래에 큰 도움이 될 것입니다.


  프로그래밍을 본격적으로 공부하면서 언어에 대한 편견과 편식을 하는 것은 그리 좋은 것은 아니라고 생각합니다. 학생들에게 프로그래밍에 대한 지식을 제공하면서 흥미를 잃지 않을 수 있도록 쉬운 접근성을 제공하고 이후의 활동은 학생 개개인에게 전담하는 방식이 자율적이고 창의적인 인재를 키우는데 큰 도움이 될 것입니다.

+ Recent posts