프로그래밍을 하면 머리가 좋아져요 뭐 이딴 진부한 얘기는 하지 말고, 뭐든 해보면 좋은거니까, 프로그래밍을 가르쳐보도록 하자.


1. 스크래치



우선은 스크래치로 시작한다.


형형색색 알록달록한 스크래치는 우리같이 머가리가 큰 사람에게는 시시하고 유치해보일수도 있다.


하지만 스크래치는 블록 몇개를 가져다 붙이는 작업만으로도 조그만 게임정도는 가뿐히 만들 수 있기 때문에, 아이들에게는 정말로 좋은 장난감이 될 것이다.


이 단계에서 주의할 점은 '절대로' 이론적인 내용을 가르쳐 주어서는 안된다는 것이다.


스크래치는 한눈에 봐도 조작법을 알기가 쉽기때문에 사용방법만 알려주어도 아이들은 재미있게 갖고 놀것이다.


하지만 아이에게 온 관심을 집중해야 한다.


다음 단계로 넘어가기 위한 적절한 타이밍을 찾기 위해서이다.


2. 파이썬 (Python)




애들도 머리는 점점 커진다.


이제 블록쌓기는 지겹고 귀찮고 시시한 일처럼 보일 것이다.


"나도 해커처럼 멋있게 키보드를 두들기고 싶어요!"


파이썬을 배울 가장 적절한 타이밍이다.


파이썬은 진입 장벽이 매우 낮기로 정평이 난 언어이다. 그리고 파이썬의 문장들은 대부분 스크래치와 호환된다.


예를들어 반복은 while로, 만약은 if로.


이 단계에서 주의할 점은 역시 이론을 가르치지 마라. 절대로라고는 하지 않겠지만 아직까지는 흥미를 유발하는 단계이기 때문이다.


이 단계에서는 몇가지 원칙이 있다.

 1. 가능한 한 다양한 코드 조각을 적어놔라. 아이들은 커녕 프로그래밍을 처음 해보는 사람이라면 어른이라도 아무것도 없는 상태에서 프로그래밍을 하기는 힘들다. 보고 따라할 수 있도록 해라.

 2. GUI를 활용할 수 있는 다양한 코드 조각을 알려주어라. 텍스트를 출력하고 입력받는 일은 그다지 재미있는 일이 아니다.

 3. 에러메시지에 대처하는 방법을 알려주어라. 초보자에게 여러줄의 새빨간 에러메시지는 공포에 가깝다. 에러메시지를 해석하고, 어디에서 문제가 발생한건지 알 수 있는 정도면 된다.


이 단계에서도 아이에게 많은 관심을 쏟아야 한다. 다음 단계로 넘어갈 타이밍을 찾는건 꽤 어렵기 때문이다.


3. C





드디어 여기까지 왔군.


여기부터는 흥미를 유발하는 단계는 지났다.


"진짜 프로그래밍이 하고 싶어요!", "이 코드조각은 어떻게 동작하나요?"


C를 시작할 적절한 타이밍이다.


다만 "왜 Run버튼을 눌러야 실행이 되는거지? 실행파일로 만들고싶어요!"라는 말을 들었다면, 그것은 적절한 타이밍이 아니다.


그때는 pip로 py2exe하는 방법을 알려주면 그뿐이다. 아직 C를 시작할 타이밍은 아니다.


이 단계부터는 본격적인 프로그래밍의 시작이다.


C의 문법을 배우는 것은 매우 지루하고 어렵다. 하지만 매우 가치있고 앞으로 해야할일을 조금씩 줄일 수 있는 완충지대가 될것이다.


이 단계부터는 이론이 중요하다.


파일입출력부터 시작해서, 구조적 프로그래밍, 자동화 도구의 사용법, 프로세스, 네트워크, 디버거의 사용법 등 '프로그래머가 되기 위한 기술'을 가르치자.


C의 문법만 가르쳐서는 "도데체 이것으로 무엇을 하냔 말야!"하며 흥미를 쉽게 잃어버릴 수 있다.


4. Java





자바는 정말 완벽하고, 아름다운 객체지향 프로그래밍 언어이다.


프로그램이 동작하는건 꼭 어셈블리어로 만들필요는 없다고 알려줄 수 있는 기회이다.


jvm이라는걸 살짝 지나가는 말로 알려주자. 그리고 이제는 운영체제에 종속될 필요가 없다는것도!


이때부턴 객체지향의 가능한 한 많은 개념을 알려주는 것이 중요하다.


C의 절차적 프로그래밍은 사람이 생각하는 방식과 닮아있기때문에 별 생각없이 써도 상관 없다.


하지만 자바는 그렇게 하면 코드도 보기 안좋아질 뿐더러 자바를 배우는 이유가 없어진다.


더욱이 객체지향의 많은 개념은 다음 단계로 넘어가기 위해 필수적인 요소가 될 것이다.


5. LISP 또는 Haskell




정말 멀리도 왔군!


스크래치를 가지고 놀기 시작해서 이 단계까지 오기까지 우리 아이는 얼마나 컸을까?


프로그래밍에 정말로 흥미가 있다면 학문적인 관심이 꽤 커졌을것이라 본다.


이 단계는 바로 '함수형 프로그래밍'이라는 충격적인 패러다임을 전해주는 단계이다.


C의 절차적 프로그램이 사람이 생각하는 방식과 닮아있다고?


LISP와 Haskell은 진정한 의미의 '언어'이다. 말하는대로 프로그래밍을 할 수 있기 때문이다.


이를 자연어 매칭이라고도 한다.


또한 이때부터는 프로그램을 계획하는 전략이 달라진다.


간단하고 보기 좋은 코드를 작성하기 위해서는 매우 전략적으로 프로그램을 설계해야 할 것이다.


수학적이고 과학적인 사고방식이 머릿속에 자리하게 될 것이다.




샤워하다가 갑자기 이렇게 하면 괜찮을것 같은데 싶어서 끄적여봤음. 생각보다 길게 썼네.