BLOG ARTICLE htdp | 1 ARTICLE FOUND

  1. 2012.09.12 [SICP] 바른 가르침과 배움에 대한 해답

출처 : http://sigma6.tistory.com/78

바른 가르침과 배움에 대한 해답, SICP와 HTDP - 2

김재우 (kizoo@bluette.com)

SICP 현황과 문제점
SICP의 철학과 우수성은 앞에서 충분히(물론 완벽할 수야 없지만) 설명했다고 본다. 이제 그 문제점과 대안을 알아볼 차례가 됐다. 세상에 완벽한 해결책이란 없는 법이다. 우선 이 멋진 책(또는 과정)을 얼마나 많은 대학에서 쓰고 있는지 살펴보자.

현재 SICP를 가르치는 대학은 약 100여개 정도 된다. 나라 별로 그 수가 많은 것부터 늘어놓아 보면 단연코 미국이 가장 많다. 미국은 모두 93개 대학으로 컬럼비아, 코넬, 프린스턴, MIT(당연히) 등이 여기에 포함된다. 그리고 영국에서는 옥스포드를 포함해 총 7개 대학, 독일은 9개 정도다. 이어서 이탈리아와 덴마크가 각 2개, 네덜란드·핀란드·벨기에·스페인이 각 한 개씩인 것으로 되어 있다. 

아시아권은 그 수가 적다. 여기에는 우리나라도 물론 포함되어 있다. 일단 일본은 동경대, 싱가포르는 싱가포르 국립대에서 이 과정을 채택하고 있고, 우리나라에서는 KAIST(이광근 교수), 고려대에서 채택하고 있다(그리고 등록되어 있지 않지만 창원대(이수현 교수)에서 SICP를 가르치고 있다는 사실을 들어서 알고 있다). 또한 현재는 다른 과정으로 대체됐으나 한때 부산 동아대학교에서 1995년부터 신입생 프로그래밍 강좌로 이 강좌를 개설해 한 해 5개 강좌 약 300명이 수강하기도 했다.

총 100여개에 이르는 대학이 한 대학에서 개발한 과정을 채택하고 있다고 보면 여전히 많은 축에 속하기는 하지만 예전만큼 ‘강호를 평정’하고 있다고 하기는 어렵다. 지난 10여 년간 SICP를 채택하거나 적어도 Scheme을 실습 언어로 선택하는 대학이 많이 줄어든 것이 사실이다. 이는 많은 대학에서 이 분야의 급격한 기술 변화를 무시하지 못하고 예전처럼 유행하는 프로그래밍 언어를 가르치는 방식으로 돌아섰기 때문에 생긴 결과라 하겠다. 그러나 이런 슬픈 현상을 추세 탓으로만 돌릴 수는 없는 법이다. SICP를 채택한 이후에 겪게 된 여러 가지 문제점이 그런 변절(?)의 빌미를 제공했다고도 볼 수 있기 때문이다. 

SICP의 문제점은 2002년에 발표된 참고자료 ③에 비교적 잘 설명되어 있다(SICP 방식의 교육에 깊은 관심이 있는 사람이라면 그전에 참고자료 ④의 논문을 읽어 보는 것이 좋다). 이 논문에서 몇 가지 눈에 띌 만한 것을 나름대로 정리해 보면 이렇다(아마도 SICP를 약 4장 정도까지라도 따라가 본 사람은 이 논문이 주장하는 바를 공감할 수 있을 것이다).

SICP의 가장 큰 문제는 과정 자체가 너무 어렵다는 데 있다. 프로그래밍 자체가 어려운 것이야 당연한 것이지만 프로그래밍 기법을 설명하기 위해 드는 예제들이 문제다. 
SICP는 컴퓨터를 전공하는 학생들만을 위한 기초 서적이 아니다. 프로그래밍이 꼭 필요한 분야라면 전공에 관계없이 채택할 수 있는 기초 기술 서적(또는 과정)이다. 특정 분야에 치우침 없이 고루 응용할 수 있는, 다양한 문제와 해법을 다루고 있기 때문에 전산 전반에 걸친 기초 기술 모두를 한 번씩은 짚고 넘어간다고 봐도 틀린 얘기가 아니다. 

게다가 완성도가 높아서 분야별 사전 지식(domain knowledge)을 먼저 학습하지 않고서는 문제 자체를 이해할 수 없는 경우가 대부분이다. 균형 잡힌 지도를 받지 못한다면 초심자들은 이 책이 전문 분야 지식과 프로그래밍 기법 중 어느 쪽에 중점을 두고 있는지 알아차리지 못할 가능성이 높다. 

