중학교/고등학교 학생들에게 가르치는 프로그래밍의 기초

yourmemory의 이미지


하루에 3시간씩 3일간, 중학교/고등학교 학생들을 대상으로

"프로그래밍의 기초"라는 이름으로 강의를 하는 봉사활동에 참여하게 되었습니다.

제가 속한 대학교와 지역 구청이 함께 하는 행사이고요.

처음에는 C 프로그래밍과 같은 좁은 의미의(?) 프로그래밍을 강의할 생각이었는데요. 9시간에 기초 지식이 없는 상태의 학생들에게 C를 강의하는 것은 무리라는 의견이 있어서 조금 강의 주제를 바꾸어서 조금 넓게 대상을 바라보고 강의 주제를 선정하려고 합니다.

중학생/고등학생에게 컴퓨터를, 혹은 프로그래밍을 가르쳐 보신 적이 있으신가요? 어떤 경험이셨는지 궁금합니다.KLDP에 중/고등학생 분들도 많이 들어오시던데, 이런 행사에서 어떤 것을 배우면 시간을 잘 보냈다고 생각하실지도 궁금하네요.

lacovnk의 이미지

그 행사 저도 개요를 봤습니다만... 좀 막막할 것 같더군요 ^^;

말씀대로 C는 너무 low-level이에요 -_- 레고 마인드스톰 같은 것이면 좋겠는데 말이죠~

Darkcircle의 이미지

네... 시키면 합니다. (뻥이야~*)

---------------------------------------------------------------
피곤함 1테라톤을 가방 보따리에 주섬주섬 짊어메고 다니는 아이 . . . Orz

---------------------------------------------------------------
폐인이 되자 (/ㅂ/)

Raz의 이미지

과학고 다니는 학생입니다.
저희 학교는 정규수업시간에 JAVA와 C를 배우는데,
학기초에 기초지식이 없던 친구들의 경우 일주일 4시간씩 1년동안 수업을 듣고도
제대로 if문과 for문을 쓰는 녀석이 거의 없습니다. =_=;
물론 다들 수업을 제대로 안듣는다는 문제도 있지만,
역시 기초지식이 없는 상태에서, C를 배운다는건 꽤나 어려운 일인듯 합니다 ^^;

"프로그래밍"의 개념과, C보다는 간단한 언어로 실습..같은걸 해본다면 더 좋지 않을까 싶네요 ^^;
파이썬은 어떨까요?;
----------------------------------------------------
DELL XPS M1530
-Intel(R) Core(TM) 2 Duo Processor T7700
-4GB (2x2G) 667MHz Dual Channel DDR2 SDRAM
-NVIDIA(R) GeForce(R) 8600M GT
http://thegarage.tistory.com

'
----------------------------------------------------
DELL XPS M1530
-Intel(R) Core(TM) 2 Duo Processor T7700
-4GB (2x2G) 667MHz Dual Channel DDR2 SDRAM
-NVIDIA(R) GeForce(R) 8600M GT
http://thegarage.tistory.com

Prentice의 이미지

먼저 저는 초보임을 말씀드립니다. ;)

저학년 학생에게는.. 1에서 9까지 숫자가 하나씩 적힌 쪽지를 주고, 숫자를 섞은 후 쪽지를 모두 뒤집어 놓은 후 한 번에 하나씩 펴보면서 크기 순서로 정렬하게 해보는 것은 어떨까요. 2인 1조로 한 명은 규칙을 만들고 다른 사람은 규칙을 따르고요.. 도움이 되려나요?

JuEUS-U의 이미지

음.... 카드 만장을 가지고 한거긴 하지만,,, ( 부분정렬된 수열에서 최대값 찾기 )
제가 해봤는데 무척 졸렸습니다....;;;
그리고 10장 정도는 쉽게 외워버리기 때문에.... -_-;;;

버려진의 이미지

저는 MS윈도에 딸려 있는 debug.exe같은걸 이용해서 밑바닥을 가르쳐 주는게 좋을 것 같습니다.

그럼 실행파일이 어떻게 돌아가는지도 이해하게 되고, 나중에 게임 에디트나 크랙 만드는데에도 도움이 될 수 있겠구요^^;

jachin의 이미지

Mark-Up Language 를 먼저 가르쳐 주시는 것이 어떨까요?

HTML 과 Javascript 를 가르쳐주시면 쉽게 배우고, 어디에서든 쉽게 할 수 있지 않을까 생각합니다.

C, C++ 도 좋고, Java 도 좋다고 생각합니다.

그 전에 프로그램의 원리를 가르쳐주는 것이 제일 힘든일이 될 것이라 생각합니다. ^^
====
( - -)a 이제는 학생으로 가장한 백수가 아닌 진짜 백수가 되어야겠다.

