상세 컨텐츠

본문 제목

유치원생 아들에게 프로그래밍 가르치기

etc

by ryujt 2011. 12. 24. 13:19

본문

겨울 방학 동안 아들 넘 프로그래밍을 가르치기로 해서 오늘이 두 번 째 날이었습니다.  보통 프로그래밍 입문하면 피할 수 없는 프로그램이 있습니다.  바로 "Hello, World!" 라고 할 수 있는데, 사실 저는 이는 잘못된 접근 방식이라고 생각합니다.  문자열을 설명하는 것 자체가 상당히 곤혹스러운 일이기 때문입니다.  그냥 "처음에는 일단 외우고 시작하자!" 라는 방식도 어느 정도 효과를 걷을 수 있긴 하지만, 개인적으로는 선호하지 않습니다.

일단 프로젝트 생성 및 저장 등 기본적인 준비는 제가 해주고, begin end. 사이에만 집중하도록 하고 있습니다.

저의 첫 번째 예제는 Write(1 + 2) 입니다.  Write가 실제 의미하는 것과 출력을 살펴보면서 아이가 직관적으로 Write가 하는 일을 알 수 있게 되기 때문입니다.  괄호가 필요한 이유는 설명하지 않았습니다.  모든 것을 다 설명하려다 보면, Write 자체에 집중하기 어려워지기 때문입니다.  이후 자신이 계산하고 싶은 것들을 입력하게 하거나, 가족의 나이를 전부 더하는 것을 미션으로 주었습니다.

두 번 째 날에는 문자열에 대한 설명을 시작하였습니다.  우선 첫 번째 수업의 복습으로 123456789 + 123456789 를 계산하도록 하였습니다.  결과에서 이상한 점을 찾아보라고 하니, 찾아내더군요 ^^*

문자열에 대해서는 우선 Write(1 + 2)를 출력하게 하고, Write('1 + 2')를 이어서 출력하도록 했습니다.  아이가 혼란스러워하더군요.  그래서, 설명을 해주었습니다.  따옴표로 감싸주면 "네가 입력한 그대로 써라(Write)"  그리고, 따옴표가 없으면 "계산한 결과를 써라" 라고 몇 번 반복시키고 차이점을 계속 느낄 수 있도록 하였습니다.  문자열이라는 명칭을 알려주기는 했으나 외울 필요없으니 그런게 있구나 하고 넘어가도록 했습니다.  "입력한 그대로" 만을 잊지 않도록 반복시켰습니다.

다음은 반복문을 통해서 호기심을 유발할 수 있는 예제가 있는데, 이것이 델파이에서는 문제가 되는 군요.  델파이와 같은 일반적인 언어에서 반복문의 수준이 너무 높기 때문입니다.  루비의 경우에는 5.times 와 같이 직관적인 방법이 제공되는데 참으로 아쉽습니다.  최대한 쉬운 반복문을 표현하기 위한 것이 미리 함수를 만들어 두는 것이었고, 사용방법은 아래와 같습니다.
repeat
  WriteLn('*');
until RepeatCount(3);

// 미리 만들어 둔 RepeatCount 함수
var
  _RepeatCount : integer = 0;

function RepeatCount(Count:integer):boolean;
begin
  if _RepeatCount = 0 then _RepeatCount := Count;
  Dec(_RepeatCount);
  Result := _RepeatCount <= 0;
end;

이런 저런 언어를 두고 고심을 많이 했지만, 모든 경우가 제가 원하는 수업 방식에 맞지 않았습니다.  그래서 직접 교육용 언어를 만들고 있었는데, 아들에게 그 언어를 통해서 가르칠 만큼 준비가 되지 않아서 일단 델파이로 가벼운 시작을 하고 있습니다.  내년에는 개인 사업을 시작하기 때문에 교육용 언어 개발은 더욱 지연이 될 거 같네요 ㅠ.ㅠ

여하튼 초보자들을 가르치다보면 가장 힘든 것은 그 수준에 맞춰서 진도를 유지하는 것과, 초보자가 숙련자에게 너무 당연한 것에 대해 의문을 가질 때 그것을 설명해줘야 하는 경우 입니다.


관련글 더보기