프로그래밍 언어 개발에 관심 있는 사람들의 모임입니다.
|
2008-07-26 01:26:46
|
RSS 리더를 뒤적거리다가 우연히 이런 글을 읽게 됐습니다. 버그 때문인지 거의 2년이 다 되어가는 글이 리더기에 뜬 것도 참 엄청난 우연이로군요. 글의 끝에서 scheme을 추천한다든가 하는 등의 점에서 꽤 인상적인 글이지만,
이 부분에 대해선 살짝 수긍이 가는 듯하면서도 역시 정말 그럴까 하는 의문이 생기네요. 사실 코딩을 배운 지 너무 오래되어서 글쓴이처럼 거의 실감이 나지 않는 탓인 듯도 하고요. 다만, 타 커뮤니티에서 프로그래밍을 (대부분 C로) 처음 배우는 이들이 프로그래머로서는 상상도 할 수 없을 정도로 어처구니없는 실수를 저지르거나, 언어 자체의 제약에 가로막히거나, 언어 요소 등의 개념을 이해하지 못하거나 하는 걸 보면서 언어의 비 직관성? 복잡성? 같은 것들이 많은 영향을 끼치지 않는가 하는 생각이 듭니다. 얕은 생각일지도 모르지만요···. 랑데부 여러분의 생각은 어떠신가요? 크로이세 님이 2008-07-26 01:27:27에 고쳤습니다. |
트랙백 주소: http://langdev.net/post/trackback/116
글 내용과는 관계없지만 끝에서 추천하는 것은 scheme이 아니라 How To Design Programs라고 정확히 말해야하지 않을까 싶습니다. scheme을 배우는 것과 프로그램 짜는 것을 가르치는 것을 배우는 것은 구별해야 합니다. 배우는 사람은 HTDP가 아니라 scheme에서 거부감을 느끼기 때문이죠.
어쨌든 두뇌가 문제를 푸는 방법은 학습에 따라 달라진다고 봅니다. 어린이에게 가르치는 것이 아닌 다음에야 수학적인 사고방식이 프로그래밍을 익히는데 아마도 가장 도움이 될겁니다. 학교에서 배우는 수학이 문제의 풀이과정에 집중하지 않고 정답만을 요구한다는 측면에서 학교 교육은 실패하고 있는지도 모릅니다.
제 사촌동생은 나름 기술자로 먹고살고 있는 지금까지 수학을 아주 싫어했지만 얼마전에 추상과 미분에 대한 개념을 설명해주니 눈을 반짝이며 듣더군요. 중고등학교때 한번도 그런 것을 들은적도 생각해볼 기회도 없었다는 말이지요.
어린이(또는 기초가 없는 사람)에게 가장 적합하다고 생각하는 언어는 로고라고 생각합니다만 로고도 파고 들어가다보면 추상에 대한 이해가 없이는 더 깊은 진행이 불가능합니다. 결국 프로그래밍을 하려면 수학적인 사고방식을 가르치는 수 밖에 없습니다.
Fortran/Pascal/C 거기에다 Basic같은 폰 노이만 언어의 문제는 가장 필요한 “추상”에다가 “기계에 대한 지식”까지 요구하기 때문에 어려울 수 밖에 없습니다. 그런 의미에서 수박 겉핣기로 배울 것 같으면 Basic보다는 scheme이나 Haskell이 더 좋다고 보고, 더 깊이 배운다고 하더라도 Basic보다는 다른 언어가 좋습니다. Basic이 쉽다는 말에는 결코 동의하지 않습니다. C나 C++보다 라는 말이 앞에 붙는다면 몰라도요.
Basic이 C와 C++보다는 좋은가요?
그런데 SICP를 읽고 있는 제 입장에서 바라보건데 역시 Scheme을 읽기가 좀 난감합니다. 쓸 때는 더 그렇죠. 하다보면 자연스럽게 이어지지 않고 중위식을 많이 쓰다가 전위식을 쓸려니 왔다갔다를 좀 하게 됩니다.
Haskell, Erlang이라면 편할 것 같기는 합니다. 요새 UX가 한창 말이 많은데 UX에서 전위식과 괄호는 제게 치명적이라고 할까요?
그럼에도 Scheme, Lisp을 추종하는 것은 분명 이유가 있을 거라고 생각합니다. Scheme, Lisp을 통해 전에 쓰던 programming을 모두 표현할 수 있을 때 Scheme, Lisp 만이 가능한 새로운 기술을 익힐 수 있나요?
s-expression은 지나칠 정도로 간단한 문법입니다. 오히려 사람에게는 불편할 정도로 말이죠. 하지만 수학적으로 더할 것이 없이 꼭 맞는 의미만을 표현합니다.
별다른 sugar없이 아주 간단히 의미를 표현할 수 있기때문에, 그 틀만 지킨다면 더 복잡한 의미를 만드는 것이 그리 어렵지 않습니다. Haskell이 아무리 쉽다고 해도, Haskell에 Syntax를 추가하거나 Evaluator를 바꾸는 것까지 쉽지는 않으니까요.
그리고 언어가 좋다 나쁘다와 쉽다 어렵다는 완전히 다른 개념이 아닐까요? Basic이 C/C++보다 좋다고 생각하지는 않습니다. 하지만 상대적으로 배우기에 쉬운 건 사실이지요.
아마도 수학 교육의 실패와 동일한 것이 아닐까 싶습니다.
The worse is the better. 교훈을 잊어서는 안 될 거라고 봅니다.
추상 속에서 문제를 푸는 것은 훌륭하지만 결국 대부분의 경우 문제는 현실 속에서 만들어지는 것이기 때문에 추상 속의 문제해결과정이 현실에 어떤 식으로 연결되는지를 이해할 수 있는냐가 중요한 것이 아닐런지요.
최근 뛰어난 수학교육 예가 있어 연결고리를 남깁니다.
http://comicmall.naver.com/webtoon.nhn?m=detail&contentId=15640&no=215
정말로 추상화-문제해결-현실화의 삼박자가 제대로된 교육이 아닐런지요. 마지막 교훈조차도… ^_^
제 경험상 가장 가르치기에 좋은 언어는 Smalltalk인 것 같습니다. 정확히는 Squeak이요. 근데 초등학교 대상으로 했을 때 이야기입니다.
저는 초등학생 동생이 하나 있는데, 그 녀석한테 프로그래밍 교육을 세 번 시도해봤습니다. 할 적마다 다른 언어를 썼구요. 그런데 결과적으로 Squeak을 사용했을 때 가장 효과가 좋았습니다. (근데 어쨌든 세 번 모두 실패하긴 했습니다.) 이 경험에 대해 나중에 한번 따로 글을 뽑아보죠.