처음 배우는 이를 더욱 당혹스럽게 만드는 점은 이 책의 ‘보물찾기’ 식 내용 구성이다. 프로그램 설계를 그 어느 서적보다 중요하게 다루지만 드러내어 떠들지 않는다. 너무 고상한 방법으로 목표를 달성하려고 하다가 선문답식 가르침이 되어버린 셈이다. 가르치고자 하는 모든 것을 예제 속에서 엮어 놓았기 때문에 배우는 사람 스스로 그 참뜻을 찾아내려 애써야 한다. 

사실, 학생 대부분은 숨겨놓은 교육 의지(제대로 프로그래밍하기)를 찾아내지 못하고, 표면 지식(이를테면, 언어 그 자체나 특정 응용 분야)에 더 중점을 두기 쉽다. 만일 가르치는 사람조차 그 의도를 충분히 알아차리지 못하면 당연히 이 문제는 더 심각해진다. 내용상의 연계성을 고려하지 않고 교육 의도―‘왜 그렇게 프로그래밍 하는 것이 옳은가’를 충분히 전달할 수 없다면, SICP는 주어진 예제를 단순히 풀어내려가는 평범한(그러나 아마도 아주 혹독한) 훈련으로 전락할 수 있기 때문이다(이런 문제 때문에 이 과정을 제대로 이끌어갈 수 있는 교수진을 구성하기도 어렵다). 

HTDP와 Dr. Sheme
『How To Design Programs』(이하 HTDP)는 앞에서 설명한 SICP의 여러 가지 문제점, 특히 다음과 같은 문제점을 개선하는 데 중점을 두고 만들어 낸 책(또는 교육 과정)이다. 

◆ 특정 분야 지식을 과하게 요구할 뿐만 아니라 그 지식을 설명하는 데 너무 많은 지면을 할애한다.

◆ 프로그램 설계를 드러내 가르치지 않으므로 학생들에게 교육 목표를 제대로 전달하는 데 어려움이 많다.

더 자세한 개발 동기 및 설계 원칙, 교수법 등에 대한 설명은 참고자료 ③에 잘 정리되어 있으므로 참고하기 바란다.