체스맨의 이미지

중 2 여름 방학때, 그러니까 87 년 ( 무지 멀군요... -_-; )에 선생님께서, 어디였는지는 기억이 안나는데 아무튼 베이식 프로그래밍을 1주일 동안 배울 수 있는 기회를 주셨습니다. 원래 공부 잘하는 애들 보내주는 거였는데, 잘하는 애들이 안간다해서, 기회가 내려오다가 저한테까지 오더군요. 저도 별로 생각은 없었는데, 그 때는 착한 편이어서 아무튼 갔습니다.

지금 기억하기론 당시 강사가 연대 대학생이었던 것 같습니다. 자기 소개를 그리 했던 것 같네요. 지금 기억으론, 당시 강사는, 그냥 책나온 순서대로 입출력, 조건문, 이런 식으로 진도를 나갔던 것 같습니다.

한마디로, 뭘 배웠는지 모르겠더군요.

물론 당시 교육 여건이나 환경, 그리고 컴퓨터 하드웨어 수준도 영향이 있을 것이고, 요즘 학생들이야 다들 컴퓨터가 있는 환경에서 자랄테니 훨씬 익숙한 상태겠지만, 아무튼 당시 강사의 문제점은, 중학생들 눈높이에서 수업을 하지 않았다는 점입니다. 제 생각에는 우선 현재의 평균적인 중고등학생들의 컴퓨터 관련 상식 수준을 파악하는 게 필요할 거라 생각되는군요. 교육 대상이 컴퓨터 프로그래밍에 대한 사전 지식이 있는 경우라면 얘기가 달라지겠지만요.

제 생각으론 프로그래밍 경험이 없는 평균 수준의 중학생들을 위한 수업, 특히 그렇게 짧은 시간동안의 수업이라면, 컴파일이 필요한 언어는 하지 않는 게 좋을 것 같습니다.

유닉스 환경이라면 bash 스크립트 정도만 해도 유용하고 프로그래밍이라는 개념을 맛배기나마 알려줄 수 있을 것 같군요. 윈도우즈면, 좀 그렇긴 해도 배치 파일 작성법 같은 건 어떨 지 모르겠네요. 배치파일이 너무 그러면, 윈도우즈 스크립팅 호스트 ( wscript ) 를 이용한 베이식 프로그래밍 정도... 학생들이 일상적으로 하는 파일 관리 작업들, 예를 들어 일괄 복사나 이름 바꾸기 같은 걸 배치 파일로 하는 거요. 배치 파일에도 조건, 반복문들이 다 있고, 게다가 별도 프로그램 설치도 필요 없으니까요...

제가 너무 중고등학생들 수준을 모르고 있는지도 모르겠군요. 뭐 다들 여기 활동하시는 cppig1995 님 ( 아이디가 맞는지... ) 정도는 아니어도 저 중학교 때 수준하고는 비교할 수 없을 정도로 프로그래밍 로직에 대한 개념을 갖고 있을까요...?

Orion Project : http://orionids.org

yourmemory의 이미지

글쓴이 입니다, 많은 관심(?) 감사드리고요 :)

debug.exe 는 조크라고 생각하겠습니다. ^^;;;;

python 가르치는 걸 진지하게 생각해보고 있습니다.

How to think like a computer scientist with python 이라는 책이 있던데,

나름 기초적인 부분부터 가르치는게 보기에는 괜찮아 보입니다.

근데 사실 이것도 걱정이 많이 되네요. 학생들의 기본 지식이 전혀 없다고 가정해야할텐데 말이에요.

여러분들 의견 더 듣고 싶네요. 답변 해주셔서 고맙습니다!

dingkyu의 이미지

어차피 단 9시간안에는 아무 지식이 없는 아이들에게 그 어떤 언어를 가르쳐도
for문을 이용해 1에서 100까지 더하는 문제도 접근하기 힘들꺼라 생각됩니다.

그보다는 저는 컴퓨터의 기본구조와 그 물리적인 기본구조가
어떻게 논리적인 프로그래밍으로 다룰 수 있는지 그 개념을
가르쳐보는건 어떨까 합니다.

예를들어 컴퓨터는 어떻게 사진이나 동영상을 보여주는가 ?
(애들이니)게임이 만들어지는 대략적인 과정,
또는 구체적인 분야를 나열하고 그에 필요한 프로그래밍 언어를
소개해 주는것도 나쁘진 않을꺼 같네요.

한마디로 프로그래밍을 공부하고 싶은 동기부여인 셈이죠.
아무런 기본지식이 없는 상태에서는
왜 변수라는게 존재해야 하는지,
함수가 뭔지(중학교 애들이면 수학에서의 함수개념도 모르겠네요.)
설명해 봐야 의미있게 전달되리라 생각되지는 않네요.

