2009-05-22
02:17
ps. 문자열을 뒤집는 문제에 있어 나 역시 수많은 조건들을 고려하여 함수를 작성할 것이다. 독학했지만 어쨌든 C++을 5년 넘게 써먹고 있으니까... 수많은 에러 처리를 고려하는 습성을 이해 못하는 것은 아니다. 하지만, 그렇게 모든 에러 처리를 생각하는 것이 그 문제의 '핵심'이 아니지 않는가.
주어진 조건이 부족하거나 부적합하다는 판단이 들면 문제 출제자가 잘못했다는 생각 때문에 쉽사리 문제를 풀고 싶은 마음이
들지 않는다. 그런데 그렇게 생각하는 것은 좋지 않다.
지금 한창 이글루의 IT 벨리를 달구고 있는 글 '우리나라 컴공 교육에 대한 생각이 들게 하는 면접'이란 글의 답글들에, 주어진
조건이 완전하지 않아서 문제를 풀기 어렵다는 답변들. 같은 경험을 한 나로서는, 그 경험 이후 내가 무엇을 배웠는지를 얘기해
보고자 한다.
소프트웨어 공학을 들을 때였는데, 숙제로 해야 할 것에서 있어야 할 수많은 조건이 없었다. 그 때,
프로젝트 스케줄링을 하는 것이었나, 그래서 간트 차트 같은 것을 그리는 것이었는데, 아니 무슨 프로젝트같은 것이 진행되고 있어야
그런 걸 하던지말던지 할 것이 아니던가. 그런데 친구를 보니 아예 가상 프로젝트를 만들고, 인원까지 가상으로 누구는 어떻다, 하는
것을 만든 후 그것을 갖고 스케줄을 짜오더군. 그 후 어느 글에서 보았는데, 외국의 어느 곳에서도 이와 비슷하게 주어진 조건이
부족하면 아예 그 조건을 학생들이 임의로 만들거나 다른 작업을 해서 적당히 만든 후 과제를 한다고 한다. 그러니까 가장 핵심적인
것이 제시되면 나머지는 아이들이 알아서 하는 것이지.
'논하시오', 참 어려운 류의 문제이다. MIT 대학원
문제였나에 '물 위를 달려가는 도마뱀의 과학적 측면을 논하시오' 라는 것이 있었다는 것 같고, 위상수학 책의 머릿글에 보면
'[논하시오]라는 문제에 대해 학생들이 매우 어렵게 생각한다는 것을 알고 있다. 그러나 바로 그러한 것이 실제로 하게 될
일들이다. 증명을 할 때, 해가 있는지 알아가지고 '찾는 것'이나 명제가 맞는지 알아서 그것을 증명하는 것은 단지 교과서적인
것이고, 실제로는 명제가 맞는지 틀리는지조차 모르고, 해가 있는지 없는지조차 모르는 경우가 더 많다. 따라서 실제로 문제를
부딪혔을 경우에는 바로 그렇게 '논했던' 일들을 하게 된다' 란 의미의 글이 있었다.
우리가 '실제로'
부딪히는 문제들이란 어떤 것인가? 해결책이 '딱' 정해져 있는가? 아니다. 어떤 조건들이 필요한지 처음부터 모두 알려져 있는가?
아니다. 그런 일은 교과서의 친절한 연습문제에서나 가능한 것이고, 실제로 현실에서 해결해야 할 문제들은 그렇지 않다. 처음부터
조건이 완벽하게 주어지는 것도 아니고, 해결책이 첫눈에 보이는 것도 아니다. 문제의 가장 핵심적인 것을 파악한 이후 그것을
해결하는 과정에서 어떠한 조건들이 더 필요한지, 어떠한 조건은 부차적인 것이고 어떠한 조건은 반드시 필요한 것인지 등이 명료해지기
시작한다. 따라서 문제를 해결할 때는, 특히나 배우는 과정에서는, 불완전한 조건을 불평하면서 자신의 게으름을 합리화하려는 함정에
빠지지 말고, 주어진 것이 결국 '핵심'적인 것일테니 그것을 갖고 우선 해결한 후 추가적 조건에 따라 어떤 식으로 해결책이 바뀔
것인지에 대해 논하는 정도가 적당할 것이다.
심지어 실제로 어떠한 문제를 해결하다 보면 조건이 완벽히
갖추어지지 않는 경우가 더 많은 것 같다, 경험 상. 그럴 때는 포기하는가? 아니다, 그나마 주어진 조건에서 할 수 있는 최대한의
것을 하려 하는 것이다. 즉, 구할 수 없는 몇몇은 '가정' 하거나 다른 방법으로 '추정'한다. (그래서 요즘 ill-posed
problem 을 해결하는 regularization 을 공부하고 있다) 그 이후 그것을 갖고 작업을 계속 하는 것이다. 아직도
계속되고 있는, 말초혈관으로 가는 혈액량을 측정하는 방법. 환자들을 찍었는데, 환자들은 발쪽에 감각이 없어서 움직이고도 안
움직였다고 한다 >_<" 한 10분 정도를 찍게 되는데, 중간에 움직이면 이미지 분석을 할 수 없단 말이야... ㅜ.ㅜ
나는 그래서 그런 것들은 죄다 빼 놓았는데, 같이 하는 누나가 보더니 일단 그런 데이터도 넣고 값이 너무 이상하게 나오지 않는
이상 쓸 수밖에 없다고... 또는 현재 microarray 로 하는 일들, RNA와 단백질 양이 일치하지 않는다는 것쯤이야 잘
알고 있지. 여하간에 microarray 의 한계를 잘 알고 있지만 어쩔 수 없는 걸, 현재 우리가 갖고 있는 기술 중 그나마
대량으로 단백질량을 추정할 수 있는 것이 그것밖에 없으니까 (MS도 있긴 한데 DB가 적다) 한계를 알고 있으면서도 사용할
수밖에.
여하간에 경험한 바로는, 주어진 조건이 명확하지 않거나 부족한 경우가 더 많았고, 그래서 적당한
방법으로 추정하거나 가정해서 문제를 해결하게 된다. 그러니까 '조건이 부족합니다'라는 것은 딱 교과서 안에서나 가능한 얘기.
ps. 문자열을 뒤집는 문제에 있어 나 역시 수많은 조건들을 고려하여 함수를 작성할 것이다. 독학했지만 어쨌든 C++을 5년 넘게 써먹고 있으니까... 수많은 에러 처리를 고려하는 습성을 이해 못하는 것은 아니다. 하지만, 그렇게 모든 에러 처리를 생각하는 것이 그 문제의 '핵심'이 아니지 않는가.
'배움' 카테고리의 다른 글
부딪히고, 계속 밀고 나가기 (2) | 2010.10.20 |
---|---|
문제는 왜 쉬워 보이는가 (0) | 2010.10.02 |
시나브로 변하는 것이다 (0) | 2010.06.03 |
앎의 두 가지 방식 (2) | 2010.06.03 |
머리는 어디에 써야 하는가 - 컴퓨터의 한계 (1) | 2010.05.26 |