HTDP를 쓴 저자들은 모두 PLT(Programming Language Technology,http://www.plt-scheme.org/who)라는 단체의 구성원들이다. PLT는 다양한 Scheme 구현을 제공할 목적으로 만든 자원 단체로 현재 EdScheme 또 MzScheme 등을 개발해 배포하고 있다. 특히 이 그룹에서 개발한 Dr. Scheme은 재미있는 소프트웨어다. Dr. Scheme은 여러 Scheme 구현 위에 돌아가는 일종의 Scheme IDE라 할 수 있는데, 애초부터 교육 용도로 개발된 것이다. 그래서 프로그래밍 훈련의 재미와 효과를 높일 수 있는 여러 가지 기능을 갖추고 있다. SICP 같은 과정과 Dr. Scheme 같은 실습 소프트웨어는 정말 찰떡궁합이라 할 수 있다. 

HTDP와 우리 프로그래밍 교육
필자는 우리나라의 많은 교육 기관이 이론 교육과 실무 기술 교육 사이의 균형점을 찾지 못하고 우왕좌왕하고 있다고 생각한다. 컴퓨터 공학(과학)과 정보 처리학은 엄연히 다른 것인데도, 하나의 과정 속에 분별없이 섞어놓고, 학생들이 어디로 가야 할지 해답의 실마리를 쥐어 주지 않는다. 취업 문제로 고민하는 학생들에게 나름대로 해결책을 제시하기 위해 실무 기술을 가르치겠다는 의지 자체는 충분히 공감하는 바다. 그러나 기존 교육 체계는 그대로 두고서 실무 기술 교육을 강화하겠다는 것(교육 내용만 살짝 바꿔치기하겠다는 것)은 헛된 바람이다. 

『The Pragmatic Programmer』(참고자료 ⑤)의 서문에 쓰인 말대로, 개발자 능력은 기초 컴퓨팅 이론 바탕 위에 다양한 실무 프로젝트를 개발하는 경험이 쌓여서 배양된다. 설령 철저한 실무 교육을 목표로 하는 교육 기관이라 할지라도 기초 이론 교육을 무시한다면 좋은 인력을 길러낼 수 없고, 이론 교육이라고 해도 실무 기술과 연계성을 주의 깊게 고려해 가르치지 않으면 쓸모 있는 바탕 교육이라 할 수 없다.
이런 점에서 HTDP가 추구하는 프로그래밍 교육의 원칙은 주목할 만하다. 프로그래밍의 원리 교육과 실무 기술 훈련이 하나의 과정 속에 어떻게 배치되어야 하는지 한 가지 해법을 제안하고 있기 때문이다. 참고자료 ③은 HTDP가 추구하는 프로그래밍 교육 목표를 다음과 같이 기술하고 있다. 

변하는 기술 환경에 빠르게 적응할 수 있고, 수십 년 동안 소프트웨어 관련 직종에서 살아남을 수 있는, 유능한 소프트웨어 개발 인력을 양성하는 것이 프로그래밍 교육의 목표다.

너무 뻔한 얘기라서 식상하기까지 하지만, 우리네 교육기관 중 저 목표를 향해 땀 흘려 달리는 곳이 과연 몇 군데나 될까? 참고자료 ③에서는 이와 같은 교육 목표를 달성하기 위해 다음과 같은 구조로 교육 과정을 구성하는 것이 바람직하다고 주장한다. 이 제안에 따라 교육 과정을 그려보면 <그림 1>이 나온다.

프로그래밍 커리큘럼은 근본 원리를 가르치는 데 중점을 두어야 한다. 그리고 첫 해 두 번째 학기와 마지막 학년에서 산업이 요구하는 기술에 적응할 수 있도록 실용 기술을 훈련한다.

<그림 1> The Structure and Interpretation of Computer Science Curriculum에서 제안하는 교육 과정
Picture 3.pdf

이와 같은 제안이 우리네 교육 기관이 처해있는 여러 가지 문제를 정말 해결해 줄 수 있는지를 함부로 판단할 수는 없는 법이다. 그러나 SICP나 HTDP와 같은 해법이 프로그래밍 기술의 본질을 바로 알고 더 나은 프로그래밍 교육을 시도하는 가치 있는 실천임에는 의문의 여지가 없다고 믿는다. 

독자에게 드리는 선물
여기까지 글을 읽어준 독자에게 몇 가지 선물을 드릴까 한다. 이 글에서 소개한 두 권의 책은 모두 웹에 전문이 올라와 있다.

◆ http://mitpress.mit.edu/sicp/
◆ http://www.htdp.org

앞에서도 말한 바 있지만 SICP를 제대로 익히려면 좋은 선생이 필요하다. 한데 다행스럽게도(그리고 매우 고맙게도) 저자(Harold Abelson) 및 다른 MIT 교수진의 SICP 강의를 동영상으로 보고 들을 수도 있다.

◆ http://www.swiss.ai.mit.edu/classes/6.001/abelson-sussman-lectures/

강의도 들을 수 있고 책도 마련했으니 이제 실습용 프로그래밍 환경만 있으면 완벽하다. 이왕 책이 권하는 대로 Scheme을 써보기로 했다면, 다음 주소에서 Dr. Scheme을 내려받을 수 있다(실습 언어로 꼭 Sheme을 써야 하는 것은 아니지만, 다른 언어를 쓴다고 해도 책을 읽고 예제를 풀기 위해 Scheme 코드는 정확히 읽고 이해할 수 있어야 한다).

◆ http://www.drscheme.org

이제 이 공개된 보물지도로 보물을 찾아 나설지 말지는 온전히 독자의 몫이다.

정리 | 송우일 | wooil@korea.cnet.com

    참 고 자 료
 ① Harold Abelson and Gerald Jay Sussman with Julie Sussman, "Structure and Interpretation of Computer Programs," MIT Press 

 ② Matthias Felleisen, et. al, "How To Design Programs," 2003, MIT Press 

 ③ Matthias Felleisen, et. al, "The Structure and Interpretation of Computer Science Curriculum," 2002, http://www.informatik.uni-kiel.de/~mh/publications/reports/fdpe02/ 

 ④ Philip Wadler, "A Critique of Abelson and Sussman : Why calculating is better than scheming." SIGPLAN Notices 22(3)(1987) 83-94 

 ⑤ Andrew Hunt, David Thomas, Ward Cunningham, The Pragmatic Programmer: From Journeyman to Master, Addison-Wesley 
 

    'LISP' 카테고리의 다른 글

    [SICP] 바른 가르침과 배움에 대한 해답  (0) 2012.09.12
    YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST