engfordev Blog

English For Developers

사람들은 프로그래밍 자체를 배우고 싶은게 아니에요!

※ 원문 및 번역에 관해 궁금하시면~ http://opentutorials.org/course/167/1388

사람들은 프로그래밍하는 법 자체를 배우고 싶어하는게 아니에요. 제 생각에는 프로그래밍을 잘 하는 사람들이 프로그래밍을 가르칠 때 몇 가지 문제점이 있는 것 같아요. 프로그래밍 튜토리얼에 보면 보통 앞부분에 프로그래밍 관련 개념들이 나오죠. 변수나 루프, 데이터형 등등이요. 이런 내용을 가지고 가르치기 시작하는 것이 당연하게 보이겠지만, 사실은 프로그래밍을 가르치기에는 적절하지 않은 방법이에요. 왜냐고요? 사람들은 프로그래밍을 배우고 싶어하질 않거든요.

돈을 내고 프로그래밍 교육을 받으려는 사람들에게는 이런 방법이 적절할 수도 있어요. 하지만 대부분의 사람들은 다릅니다.

프로그래밍에 흥미가 별로 없는 사람들이나, 호기심 많은 어린 학생들에게는 변수나 루프 같은 개념이 별로 재미없어요. 이들은 알고리즘이나 자동으로 형을 변환해주는 게 어떤 건지에 대해 관심이 없어요. 이들은 슈퍼마리오나 트위터, 앵그리버드 같은 것을 만들고 싶어할 뿐이죠. 라이언 노쓰의 공룡 만화에는 이런 점이 잘 나타나 있습니다. (여기 누르면 확대)

프로그래밍을 가르치는 분들, 프로그래밍 튜토리얼을 만드는 분들에게 다섯 가지 조언을 드리겠습니다.

1. 자동화된 개발 도구(Kit)로는 프로그래밍을 할 수 없습니다.

시중에는 소프트웨어를 만드는 자동화된 개발 도구 같은 것들이 많이 나와 있죠. 마우스로 드래그앤 드랍을 하면서 프로그램을 만드는 거죠.

하지만 사람들은 이런 프로그램에 한계를 느낍니다. 이런 개발도구로는 간단한 어플이나 게임을 만들 수는 있지만 유연성이 부족해서 만들 수 있는 것에는 한계가 있습니다. 우리에게 필요한 것은 이미 완성된 장난감이 아니라 레고 블럭입니다.

(십대들이 Scratch라는 개발도구 프로그램을 사용하는 것은 열렬히 지지합니다. 그 나이대에는 타자로 코드를 치는 것이 큰 장벽이 되거든요. 하지만 다른 개발도구 프로그램의 경우에는 지지하지 않습니다.)

2. 작은 프로그램을 만드는 예제를 사용해보세요. 만들었다고 자랑할 만한 것으로 말이죠.

프로그래밍 책이나 튜토리얼에는 대부분 예제가 들어있기는 합니다. 하지만 보통은 하나의 함수나 개념을 설명하는 파편적인 내용이죠. 프로그래밍을 가르치려면 이렇게 해야 하기는 하지만, 문제는 아무도 프로그래밍을 배우고 싶어하지 않는다는 거에요.

저는 “파이썬으로 컴퓨터 게임 만들기”라는 책을 썼는데요, 이 책에는 “숫자 맞추기”나 “틱택토” 같은 간단한 게임의 전체 소스 코드를 제공합니다. 그리고 이 프로그램이 어떻게 작동하는지 설명하죠. 처음에는 프로그래밍 개념을 몇 개 익힌 후에, 개념 몇 개에 대한 예제를 다룹니다. 각 장의 내용은 잘 동작하는 게임을 중심으로 합니다.

