|
문제
- 죽음의 행진 2008.11.05
- 프로그래밍 심리학 2008.02.04 4
- 소프트웨어 공학의 사실과 오해 2007.10.06 2
- 대체 뭐가 문제야? 2007.08.08
- 알고리즘 1 2007.08.05
죽음의 행진
프로그래밍 심리학
지금으로서는 찾아 보기 힘든 천공카드에 대해 얽힌 이야기라거나, 실행시켜볼 코드를 보내놓고 회송시간을 기다린다거나 하는 이야기들이 있어서 이 책을 읽는게 지금에 와서 무슨 소용일까라고 생각할 수도 있습니다. 그러나 책을 보면, 과거의 프로그래머들이 해 왔던 고민들이나 어려움들이 현재의 기술도구로 해결되지 않는 부분이 상당함을 알 수 있습니다.
저자는 각 장에 후기를 보태며, 자신이 전에 펴냈던 내용에 대한 아쉬움을 밝히거나, 기저에 깔려 있던 이야기들을 고백하고 있습니다. 어쩌면 딱딱하게 보일 수 있는 주제임에도, 책 중간에 곁들여지는 제랄드 M. 와인버그의 유머는 그런 긴장을 풀어줍니다.
쓰는 사람의 내공이 나타나는 책을 읽을 때마다, 저자의 생각을 이렇게 먼 거리에서 책이라는 매개체로 나눌 수 있다는 점이 독자로서 느낄 수 있는 큰 행복입니다. 관리자, 프로그래머, 테스터 등 소프트웨어 관련 업계에서 일하고 계신 분이라면, 자신이 평소에 유지하던 "프로그래밍"이라는 행위에 대한 생각의 외연을 넓힐 수 있는 기회라고 생각합니다.
소프트웨어 공학의 사실과 오해
제일 감명 깊게 읽은 곳은 오해의 마지막 부분입니다. 교육에 관련된 오해인데요. 저도 처음에 프로그래밍 언어를 배울 때나, 아니면 특정한 프로그래밍 언어를 가르쳐 주는 책을 볼 때면 이런 이런 문법을 설명해 줍니다. 그 다음에 연습문제로 이런 이런 코드를 짜 보라고 하죠. 이렇게 많은 책에서 설명하고 있기 때문에, 그렇게 프로그래밍 언어를 학습하는 일이 당연한 것처럼 느꼈습니다. 우리가 어떤 언어를 학습할 때에 쓰기는 가장 끝 부분에 배웁니다. 읽는 법을 알아야, 쓰고 나서라도 자신이 쓴 문장을 읽는 일이 가능합니다. 그런데 프로그래밍 언어를 가르치는 쪽의 경우에, "코드 읽기"라는 부분에 대해 관심도가 떨어진다는 느낌이 듭니다. "코드 읽기"는 다른 사람이 썼던 코드를 인수받아야 할 경우나, 아니면 자신이 몇 달 전에 작성했던 코드를 분석할 때와 같이 쓸 일이 있음에도 말이죠.
이 책에서는 각각의 사실 또는 오해에 대해 "토의-논쟁-출처-참고문헌"의 구조로 짜임새 있게 이루어져서 자신이 관심있는 사실 또는 오해를 더 탐구할 수 있도록 열어두고 있습니다. 특히 오해 부분에서는 이 오해들을 읽더라도 화를 내지 말 것을 주문하는 문장이 기억에 남았습니다. 소프트웨어 부문의 문제를 지적하고, 설명하며, 문제를 보는 새로운 관점을 건넨다는 점에서 유용한 책이라고 생각합니다.
- 10을 굳이 5+5로 풀어 쓴 이유는 Fifty Five, Five + Five 처럼 F의 반복을 통해 저자가 책을 멋지게 보이려고 한 노력입니다. 자세한 내용은 책의 서론을 참고하시기 바랍니다. [본문으로]
대체 뭐가 문제야?
우리는 일상에서 늘 문제와 접하고 있습니다. 그러나 우리가 문제 자체에 대해 깊게 생각하는 일은 쉽지 않습니다. 왜냐하면 우리는 문제를 풀기에도 바쁘기(또는 바쁜 것처럼) 느껴지기 때문입니다. 이 책은 우리에게 "무엇이 문제인가?"라는 질문을 던짐으로써, "문제"에 대해 넓은 시각을 획득하게 합니다.
책의 각 장이 모두 주옥같은 교훈을 담고 있지만, 가장 마음에 들었던 장은 폴란드에 있는 할머니를 만나려 하는 여자 분의 이야기가 담긴 장이었습니다. (몇 장인지는 정확히 기억이 나지 않네요.) 제일 감동적이었고, 도움이 많이 되는 장이었죠.
이 책 또한 컨설팅의 비밀처럼, 이야기를 통해 글의 전개를 풀어 나가는 방식을 취하고 있습니다. 그래서 책 내부에는 이야기와 관련된 익살스런 삽화들이 수록되어 있죠. 그래서 책을 읽는 내내 즐거운 이야기를 듣는다는 마음으로 읽을 수 있었죠. 문제와 마주치는 사람 누구든 한 번 읽어 보실 것을 권하고 싶은 책입니다.
알고리즘 1
1.1-1 정렬 문제가 발생하는 현실 세계의 사례에는 사전 표제어 들이 멋대로 흩어진 데이터에서 국어같으면 ㄱ, ㄴ, ㄷ.. 순으로 정렬해야 하고, ㄱ 내부에서는 ㅏ, ㅑ, ㅓ.. 순으로 정렬해야 하는 문제가 발생한다. 영어사전이라면 맨 처음 글자를 a, b, c .. 순으로 정렬하고 바로 다음 글자도 앞과 같은 순으로 정렬해야 하는 문제가 발생한다.
1.1-2 속도 외에 효율성을 평가할 만한 다른 척도에는 소모하는 메모리 공간, 알고리즘이 요구하는 통신 대역, 알고리즘이 요구하는 하드웨어 자원 등이다.
1.1-3 자료구조
연결리스트 장점은 자료의 추가와 삭제가 빠르다. 단점은 특정 데이터를 찾으려고 할 때 순차적으로 찾아야 하므로, 느리다.
1.1-4 최단 경로 문제와 순회 판매원 문제는 거리를 계산하고, 짧은 경로를 목적으로 한다는 점이 비슷하다. 다른 점은 최단 경로 문제는 출발지에서 목적지로 가는 경우이지만, 순회 판매원 문제는 물건을 여러 지점에서 판매하고 다시 원래 지점으로 돌아온다는 점이 있다. 최단 경로 문제는 효율적 해결 방법이 있으나, 순회 판매원 문제는 어느 정도 좋은(최적의 알고리즘은 아닌) 해결 방법이 있다.
1.1-5 최적의 해만이 의미 있는 문제: 전자 상거래에서 보호가 필요한 정보를 안전하게 관리하는 알고리즘
근접한 해를 구해도 충분한 문제: 인터넷에서 특정 정보가 있는 페이지를 검색하는 알고리즘
이 글은 스프링노트에서 작성되었습니다.