19 Mar
2010
Posted in: 책갈피
By    5 Comments

맨먼스 미신


맨먼스 미신
by 신영진(YoungJin Shin), codewiz at gmail.com, @codemaru, http://www.jiniya.net

이 책을 이제야 읽었다는 사실이 좀 부끄럽긴 하지만, 어쨌든 이제라도 읽어서 다행인 거겠죠. 이렇게 오래도록 읽힐 수 있는 책을 쓴다는 것. 그리고 급변하는 컴퓨팅 환경에서 아직도 유효한 내용을 많이 담고 있다는 사실에 놀랐습니다.

저자는 숙련된 프로그래머들이 프로그램 작성을 시작하기 전에 판에 박힌 듯이 상세한 흐름도를 만드는 것을 본 적이 없다. 조직에서 요구하는 표준에 흐름도가 포함되어 있더라도 대부분은 프로그램이 실체화된 이후에 만들어진다.

폴 그레이엄 아저씨가 쓴 “해커와 화가”라는 책에도 이와 유사한 이야기가 들어 있습니다. 뛰어난 개발자들은 그림을 그리듯이 프로그램을 작성한다는 이야기였는데요, 제가 현업에서 만나본 대부분의 뛰어난 개발자들도 비슷한 방식으로 일을 하더군요. 모든 설계가 끝난 다음에 코딩을 시작해야 한다라는 이야기를 대학교 수업에 들으면서 참 씁쓸했습니다. 탁상공론의 끝은 어디일까, 라는 생각이 들었기 때문이죠.

순서도만 보여주고 테이블을 보여주지 않으면 오리무중 상태에서 빠져나올 수 없다. 테이블을 보면 대개 순서도는 볼 필요도 없이 모든 것이 명백해진다.

개인적으로 코드 보다는 데이터 구조에 다는 주석을 더 좋게 여기는 이유이기도 합니다. 브룩스 아저씨의 말대로 대부분의 프로그램이 데이터 구조만 이해한다면 코드가 어떻게 돌아가는지는 저절로 이해할 수 있기 때문입니다.

저자는  오랫동안 프로그래머 후보들에게 “다음 11월은 어디 있는가?”라는 질문을 즐겨 해왔다. 질문이 너무 애매해서 이해하기 힘들다고 대꾸하면 “달력에 대한 당신의 정신적 모델에 대해서 말해보라”고 되묻는다. 정말 훌륭한 프로그래머는 뛰어난 공간 감각을 갖고 있으며, 대개 시간에 대한 자기 나름의 기하학적 모델을 갖고 있고, 설명하지 않아도 저자의 위 첫 질문을 잘 이해한다. 그들은 아주 개인적인 모델을 갖고 있다.

책 읽으면서 아! 하는 탄성을 지르게 된 부분입니다. 너무 공감하는 내용이었거든요. 프로그래밍을 가르쳐보면 대부분의 학생들이 어려워 하는 포인터, 재귀호출과 같은 것 들 내지는 리스트, 스택, 그래프, 트라이와 같은 자료 구조를 설명할 때, 뛰어난 프로그래머의 자질을 가진 학생들은 마치 그것들이 처음부터 자신들의 머릿속에 들어 있었던 것처럼 이해를 합니다. 그것에 대한 자신 나름의 기하학적 모델을 가지고 있다는 점이죠. 반면에 그런 모델이 없는 학생들은 구구절절한 비유를 들어서 설명을 해도 제대로 이해하지 못하는 경우가 많습니다. 이런 점은 디버깅을 할 때 더욱 극명하게 나타납니다. 기하학적 모델을 가지고 있는 학생들의 경우는 숫자만 보고도 그것들의 형태를 머릿속으로 재현하는 능력이 뛰어납니다. 반면 그렇지 않은 경우는 DDD 같은 툴을 사용해서 모델을 직접 보여주더라도 왜 그렇게 되는지에 대한 충분한 이해를 하지 못하는 경우가 많습니다.

빈약한 개념 설계와 좋은 개념 설계의 차이는 설계 방법의 견실함에 달려 있을 테지만, 좋은 설계와 훌륭한 설계의 차이는 전혀 그렇지 않다. 위대한 설계는 위대한 설계자만 할 수 있다. 소프트웨어 구축은 창조적인 과정이다. 견실한 방법론은 창조적인 정신에 힘을 주고 해방시킬 수 있지만, 판에 박힌 듯 일하는 사람들에게 불을 지피고 영감을 줄 수 없다.

사람이 전부다 (어쩌면, 거의 전부다)

결국은 모두 사람입니다. 사람, 사람, 사람. 사람이 하는 일이니 사람이 제일 중요할 수 밖에 없는 것 같습니다. 그런데 사람이 제일 어렵죠. 다른 모든 문제는 그 문제가 해결된 다음에나 생각해볼 가치가 있는 것들이 아닐까라는 생각을 저도 요즘 많이 했습니다. 결국 사람이 안되면 죽도 밥도 안되는거 아니겠습니까. 그런데 너무 많은 사람들이 지금 이 순간도 마법 같은 시스템 내지는 방법론을 찾고 있는 것이 현실인 것 같아 조금 안타까운 생각이 들기도 합니다. 어쩌면 사람은 너무 해결하기 힘든 문제라 그런지도 모르겠네요. 시스템과 기계는 그것보다는 다루기가 쉬우니깐염.



Browser does not supports flash movie

  • 트랙백 주소: http://www.jiniya.net/wp/archives/918/trackback

관련 글

    None Found

5 Comments

  • 항상 눈팅만 하다 오늘은 댓글을 달고 있어요;

    “다음 11월은 어디 있는가?”

    이건 번역되었기 때문에 제가 이해하지 못한걸까요?; 아니면 다른걸 비유한건가요?;;

    이런 질문을 받는다면 “8개월 뒤에 있어요” 라고 말할텐데요;;;

  • jhyoon77 // 눈팅만 하셨다니 ㅠㅠ, 앞으로는 자주 댓글 달아 주세욤 ㅎㅎ~~

    제가 원문을 읽지 않아 번역이 잘못된 건지는 모르겠네요. 원문도 “where is next november?” 정도가 아니었을까, 라는 추측을 해봅니다. 질문은 좀 이해하기 힘든건 선문답적인 성격이 짙어서 그런것 같습니다. 이 질문의 의도는 뒤에 있는 구문이 더 잘 설명을 해주는데요. 달력에 대한 당신의 정신적 모델을 말해보라는 부분이죠. 각자 자신이 가진 정신적 모델을 이야기 한다는 의미에서 이것에 대한 정답이 있다고 보기는 어렵습니다. 그냥 추상적인 생각을 잘 하느냐 못 하느냐를 보고자하는 것이 의도로 생각됩니다.

    만약 달력에 대한 정신적 모델을 그냥 수직선으로 가지고 있다면, 시간은 어짜피 연속 선상에서 지나 가는 것이니깐요. 다음 11월은 그 수직선 상에서 현재가 있는 것보다 오른쪽에 위치하고 있겠죠. 만약 달력에 대한 정신적 모델을 아주 큰 테이블로 가지고 있고, 한 줄에 일 년씩을 표기한다면 다음 11월은 다음 줄 오른쪽에 있겠죠. 페이지가 연결된 모습을 생각한다면 뒤쪽 페이지에 있을 거구요. 그러한 추상화된 개념을 논하는 것이 익숙한지에 대한 질문으로 생각됩니다.

    이런 것들이 중요한 이유는 컴퓨터에서 논해지는 대부분의 것들이 실체가 없는 추상화된 개념 들이기 때문입니다. 컴퓨터 아키텍처에서 자주 논해지는 레이어드 아키텍처에 레이어라는 개념에 대해서 생각해 봅니다. 사실 레이어는 그 어디에도 물리적으로 존재하지 않습니다. 단지 그런 개념을 추상화 시켜 놓은 것에 불과하죠. 흔히 블록에 빗대에 설명하는데 사실상 레이어와 블록은 100% 호환해서 설명할 수 없습니다. 레이어는 중간에 뺐다 끼웠다가 되지만, 레고 블록은 그런 점에서 자유롭진 못하죠. 벽돌을 쌓아놓은 것도 마찬가지구요. 사실 순전히 논리적인 개념입니다. 물론 그런 것들 외에도 컴퓨터에서 논해지는 것중에 추상화 되지 않은 것은 거의 없습니다. 윈도우 프로그래밍을 하면 배우게 되는 DC, 비트맵, 폰트, 브러시 같은 것들도 다 추상화된 개념이죠. 이런 것들에 대한 추상화된 모델을 스스로 기하학적으로 표현할 수 있는 친구들은 그렇지 않은 친구들에 비해서 개념을 더 잘 이해하고 그것들을 보다 잘 이용하는 것 같았습니다. 물론 설계를 하는 과정은 말할 필요도 없겠죠.

  • SE 에 대한 정말 가장 큰 오해 중에 하나가,
    ‘설계가 끝나면 코딩한다’ 라는 것 같습니다.
    SE 는 절대로 그렇게 가르치지 않는데 말이죠..

    문제는, 배운 학생들이 그걸 그렇게 오해하는 경우가 있긴 한데, 가르치는 사람이 저렇게 말하는건 좀 -_-;;;;;

  • “그리고 급변하는 컴퓨팅 환경에서 아직도 유효한 내용을 많이 담고 있다는 사실에 놀랐습니다.”
    라는 말에 동감 하고,

    아직도 이 책에서 말하는 문제점들이 수 없이 반복 된다는 것이 안타깝습니다.

  • 아니되. // 미처 생각 못했던 부분인데 그렇네요. 아직도 똑같은 문제들이 수도 없이 반복되고 있죠. ㅠㅜ~

댓글을 달아주세요. 악플보다 무서운게 무플입니다 ㅋ~