요즘 책으로 있는 프로그래밍 챌린지(Programming Challenges) 문제들을 다시 풀어보고 있다. 대략 내년 초중반까지 책에 있는 거 정도는 다 풀어보는게 목표인데, 문제가 적진 않아서 가능할지는 모르겠다. 사실 책에 있는 좀 쉬운 편이라 분량과의 싸움이 될 듯 하다(반면 http://acm.uva.es/problemset/ 여기에 책에 있는 모든 문제들을 포함해서 다양한 문제들이 있는데, 대단한 난이도의 문제들이 많다).

풀다보니까 예전에 이 책의 번역서가 생각났다. 지인이 번역서를 가지고 있길래 한번 보고 나서 경악을 금치 못했다. 모든 문제의 해답이 다 책에 있었다. 이런 문제들은 누구나 알다시피 해답을 보지 않고 풀어야 의미가 있다. 그런데 밥 떠먹여 주듯, 책에 모든 해답이 다 있는데 정말 문제들과 책의 가치를 떨어뜨린다고 생각한다.

크게 문제점이 두가지가 있다. 첫번째는 해답이 너무 쉽게 얻을 수 있기 때문에 아무런 노력 없이 쉽게 해답을 얻을 수 있다는 것이다. 책을 제대로 살펴보진 않았지만, 아마 책에는 해답을 보기 전에 충분히 풀어보라는 말이 있을 것이라 예상된다. 하지만 해답을 제공 한다는 사실 자체로 무의미하다. 극단적인 예로, 1시간이면 풀 수 있는 사람이, 50분 동안 끙끙 대다가 아쉽게 해답을 보는 경우가 있을 것이다. 10분만 마저 고민했으면 풀 수 있었을텐데, 해답을 보는 것 자체만으로 많은 의미가 사라진다. 자신의 머리속에서 나온 것과 해답을 보고 해결하는 것은 정말 큰 차이다.

또 다른 측면으로는 사실 대부분의 문제들이 검색을 좀 하면 답이 있을 텐데, 그러한 최소한의 노력도 없이 얻는 결과라고 하겠다. 실제로, 나이어린 질문자들이 있는 게시판에 가보면, 질문 글을 적어 놓구선 (아마도 자긴 너무너무 바빠서) 다시 게시판을 들어오기가 싫은지, 이메일로 답변 해달라는 사람이 있다. 전형적으로 노력을 거의 하지 않는 상황인데, 이런 문제를 푸는 것도 아무런 노력 없이 해답을 얻는 것은 정말 잘못된 일이다.

두번째 문제는, 예전에 블로그에 쓴 것과 비슷하다(거짓말과 착각, 그리고 오픈 소스). 해답을 보고 나서 자신이 풀었다고 착각하게 되는 상황이다. 세상의 많은 일들이 그러하지만 간단한 문제를 푸는 것도 때로는 아주아주 사소한 아이디어를 떠올리는 것이 중요할 때가 있다. 그 하나가 해결 안되서 우왕좌왕 하고 있는데, 아이디어 하나로 모든 상황을 역전 시킬 수 있는 상황은 많다.

문제 풀이도 마찬가지다. 그러한 아이디어를 생각해보고 고민해보는 것이 프로그래밍 훈련의 목적인데, 단순히 좀 끼적댄 다음에 안된다고 해답보고나서 '난 한 줄 밖에 안봤어, 나머지는 내가 다 짠거야' 라고 스스로 대견해 해봤자 사실상 별 의미가 없는 것이다. 때로는 그 한줄 때문에 그런 프로그래밍 문제를 낸 것일 수도 있다. printf( "%d" 치는거야 누구나 다 아는 것인데, 이런거 노가다했다고 문제 푸는데 기여를 했다고 할 순 없을 것이다(물론 여러 사람이 일을 할때는 이런 노가다고 기여라고 할 수 있지만...).

ACM 문제를 풀지 말라는 말이 있다(서광열님의 블로그 - ACM 문제 풀지마라). 실제 업무에서는 해답이 없는 경우가 많은데, ACM 문제처럼 해답이 정해져 있는 상황은 창의력에 오히려 방해가 될 수 있다는 것이다. 실제로 그렇다. '이 문제를 과연 누군가 해결 할 수 있긴 할까?' 라는 생각을 하는 것과 안하는 것은 문제 해결 능력에 큰 차이가 있다[1].

하지만 ACM 문제들.... 그것도 쉬운 문제들을 모아둔 책에, 해답을 끼고 있어야만 안심이 되는 상황은 끔찍할 정도로 문제가 있는 상황이다. 창의적인 측면에서 보면, '창의적인 문제 > 해답이 있는지 모르는 문제 > ACM 문제 >>>> 해답 있는 ACM 문제' 가 될 것이다.

누구나가 교육에 문제가 있다고 외치는데, 내가 느끼는 근본적인 문제는 이런 창의성을 죽이는 것들이다. 모든 문제들/교육이 정형화 되어 있고 패턴을 찾아 가장 효과적인 결과를 뽑아내는 것에만 관심이 있고, 모든 일에 해답이 있고, 해답을 적어 내는 것에만 관심이 있는 현재 우리나라의 교육 상황에 빗대어 생각해보면 좀 오바하는 것일까?? 그럴지도 모른다. 하지만 내 기준으로는 여전히 이런 해답 달린 프로그래밍 문제는 무의미할 뿐만 아니라 아주 해롭다고 생각한다.

혹자는 이렇게 말할 것이다. '책을 가지고 있는 사람이 안보면 되는 것 아니냐? 스스로 안보고 정말 필요할때만 참고 하면 되는 것인데, 이건 선택의 폭을 넓혀 주는 것일 뿐 전혀 해로운 것이 아니다.'

만약, 공부하려고 (혹은 프로그래밍하려고) 컴퓨터 켰다가 인터넷 서핑하느라 2~3시간 소비한 적이 한번도 없는 사람이 이런 말을 한다면 (그 사람에 한 해서) 동의하겠다.

  1. 그런 의미에서 보면, 프로그래밍도 증명의 필요성을 느끼게 된다. 증명을 해서 이 프로그램이 정확하게 동작할 수 있는지를 확신 시키는 것은 때에 따라서 매우매우 중요하다. Genetic Algorithm/Programming, Dynamic Programming 같은 분야들이 그렇다. 언제 프로그래밍과 증명에 대해서도 글을 써볼까 생각중이다. - 사실 그러기에는 내가 공부해야할 분량들이 너무 많다. -_-;; [본문으로]
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2008/10/19 01:13 2008/10/19 01:13

트랙백 주소 :: http://www.hybrid.pe.kr/tt/trackback/404

  1. Subject: 엔하늘의 생각

    Tracked from nala2sky's me2DAY 2009/07/27 11:12  삭제

    꼭 해답이 있어야 하나?(번역서 이야기) - 일리 있는 이야기이다. 주어진 정답은 창의성의 최대 적. 하지만 자신이 풀어본 답과 비교하는 과정을 통해 미처 생각해 내지 못한 것들을 배울 수 있는 기회가 될 수도 있다.

댓글을 달아 주세요

  1. asfasf 2008/10/22 20:22  댓글주소  수정/삭제  댓글쓰기

    댓글 좀.. ㅜ_ㅜ

  2. asfasf 2008/10/22 20:22  댓글주소  수정/삭제  댓글쓰기

    댓글 좀.. ㅜ_ㅜ

  3. diziso 2008/10/25 19:57  댓글주소  수정/삭제  댓글쓰기

    ㅎㅎ 공부하려 컴퓨터 켰다가 인터넷 서핑.. ㅋㅋ 공감 입니다.

    그리고 정답 보는 묘미는 역시 내가 푼거랑 다른 답을 볼때죠 ㅋ

    • Hybrid 2008/10/25 21:27  댓글주소  수정/삭제

      오... 중요한 점이네요.. 정말 내가 푼거랑 다른 답을 볼때 정말로 배우게 되죠..

  4. 파타시 2008/10/26 13:12  댓글주소  수정/삭제  댓글쓰기

    아아... 고민1시간하다가 풀때의 그 쾌감!.. 쾌감이라니까 좀 이상하긴하지만ㅋㅋ...
    아아 저같은경우는 단기간안에 많은 문제를 풀기위해 아예 해답을 통째로 전부 다 외어버린적이 있지만..
    아아~ 어째 공부는 머리가 좋아야 되라는 말이 나이먹을수록 공감이가네요..
    물론 머리가 다는 아니지만.. 머리가 의외로 꽤 많은 부분을 차지하더군요..

    • Hybrid 2008/10/26 14:30  댓글주소  수정/삭제

      원래 그런 쾌감의 맛 때문에 프로그래밍도 하고 수학도 하는거 같습니다. 그런데 요즘에는 그런거 없이 그냥 정담외우고 정답 맞추는 기분만 느끼는 사람이(그것만 느끼려는 사람이) 많아서 아쉽네요.
      머리는... 제 생각에는 여러가지 환경 문제나 노력 문제라고 생각합니다. 뭐 주위에 진짜 머리 좋아서 잘하는 사람들도 있긴 한데, 극히 소수를 빼고는 다들 자기가 열심히 해서 잘되는 경우더라구요.

[로그인][오픈아이디란?]