고민이 많아 고민인 애늙은이 입니다.

linlin의 이미지

유닉스 쉘을 가르치는 것도 방법입니다. regular expression 정도까지 진도 빼버리면 좋은데 문제는 유닉스 쉘은 재미가 좀 없어보인다는 게 있죠.

맛보기로는 scratch가 좋습니다. 설명안해줘도 애들이 잘 알아서 갖고 놀겁니다. http://scratch.mit.edu 참고하시길.

혹은 엑셀을 가르치는 것도 방법이죠. 요즘 애들은 마우스를 안쓰면 뭔가 구닥다리라는 선입관이 있는게 가르칠때 큰 장애인데... 엑셀이 그런면에서는 가르치기 편하죠.

php를 가르치는게 애들에게 재밌고 유용하게는 쓰일 겁니다만 php는 디버깅이 상대적으로 복잡하고 처음부터 client-server 환경을 이해시켜야 하는게 좀 부담입니다.

ironiris의 이미지

프로그래밍을 가르칠 필요는 없어보입니다.

어떤 일을 할때 어떤 알고리즘을 사용한다라는 것을 알려주는 것도 좋지요.

예를 들어 정렬하는 방법에 대해서...

컴퓨터는 이런 저런 제한사항이 있다. 그런데 1부터 10까지 숫자가 뒤섞여있는 것을

컴퓨터라면 어떻게 1부터 10까지 차례로 정렬할수 있는지에 대해서 고민하는 것도 좋을 것 같습니다.

익스체인지소트와 버블소트 정도만 설명해줘도 컴퓨터적 사고를 기르는데는 9시간도 충분하지 싶습니다.

지리즈의 이미지

접근하기가 용이해야 9시간 교육이 효과를 볼 수 있다고 생각합니다.

만약, 집의 컴퓨터에서 별도의 툴등을 설치해야 한고,
설사 툴을 설치해서 자신이 만들어낸 프로그램을 시연하고 싶어도,
환경적인 제한이 계속적으로 따라온다면 동기 부여측면에서 어려움을 겪을 수 있다고 봅니다.

저도 jachin님의 생각과 같습니다.

javascript라면 간단한 알고리듬을 설명하고 그것을 구현하는데 거의 어려움이 없다고 보입니다.

특히 메모장으로 해결될 수 있다는 것과 자신들이 익힌 기술을 쉽게 그애들의 실생활에
적용할 수 있다는 매력이 있죠.

제 생각에는 대부분은 html에 대해서 기초적인 개념들은 가지고 있을 것으로 보입니다.

There is no spoon. Neo from the Matrix 1999.

There is no spoon. Neo from the Matrix 1999.

songuno1의 이미지

학교에서 VB배웠는데, 그것을 계기로 프로그래밍을 하는 즐거움을 가졌어요 ㅋㅋㅋ
뭐, 내용을 가르치는 것도 중요하지만, 프로그래밍에 흥미를 주는 것이 어떨지요 ... ? ㅋㅋㅋ 아무리 괴로워도 놓지 않는 프로그래밍 정신은 그러한 흥미에서 나오니 ㅋㅋㅋ (삽질을 해도 즐거워요~ <-이런 말 나오게)

그 기본기를 몇 가지 가르쳐 주는 것과 여러가지 동기유발을 할 수 있는 커리를 짜는 것이 좋을 듯 하네요 . ㅋㅋㅋ

당신은 당신 나름대로의 가치를 가지기에 소중합니다. /Uno

당신은 당신 나름대로의 가치를 가지기에 소중합니다. /Uno

atie의 이미지

저도 간단한 알고리즘을 가르치는 편을 권하겠습니다.

반복문, 변수와 고정 증가치 반복문, 변수의 초기치가 음수이어야만 변수 증가치가 성립하는 반복문, 그런 몇 가지 간단한 것들을 hello world 후에 직접 생각해 보게 하고 미리 작성한 코드를 결과로 보여 주는 식으로요.

3일차에는 실습에 사용한 언어 외에 다른 언어 몇 가지를 이름과 특징 정도 개괄해 주고, 나머지 시간 동안은 compiz 실행시켜 보여주면 좋겠다는... ^^ 매직 램프 같은 효과는 간단히 변수치만 바꿔서 다른 분위기가 나는 것을 실연해 보여 줄 수 있으니 흥미심 유발에는 효과만점일 듯 합니다.
----
I paint objects as I think them, not as I see them.
atie's minipage

----
I paint objects as I think them, not as I see them.
atie's minipage

d3m3vilurr의 이미지

파이썬과 turtle graph같은건 어떠신지요?
:)

wsmrdo의 이미지

1. 컴퓨터 구조.
1.1 입력 1.2.연산 1.3 출력

2. 컴파일러란. 어셈블러란....

3. 컴파일러의 종류 형식 사용상 차이점.

4. 파이선 특징.

5. 설치.

6. 간단한 용례.

7. 마지막으로 만들어볼 프로그램( 테트리스 정도?)

흠... 각번호당 시간 안배만 하면 가능할거 같네요.

전에 C 한달 강의로 했던거와 비슷한... 일주일 이론하고 나머지 실습했다는 ^^;;

yourmemory의 이미지

많은 관심 감사합니다.

일단은 PowerPoint / Excel / Python 이렇게 3가지를 주제로 잡아 보았습니다.

PowerPoint는 사실상 거의 몸풀기 / 자기 소개 시간으로 보면 좋을 것 같고요.

의외로[?] Excel을 통해서 프로그래밍에 대해서 많은 것을 이야기할 수 있을 것 같다는 생각입니다.

Python은 간단한 문법과, 위에서 말씀해주신 turtle world 를 이용해보려고 합니다.

How to think like a computer scientist, python version을 이용해서 가르쳐보려고 합니다.

많은 관심, 다시 한번 감사드립니다. :)

wsmrdo의 이미지

http://turing.cafe24.com/

음 정석이라 보기는 뭐하지만 왕초보... 참고 할만 할겁니다.

http://wikidocs.net/mybook/read/page?pageid=1
<-- 인터넷 파이선 책입니다.

imyejin의 이미지

역자 동영상 강의도 유튜브에 올라와 있을 겁니다.
MIT 에서 배우던 걸 가르쳐 준다 그러면 추최측에서 좋아할지도? ㅎㅎ

http://blog.insightbook.co.kr/entry/SICP를-공부하는-방법

임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

김일영의 이미지

"욕하지 마세요."
"잠 자고 싶어요."
"월급 주세요."
"개발도구는 사 주셔야 해요. 불법복제 나빠요."
기타 등등.

Raz의 이미지

-_-乃
----------------------------------------------------
DELL XPS M1530
-Intel(R) Core(TM) 2 Duo Processor T7700
-4GB (2x2G) 667MHz Dual Channel DDR2 SDRAM
-NVIDIA(R) GeForce(R) 8600M GT
http://thegarage.tistory.com

'
----------------------------------------------------
DELL XPS M1530
-Intel(R) Core(TM) 2 Duo Processor T7700
-4GB (2x2G) 667MHz Dual Channel DDR2 SDRAM
-NVIDIA(R) GeForce(R) 8600M GT
http://thegarage.tistory.com

codebank의 이미지

구구단을 만드는 소스(어떠한 언어든 상관없이...)를 보여주고 그것을 풀이해주는 것도
재미있을 거고요.
또는 달력 출력하는 방법도 나름대로 어렵지만 재미있을 것 같네요.
보통 아무것도 모르는 사람들의 관심을 끌려면 무언가 나오는 것이 좋습니다.
그런 의미에서 생각해봤는데...
일단 기초적인 언어(Basic, Pascal, Python(?)...)등으로 프로그램이란 무엇인가를 설명해주고
이것 저것... 한다음에 마지막날 PHP나 ASP등을 이용해서 달력을 만들어주는 겁니다. :-)
자신들의 사진을 이용해서 달력을 만든다는건 재미있는 방법이 아닐까요?
아니면 첫날 사진을 이용한 달력을 만드는 방법을 알려주고 어떻게 그렇게 동작하는지를
알려주는 것도 방법중에 하나같네요.
------------------------------
좋은 하루 되세요.

------------------------------
좋은 하루 되세요.

imyejin의 이미지

웹이 돌아가는 기본 구조를 알고 있다면 라이브러리나 템플릿을 불러와서 조금씩 바꾼다든지 그런 게 가능한데, http 나 cgi 가 돌아가는 개념을 프로그래밍 기초 시간에 설명하는 것에는 좀 무리가 있다고 생각합니다.

사실 세상이 너무 발전해서 프로그램을 가르치기가 더 어려워졌다고 말씀하시는 교수님들도 계시더군요. 예전에는 숫자 맞추기 게임이나 텍스트 상에서 간단한 퍼즐을 푸는 것에도 학생들이 흥미를 가지고 쉽게 접근했는데, 요즘은 워낙 웹이나 GUI에 익숙해져 있다 보니 마치 그런 걸 쉽게 만들 수 있는 것처럼 착각한다고요. 사람들이 일상적으로 경험하는 프로그램의 복잡도가 너무 높아져서 오히려 기초적인 프로그래밍에 흥미를 가지기가 더 어렵게 되었다는 것이죠. 그래서 사람들이 지루해 할까봐 GUI RAD 툴로 가르치기도 하는데 부작용(?)이라 애로사항도 있습니다.

