2007년 12월 26일 수요일

생각하는 프로그래밍 - 칼럼1 조개 껍질 깨기

정렬은 프로그래밍에서 흔하게 발생하는 작업 중 하나이다. 직접 코드를 짜서 문제를 해결할 수도 있고, 라이브러리를 사용해서 해결할 수도 있다. 이 칼럼에서 주목해야 할 것은 문제의 기술이 상세화 될 수록 더욱 나이스한(?) 해법을 찾을 수 있다는 것이다. 칼럼2에서도 나오겠지만 좋은 프로그래머의 덕목 중 하나인 '바람직한 게으름'이 필요한 이유도 여기에 있다. 더 상세히 문제를 기술하고 조금 더 고민하자.

칼럼1 조개 껍질 깨기 - 조개 껍질이란 우리의 사고가 제한을 받는 영역을 의미한다. 내가 중학교 다닐 때 학원에 다닌 적이 있다. 그 학원 원장선생님께서 칠판에 9개의 점을 찍고는 이 점을 네 개의 선으로 모두 연결할 수 있는 방법을 생각해 보라고 하고는 의미심장한 미소를 지었다. 물론 나는 이 문제를 풀어 보았기 때문에 의미심장한 미소로 화답하였다. 답을 알고 있다는 듯한 내 미소를 알아챈 원장선생님이 나를 불러내어 문제를 풀어보라고 했다.

image

3개씩 3줄로 나열된 9개의 점을 네 개의 선 만으로 모두 연결하는 것은 언뜻 불가능해 보인다. 그 이유는 우리의 사고가 위 그림에서 테두리를 형성하는 8개의 점으로 연결된 가상의 틀 안에 갇혀버리기 때문이다. 해답은 의외로 간단하다. 바로 조개 껍질(사고의 틀)을 깨는 것!

image

첫번째 칼럼에서 저자가 말하고자 하는 바가 바로 이것이다. 흔히 발생하는 정렬이라는 문제 앞에서 일반적인 방법의 정렬이 아닌 비트맵 정렬이라는 획기적인 방법으로 수백 줄의 코드로 일주일동안 작업해야 했었던 일을 불과 20~30줄의 코드로 두 세 시간만에 해결할 수 있었다고 한다.

프로그램을 명세하는 능력 - 프로그램 명세는 누구에게 보여주려고 작성하는 산더미 같이 쌓이는 문서작업과는 분명 다른 것이다 - 과 사고의 틀을 과감히 깰 줄 아는 용기는 범상한 프로그래머에서 범상치 않은 프로그래머로 성장하기 위해 반드시 가져야 할 능력인 듯 하다.

연습문제 12. NASA는 백만 달러의 연구비를 들여 우주의 극한 환경에서 잘 동작하는 필기구를 개발했다고 한다. 그렇다면 러시아는? 왜 꼭 잉크를 사용해야 하지? 연필로 쓰면 되지!^^!

프로그래밍의 달인이 되려는 사람을 위한 책과 영화

전설적인 개발자와의 인터뷰에서 "당신에게 가장 큰 영향을 줬던 책은 무엇인가요?"라고 물어보면 굉장히 허탈한 대답을 듣게 되는 경우가 종종 있습니다. 그들은 개발자이기 이전에 지식노동자이고, 전문가이며, 아버지이고 딸이며, 무엇보다도 인간이기 때문입니다. 그래서 .... 글 전체보기