(“파이썬으로 컴퓨터 게임 만들기”는 http://inventwithpython.com에서 무료로 읽을 수 있습니다.

처음에 나오는 프로그램의 길이는 50줄 이하입니다. 그러나 나름대로 완성된 프로그램이라서 괜찮습니다. 이걸 앱스토어에다 팔 수는 없어요. 하지만 사람들에게 보여주고 자랑할 정도는 되죠. 완성된 프로그램을 다루면서 프로그래밍에 관한 개념을 설명하고, 개념을 깊게 파고들면, 학습자에게 학습을 계속할 동기를 부여할 수 있어요.

이 책에서는 게임 프로그램에 나오는 코드를 가지고 설명하다보니, 기존의 프로그래밍 책과는 다른 순서로 개념을 소개하기도 합니다. 하지만 괜찮아요. 초보 프로그래머들은 개념을 어떤 순서로 배우는 지에 대해 신경쓰지 않습니다. 그리고 독학용 튜토리얼을 쓰는 경우라면, 어차피 보는 사람은 순서대로 보지 않고 이곳저곳 넘기면서 봅니다. 그러니 개념을 다루는 순서가 섞여도 별 문제가 안됩니다.

3. 초보 프로그래머는 따라쟁이입니다. ( 그러니 따라할 것을 많이 주세요)

저는 초등학교 3학년 때 베이직을 배우기 시작했습니다. 특별한 사람들이나 프로그래밍을 배운다고 생각하는 사람들이 이 얘기를 들으면 ‘우와~’ 할지도 모릅니다. 근데 말이죠, 프로그래밍을 배운 후 몇 년 동안 제가 만든 프로그램은요, 그 전에 본 프로그램을 약간만 변경해서 만든 것들이었어요. 이 프로그램 안에 들어있는 것이라고는 아무 숫자를 집어넣은 print, if문이 대부분이었죠.

초보자들은 자기가 본 프로그램과 비슷한 프로그램들을 만듭니다. 왜냐하면 초보자일 때에는 독창적인 것을 만들어내는데 필요한 충분한 경험이 부족하기 때문입니다. 그래서 프로그래밍을 가르칠 때에는, 학습자에게 다양한 예제를 주고, 따라해보게 도와주는 것이 좋습니다.

(“파이썬으로 뭔가 만들기”에는 여러가지 프로그램들이 들어 있습니다. ‘동전 던지기’ 게임, 문자열을 다루는 행맨 게임, Bagles, 2D 데카르트 좌표를 사용하는 게임, 간단한 암호화 프로그램 등 ) 학습자들이 프로그램 작동 방법을 완전히 이해하지 못해도 괜찮습니다. 학습자가 따라할 수 있도록 여러 가지 예제를 주면, 학습자는 이 소재로 다양한 프로그램을 만들 것입니다.

4. 제가 만든 프로그램을 보여드리죠.

MIT에서 운영하는 Scratch 프로그래밍 환경에는 좋은 점이 있는데요, 학생들이 만든 프로그램을 직접 공유할 수 있게 해 놓았다는 거에요. 프로그래밍 자체를 하고 싶어하는 사람은 없어요. 사람들은 멋진 프로그램을 만들고 싶어하죠. MIT에서 하는 것처럼, 자기가 만든 프로그램을 커뮤니티와 쉽게 공유할 수 있으면, 프로그램을 만들고 싶다는 동기부여가 될 겁니다. 뿐만 아니라, 여러가지 사례 프로그램들이 공유되면, 다른 사람들이 보고선, ‘나도 나만의 프로그램을 만들어야지’하는 영감을 받을 것입니다.

Pygame.org 웹사이트에는 사이드바가 있는데요, 여기에는 사람들이 올린 게임들이 소스와 함께 계속 업데이트됩니다. 이 게임은 다른 학습자를 위한 예제 역할을 하죠. 결국 사람들은 이 프로그램을 보고 배우기도 합니다. 바로 이런 점 때문에 Pygame이 Pyglet이나 다른 파이썬 게임 프레임워크보다 더 인기가 있다고 생각합니다.

5. 초보 프로그래머에게 ‘객체지향’ 등의 개념을 들이대며, 혼란스럽게 하지 마세요.

이미 충분히 말했습니다. ‘재귀, 정규식 표현, MVC, 네트워킹, 파일 입출력 같은 것들’ 이런 것들은 훨씬 나중에 가르쳐도 늦지 않습니다. 학습자가 자기 프로그램을 몇 가지 만들어본 후에 이런 개념을 배워도 늦지 않습니다.

코드의 끝에 세미콜론을 찍는 걸 기억해야 한다는 걸 재밌다고 느낄 사람은 없어요. 사람들은 프로그래밍하는 법을 알고 싶은게 아니에요. 그들은 프로그램을 만들고 싶어할 뿐이죠.

추가:

“파이썬 어렵게 공부하기”라는 훌륭한 책의 저자인 제드 쇼가 해커 뉴스에 다음과 같은 코멘트를 남겼습니다.

“아니죠. 제가 말하고 싶은건, 아무도 “어려운 것”을 공부하고 싶어하지 않는다는 말은 신화일 뿐입니다. 제대로 가르치기만 한다면, 사람들은 어려운 걸 공부하고 싶어 합니다. 이 기사에 나온대로 한다면 나중에는 프로그래밍에 완전히 흥미를 잃은 사람들만 남게 될 거에요. 그래픽, 게임, 귀여운 만화 등을 총동원한다고 해서 사람들이 공부하고 싶게 만들 순 없습니다. 사람들을 깨우치게 하기 위해 억지로 하게 만들거나 속임수를 사용하지 마세요.

하지만 더 중요한건 저는 제 신념을 뒷받침하는 증거를 갖고 있어요. 그러나 이 기사에는 증거가 전혀 없어요.”

제드 쇼가 좋은 지적을 해주었습니다. 저는 이렇게 답변했어요.

“안녕하세요 제드. 저는 알이고, 이 기사의 저자입니다. 제목이 좀 과장되었다는건 인정합니다. 물론 프로그래밍 자체만을 위해 프로그래밍을 배우고 싶어하는 사람도 있어요. 심지어 즉시 쓸모가 없다 하더라도 수학을 배우는걸 좋아하는 사람들 처럼요.

저는 토요일 아침마다 10대 초반 어린이들로 구성된 소규모 수업에서 프로그래밍을 가르치고 있고, 10 여명의 학생을 대상으로 스탠포드 스플래시 프로그램에서 두어번 특강을 진행하기도 했습니다. 단순히 루프나 각 언어의 고유한 성질이 뭔지 설명하는것보다, 학습자들이 만들고 싶어하는게 무엇인지 최종 목적을 염두에 두는 것이 그들을 더 잘 이끌어 갈 수 있다는걸 알게 됐어요. 파이썬과 루비는 학습 단계에서 언어의 고유한 성질을 언급하는걸 최소화할 수 있기 때문에 학습용으론 최적입니다.

그리고 저역시 프로그래밍에 흥미를 갖게하는데 그래픽이나 귀여운 만화가 도움이 될거라고 생각하지 않아요. 제 책 “파이썬으로 프로그램 만들기”는 마지막 몇 개의 장을 제외하면 아스키 텍스트 형식의 게임으로 만들었습니다. 이러한 것들은 자기 게임/프로그램을 다른 사람에게 자랑하기에는 꽤 낮은 수준인데요. 그러나 아직 아무도 자신의 코드 조각들을 보여주진 않았잖아요.

오라일리에서 나온 “파이썬 공부하기”와 같은 책보다 “파이썬 어렵게 공부하기”의 최대 장점은 책의 내용을 최소한의 개념으로 줄였다는데 있다고 전 생각합니다. “이렇게 입력하세요. 이렇게 보여야 해요. 이런 일이 일어난 거에요.” 반면에 대부분의 다른 컴퓨터책에서는 한 문장으로 줄여서 표현하거나 통째로 들어내도 될 문단들을 나열하곤 하는데, 이에 비하면 최고죠. “파이썬 어렵게 공부하기” 책은 기껏해야 200 페이지 정도밖에 되지 않아요. 600 페이지에 달하는 다른 책들에 비하면 훨씬 이해하기 쉬워요.

컴퓨터 과학을 전공하지 않았거나 프로그램을 배우는데 전념할 필요가 없는 학생들로 구성된 수업을 할 때에는, 학생들이 공부하고 싶어 하는 것이 개념 자체가 아니라 그러한 개념을 이용해서 뭔가 만들고 싶어 한다는 것이라는 것을 잊어버리곤 해요. 작은 게임이나 웹 애플리케이션은 거기엔 최적이에요. 당신의 책 22번 예제에서 말한 것처럼, “생각할 필요없이 단순하게 외우기만 하는 이와 같은 예제를 공부할 때에는, 왜 그렇게 해야 하는지 이유를 아는게 중요합니다. 그렇게 함으로써 목표에 집중하고 당신이 노력해야 하는 목적을 깨닫게 하는데 도움이 됩니다.