비주얼 베이직으로 처음 프로그래밍을 가르치는 수업시간에 대략 난감한 일을 많이 겪었다는 교수님 이야기를 들었는데, GUI나 이벤트 개념도 모르는 학생들에게 프로그래밍 뿐만 아니라 GUI가 돌아가는 원리도 설명해야 하고, 베이직이라는 언어 자체의 아스트랄한 역사적 특성 때문에 Dim 이라는 키워드가 대체 뭐냐고 물어보면 그거 역시 옛날에는 베이직이 타입이 없고 그냥 배열 선언할 때만 Dim 을 썼는데 나중에 타입도 집어넣고 하다 보니까 그냥 예전에 쓰던 키워드를 쓰고 있다는 거, 게다가 Dim 말고 전역변수는 또 다른 키워드를 쓰던가요? 그런 것 때문에 그분은 개인적으로 비주얼 베이직으로 프로그래밍 입문 가르치는 걸 별로 좋아하지 않았다고 하더군요.

일차원적 콘솔이 이해시키기에는 편합니다. 프로그램이 입력을 받는 부분에서는 실행을 멈추고 있다가 입력을 받고나서 진행하니까요. 아니 사실 입출력같이 복잡한 건 나중에 배워야 합니다. 기본적으로 프로그램이라는 게 간단한 수학적 계산을 어떻게 표현할 수 있느냐는 원리부터 이해를 해야 나중에 응용을 하는데 그런 것 없이 일단 돌아가는 것부터 만들려고 하면 나중에는 결국 막힙니다. 배운 것 그대로 베껴 쓰고 인수 좀 바꾸고 폼 좀 바꾸고 하는 수준에서 막히게 되죠. 대화식 환경이 제공되는 언어들이 그래서 프로그래밍 처음 배우는 데는 좋은 것 같습니다. Haskell 이나 Python 이나 쉘 같은 대화식 환경이 나와서 마치 계산기같이 쓸 수 있는 걸로 말이죠.

임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

Raz의 이미지

제가 비주얼 베이직으로 처음 프로그래밍을 배웠는데, 프로그래밍 입문을 비주얼 베이직으로 하는 건 장점도 있고 단점도 있지만 역시 단점이 더 큰 것 같습니다.
기본적으로 폼이 떠있어서 보기좋은 프로그램을 쉽게 만들 수 있으니 지루하지는 않았지만, 뒤에 복잡한 프로그램을 작성하려고 보니 계속 "일단 돌아가는"프로그램만 만들어오느라 쌓인 기초가 전혀 없어서 너무 힘들더군요. 비주얼 베이직으로 프로그래밍을 처음 접하고 한 2년 뒤에 C를 배우기 시작했는데, 적응하는 것이 너무나 힘들었습니다. 근본적으로 "변수"가 무엇인지도 몰랐고, 어째서 문자열은 배열이라는 녀석 안에 들어가 있어야 하는건지, 변수 하나에는 어째서 캐릭터 하나밖에 들어갈 수 없는건지, 그런 기초적인 부분에서 계속해서 혼란을 겪었습니다 -_-.
게다가 비주얼 베이직을 쓰다가 C로 콘솔 프로그램을 만들고 있자니, 너무 답답하더군요. 한참 시간이 흘러서 MFC를 쓸 수 있게 될때까지 "뭔가 만족스러운 결과물"을 전혀 얻을 수 없었으므로, 성취감도 거의 없었거든요.
비주얼 베이직으로 프로그래밍에 입문하는건 별로 추천하고 싶지 않습니다.

p.s. 아직도 비주얼 베이직을 쓸 때는 "그대로 베껴 쓰고 인수 좀 바꾸고 폼 좀 바꾸고 하는 수준"입니다.
근데 다양한 예제를 그대로 베껴서 약간 수정하면 왠만한 프로그램은 다 만들어지더군요. 덕분에 전혀 실력이 늘지를 않습니다. OTL
----------------------------------------------------
DELL XPS M1530
-Intel(R) Core(TM) 2 Duo Processor T7700
-4GB (2x2G) 667MHz Dual Channel DDR2 SDRAM
-NVIDIA(R) GeForce(R) 8600M GT
http://thegarage.tistory.com

'
----------------------------------------------------
DELL XPS M1530
-Intel(R) Core(TM) 2 Duo Processor T7700
-4GB (2x2G) 667MHz Dual Channel DDR2 SDRAM
-NVIDIA(R) GeForce(R) 8600M GT
http://thegarage.tistory.com

cppig1995의 이미지

레고 마인드스톰 NXT에 한 표.



'내가 니를 수 있다면. 정우, 내가 지금 너에게 니를 수 있다면.' - 탈해 머리돌
http://cppig1995.n-pure.net || n-pure media 서버

Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.

zeon의 이미지

모든 학생한테 한 대씩 장비가 돌아간다는 전제 하에...

아니면 하나마나 일 듯 싶네요.

여친이 길르는 용..

appler의 이미지

c도 재미있게 진행한다면.. 아이들이 좋아하겠죠

예를 들어

음악선생님 이쁘다를 한 100번 출력하게 하는거죠

그다음에는
약간의 도형을 넣어서

삼각현 그리는거 있죠?

고런식으로

대학교 가서 소양을 쌓을수 있게 하려면

흥미를 주어야 한다고 생각합니다.

탄생은 죽음의 시작에 불과하다.


laziness, impatience, hubris

不恥下問 - 진정으로 대화를 원하면 겸손하게 모르는 것은 모른다고 말하는 용기가 필요하다.

hongminhee의 이미지

매우 흥미가 가는 글타래인지라 좀 나서보겠습니다; 저는 선린인터넷고등학교를 2007년 2월에 졸업한 사람입니다. 고등학교 2, 3학년, 즉 2년 동안 동기와 후배들(가끔은 선배들도)에게 프로그래밍을 가르쳐왔습니다. 매번 언어를 바꿔서 가르쳤구요. 참고로 이 학교는 신입생이 입학하기 전부터 학교에 등교하게 해서 C 언어를 가르칩니다만, 그 과정에 70% 이상의 학생들이 프로그래밍은 재미도 없고 머리만 아픈 것이라는 선입견을 갖게 하여 얌전히 3년 동안 기초 인문 과목(언외수)에만 정진하도록 부추깁니다.

제가 가르친 대상은 같은 동아리의 사람들이었는데, 그 가운데 3할 정도는 프로그래밍에 흥미가 있거나 이미 경험이 있는(C로 하는 올림피아드 문제 풀이 등) 친구들이고, 또 3할 정도는 아직 프로그래밍에 정이 떨어지지는 않았지만 그래도 아직 재미를 느끼지 못한 친구들, 또 3할 정도는 프로그래밍에 정이 떨어져서 다른 역할을 해보겠다고 하는 친구들이었고, 나머지 1할 정도는 아예 프로그래머였습니다(중학교 때까지 혼자 게임이나 웹 프로그램을 만들다가 특별전형으로 고등학교 올라오는).

제가 열심히 가르쳐본 결과, 프로그래밍 언어를 선택하는 것에 있어서 가장 중요한 것은 프로그래밍이 어렵지 않고 재밌다는 생각을 줄 수 있느냐에 달렸더군요. 그러니까 C가 아무리 기초라고 해도, 재미가 없기 때문에 절대 입문에 좋은 언어가 아닙니다.

제가 2학년 때 동급생을 상대로 가르쳤을 때는 자료형 따위의 개념들을 거추장스러운 존재로 여기지 않게 하기 위해 Python을 선택했습니다. 알다시피 Python은 변수에 자료형이 없을 뿐이지, 객체의 클래스는 분명 존재합니다. 가르치면서 자연스럽게 다형성(polymorphism)의 이점을 느낄 수 있게 해주면 객체 지향 프로그래밍이라는 용어를 알려주지 않아도 객체 지향적으로 작성할 수 있게 됩니다. 그 상태에서 두 달만에 C++를 가르쳤는데 결과는 꽤나 성공적이었습니다. 총 다섯 명이었는데 그 가운데 세 명 정도가 Python을 잘 다룰 수 있게 되었고, 그 가운데 한 명은 C++에 크게 흥미를 붙였습니다.

3학년 때는 1학년 신입생들을 가르쳤는데, 수가 꽤 많았습니다. 이 때는 좀 이상한 방식으로 프로그래밍을 입문시켰는데, 프로그래밍 언어라고는 신입생 교육 2주 정도 때 수박 겉핥기로 배운 C만 알고 있는 애들에게 Python, Ruby, Io, Haskell, Scheme 등의 코드들을 보여주고 가장 쉬워보이고 마음에 드는 걸 고르라고 했습니다. 가장 인기가 많았던 언어가 Ruby였고, 그 다음이 Python이였습니다. 다만 Python을 선택한 친구 하나는 이미 프로그래머라고 부를 수 있는 녀석이라, 입문에 성공시켰다고 말하기 뭐하고, 어쨌든 Python에는 금방 적응했습니다. 나머진 다 Ruby였는데 그 가운데 둘 정도가 프로그래밍에 흥미를 붙였고, 한 명은 요즘도 각종 Ruby 행사 쫓아다니면서 혼자서 잘 공부하고 있습니다. 또, 그 해 중순에 대안언어축제에도 참가했었는데 그 때 계기로 함수형 언어에 흥미를 붙인 친구가 서넛이나 생겼습니다. 결과적으로 입문시키지 못한 후배가 다섯이 안되는데, 대부분 아예 동아리실 출석률 자체가 낮았던지라 가르칠 기회도 별로 없어서 그랬던 것 같습니다.

써놓고보니 요점이 하나도 없는데; 요약하자면 초보에게 프로그래밍에 흥미를 붙이게 하려면 Python, Ruby 같이 타입 노테이션이 필요 없는 언어나 Haskell 같은 함수형 언어가 좋다는 이야기입니다. 함수형 프로그래밍이 이미 프로그래머인 사람들에겐 어색하고 힘들 수 있지만, 아예 아무것도 모르는 애들한텐 그쪽이 더 직관적이거든요.

hongminhee의 이미지

아, 중요한 것 하나를 빠뜨렸군요. 대화형 인터프리터의 유무가 상당히 중요합니다. 이게 없으면 학습 성취도가 무척 낮습니다. 표현식 하나를 선택적으로 평가할 수 있다는 것이 학습에 얼마나 도움이 되는지, 고등학교 때 깨달았습니다. 보통 C/C++/Java 등의 언어를 주로 하시는 분들은 대화형 인터프리터가 뭐가 좋은지 모르겠다고들 하시는데, 어쨌든 적어도 입문자에게는 무척 큰 도움이 됩니다.

d3m3vilurr의 이미지

미투를 찍고 싶을만큼의 이야기네요^^

C언어는 사실 “오래된 언어”이고 이미 프로그래머인 사람에게나 직관적인 개념들이 다수 포함되어 있습니다.
실제로 포인터나, 함수에 대한 개념을 초보에게 설명하는 것은 의외로 어렵습니다.

제가 위에서 파이썬과 터틀그래프를 언급했는데, 그 이유는
1. 파이썬은 대화형 인터프리터를 지원하며, 덕분에 피드백이 빠르다
2. 파이썬 자체는 복잡한 타입형이나, 동적할당, 포인터와 같은 개념이 불필요하다.
3. 터틀그래프는 애초에 어린이들을 위해 만들어진 만큼 직관적이다(각을 바꾸는 것과 직진하는 것이 거의 전부)
4. 터틀 그래프 라이브러리를 이용해서도 충분히 프로그래밍의 많은 개념을 설명할 수 있다(함수 따위)
5. 터틀 그래프의 간단한 인터페이스로도 충분히 고도화된 알고리즘을 구현할 수 있다
(고도의 알고리즘은 아니지만 실제로 터틀그래픽을 이용해서 프랙탈 트리와 같은 것도 그려 봤습니다.)

정도 입니다.

초보에게 설명하는데에 자세한 설명은 필요하지 않죠. 단순히 a = b 가 어떤 개념인지 a == b와 뭐가 다른지 따위만 설명해줘도 됩니다.
흐름제어와 함수 정도까지만 가르키더라도 충분히 재미를 느끼게 할 수 있으니까요.
C언어를 가르킨다면 (동일 개념을 설명하더라도) 상대적으로 진도를 빠르게 나갈 수 없고, 진도가 늦게 나갈 수록 배우는 사람은 흥미를 잃기 마련입니다. 최대한 쉽게, 그러면서도 눈에 보이게 할 수록 좋은거니까요.

JuEUS-U의 이미지

그,,, 이름이 LOGO 였던가??? Kturtle 같은거 말입니다.
그 거북이 짜식을 가지고 노는걸 학생들이 재밌어 할겁니다.
간단한 도형을 그리는건 1시간이면 습득 할 것이고,
프렉탈 쪽으로 들어가면 좀 재밌어 할겁니다.
서울대 영재센터에서 쓰던 Java로 구현된게 있었는데... 지금은 링크가 죽어버렸네요 ㅜㅜ
가능하다면 그 곳 교수님께 요청해서 얻으면 좋을텐데... ( 그게 한글로도 코딩이 가능합니다. )

Darkcircle의 이미지

이를테면 순서도를 통해 간단한 프로그램 하나 만들어보기...
이런것도 중요할 것 같네요.
아주 간단한 더하기 빼기 같은 같은거라도...?
아.. 근데 이러면 정말 재미 없겠군요 Orz . . .
배우는건 쉽지만 가르치는건 역시 어렵습니다...

---------------------------------------------------------------
피곤함 1테라톤을 가방 보따리에 주섬주섬 짊어메고 다니는 아이 . . . Orz

---------------------------------------------------------------
폐인이 되자 (/ㅂ/)

lovethecorners의 이미지

음, 그냥 옛날 생각이 나서 몇자적겠습니다. 학교 다니면서 (아마도 95년도일겁니다) 컴퓨터학원 알바할때, 학원장이 겨울 방학을 이용해 "속성 프로그래밍"반을 편성했었습니다. 월 ~ 금요일까지 5일동안 하루에 두시간씩 베이직을 가르쳐야했었죠. 저보고 알아서 계획세운다음에 아이들 가르치라고....중학생들이었습니다.

일주일동안 뭘 어떻게하나 생각하다가, 결과물이 있어야 아이들이 따라올거라 생각해 성적표짜는 프로그램을 하기로했습니다. 한 10명정도였었는데, 첫날은 그냥 그렇듯이 대부분의 컴퓨터 서적에 나와있는데로 (그것보다는 쉽게) 설명을 했는데 감이 오더군요. 아~~~지루해... 이런거

그래서 그날 밤에 묘안을 찾다가 (대부분의 학생이 여학생이라는것) 방법을 찾았습니다. 그 당시 꽤나 잘 나가는 자기들이 좋아하는 연예인들로 data를 만들라했더니 그냥 막 아이들의 눈이 초롱초롱해지면서 열심히했었습니다. 그 당시만 해도 아이들이 꽤나 순수(?)했어죠...결국에는 결과물을 만들어 내더군요. 그렇게해서 무사히 넘어간적이있었습니다.

지금 아이들은 어떻게 가르쳐야 지치지않고 싫증안내고 잘 따라줄지를 잘 생각하셔야겠습니다.

==
more than one way to do it
말로만 블로거: http://miniz.tistory.com

임창진의 이미지

하루3시간씩 3일 이라는 짧은기간에 학생들에게 프로그래밍을 가르친다는건
일반적인 프로그램밍 지식을 전달하기보다는
흥미와 동기유발에 초점을 맞추는것이 나을듯 합니다.

애자일블로그를 통해서 알게된 viscuit 이라는 비주얼 언어는
상당히 직관적인 패턴매칭 언어이며 , 배우기쉽고 재미있습니다.

http://j2k.naver.com/j2k.php/korean/www.viscuit.com/

yourmemory의 이미지

3일간 9시간의 행사가 모두 끝이 났습니다.

* Excel 기초
* Python 기초(변수, flow control, 함수) + Turtle Graphic

두 가지에 대해서 이야기하였는데, 아이들이 제가 생각했던 것보다 잘 이해해주어서 고맙고 신기했습니다.

Swampy라는 python code 모음에 있는 turtleworld라는 것을 이용했는데, 아이들이 잘 따라오더군요.

간단한 네모, 세모를 그리고, 이를 응용해서 n각형과 원그리는 함수를 작성하는 내용까지 마쳤구요.

시간이 조금 더 있었다면 재귀 그래픽도 하려고 다른 강사분이 준비하셨는데, 거기까지는 이르지 못했습니다.

댓글들을 보니 재미있는 것들이 많이 있네요. 앞으로 비슷한 일을 하게 되면 참고토록 하겠습니다. 감사합니다!

linlin의 이미지

괜찮으시면 발표 ppt 자료 같은 것은 이번 기회에 님 블로그 같은 곳에 포스팅 하시는 것은 어떨지요? 비슷한 프로그래밍 교육 행사에 유용하게 쓰일 것 같습니다.

M.W.Park의 이미지

d3m3vilurr님과 imyejin님의 의견 등등을 묶어서...

PLT Scheme으로 간단히 turtle graphics를 가르치는 것도 좋을 듯합니다.

제가 알기론 어린이들에게 프로그램을 가르치기 위해서 나온것이 turtle graphics(Logo였나?)인 것으로 알고 있습니다.

-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

내가왜리눅스썼지의 이미지

그나마 난이도가 낮은게 octave, python, ruby 등 일겁니다.

사실 중요한 건 (인간지사 당연하지만 ) 나이가 어린 학생일 수 록 바로바로 반응이 나오는 것이냐 라던가 혹은 단기적으로 자신에게 이익이 되냐가 가르칠 떄 중요한 부분인거 같습니다.

(어릴 떄 이런 거 안 해봤나요? 90점 넘으면 PS# 사줄게 라던가 아님 Xbo# 사줄게 라던가.)

이보게 친구, 속도는 생명이라고.
망하면 재수강. Re: 제로부터 시작하는 재수강

thinxs의 이미지

10년 전 글에 와서 굳이 답글을 달 필요는 없다는 게 제 생각입니다.