소프트웨어에 대한 새로운 시선 그리고 통찰력

소개

이 책은 ‘공부’를 목적으로 하는 책이 아니다. 프로그래밍과 조금이라도 관련이 있는 사람이라면 이 책을 한손에 들고 다른 한손으로는 과자를 먹으면서 마치 소설책 읽듯이 읽을 수 있는 책이다. 책의 뒷장에 보면 실제 소설도 들어있다. 책의 구성은 프로그래밍에서 중요하게 생각하는 객체지향, 디자인 패턴, 리팩토링, 소프트웨어 공학, 그리고 XML 5가지의 주제로 나눠져있다. 부분부분 소스코드도 나오지만 그렇게 어렵지 않게 읽을 수 있다. 꼭 프로그래머가 아니더라도 일반인이 읽어도 다양한 인사이트를 얻을 수 있을 것이라 생각한다. 예를들면, 에자일 같은 경우 인생에 적용해 볼 수 있으며, 건축학과 법학에서 파생되는 프로그래밍과 같이 재밌는 이야기들이 많이 존재한다. 새로운 인사이트를 원하는 사람은 읽어보길 바란다.

현재 이 책 같은 경우 절판되어 구매할 수 없다. 중고사이트나 도서관을 통해 빌려봐야할 것이다.

인사이트

개인적으로 가장 재미있었던 부분은 “디자인 패턴 부분”이다. 객체를 프로그래밍의 꽃으로 만들어 준 “디자인 패턴” 부분은 아주 인상 깊었다. 특히, 디자인 패턴의 개념이 건축학에서 파생되었다는 점이 가장 재밌었다. 정말 연관 없는 건축학과 프로그래밍이 만나 어떻게 조합이 되는지 볼 수 있었던 것 같다. 뿐만아니라 XML도 법률에서 파생됐다는 것을 봤다. 역시 어떤 인사이트를 갖고 접근을 하느냐에 따라 새로운 것들이 파생 될 수 있구나를 다시 한번 생각했던 계기가 되었다.

임백준 저자의 책을 읽을 때마다 느끼지만, 정말 프로그래밍을 좋아한다는 생각이 들었다. 또한, 저자가 책을 많이읽다보니 책의 흐름이나 구성등이 지겹지 않아 좋았던 것 같다. 특히, 마지막 k씨의 하루는 저자가 구성한 소설이다. 처음에는 소설이 아니라 실제 있었던 일을 풀어 쓰는 줄 알았다. 마지막 k씨의 하루의 구성이 재밌었던 점은 베르나르베르베르 의 아버지들의 아버지와 같이 홀수 챕터와 짝수 챕터를 다른 시작점으로 시작해 결국 마지막에는 만나는 이야기형식으로 구성되어져있었던 점이다. 어떤 원리인지는 모르겠지만, 이런 구성 참 재미있다 생각했는데 임백준님께서 이런 방식을 이용해 소설을 썼다는 것 자체가 신기했다.

좋은 구절

애자일의 개발 선언에 대한 이야기를 보자. 지금부터의 방법론은 프로세스 자체나 두툼한 문서를 위해서가 아니라 소프트웨어 프로젝트의 진정한 성공을 위해서 거듭 태어나야 한다는 것이 ‘선언’의 근본적인 문제 의식이다.

사용자의 요구사항이 수시로 ‘변경’ 되는 것은 그들의 남다른 변덕이나 악의적인 의도를 가지고 있기 때문이 아니다. 자본주의 경제 시스템에서 시장의 요구와 비즈니스의 방향이 수시로 변화하는 것은 너무나 자연스러운 일이기 때문에 한번 합의된 사용주의 요구사항이 영원히 고정되어 있을 것이라고 믿는 것은 터무니 없는 착각이다. 만인의 합의하에 확정된 요구사항이라도 시장의 변화로 인해서 달라져야 한다면, 그것은 달라져야한다. 어제의 요구사항에 기초해서 이미 소프트웨어를 설계하고 구현까지 마쳤기 떄문에 요구사항이 고정되어 있어야 한다고 주장하는 것은 비현실적인 독선이다.

같은 마크업 언어라도 HTML과 XML은 결정적인 차이를 가지고 있다. 그것은 바로 HTML에서 사용되는 태그는 미리 정해져 있지만, XML에서 사용하는 태그는 미리 설정되어 있지 않다는 점이다.

“별로없다” 와 “없다”는 말을은 같은 의미가 아니라는 것, 개발을 책임지는 사람은 다른 사람의 ‘조언’을 무비판적으로 수용하지 말아야 한다는 것, 방향이 잘못되었음을 꺠달았을 떄는 개발이 진행되고 있을 떄라도 끝까지 싸워서 바로 잡아야 한다는 것 등의 상념이 떠올랐다.

프로그램이란 결국 수라는 완전무결한 존재에 인간의 의지가 개입한 결과물에 불과하는 것이 그의 생각이었다. 수와 관련된 법칙을 인간은 ‘발견’하지만 ‘발명’할 수 없다. 수는 인간의 구성물이 아니라 이미 존재하는 무엇이라는 점에서 순결하다. 수에는 버그가 없지만, 인간의 의지는 버그로 가득 차 있다. 그래서 컴퓨터 프로그램은 본질적으로 완벽할 수 없다는 생각을 한다.

90년대 남들이 짠 알고리즘을 처음부터 다시 짜서 조금이라도 더 효율적으로 만들어보겠다는 치기어린 고뇌가 있었고, 뜨거운 도전이 있었다. 그 때는 앞서 지나가는 사람이 문을 닫고 가면 뒤의 사람이 처음부터 오직 자신의 힘으로 닫힌 문을 열어야 하는 시절이었다. 문을 여는 방법은 이미 지나간 사람과 함께 사라졌으며 닫힌 문을 스스로 열지 못하는 사람은 그 자리에서 돌이 되거나 아니면 원래의 자리로 되돌아 가야했다. 하지만 인터넷이 등장하면서 모든 것이 달라졌다. 어디를 가든 문은 활짝 열려 있었고, 갈 길은 사방으로 통해있었다.

인터넷을 효율적으로 이용하는 것이 프로그래머의 생산능력, 즉 내공을 향상시키는 일과 밀접한 관련이 있다는 점을 인정했다. 다만 그와 같은 검색은 게으르고 무분별한 베끼기와 구별되는 창조적 이용이 되어야만 했다.

그의 자존심을 건드리거나 코딩 스타일에 대한 문제제기로 이어질 수 있기 때문이었다. 프로그래머들은 코딩 스타일에 대한 문제제기로 이어질 수 있기 때문이었다. 프로그래머들은 항상 자신의 지적 능력에 대한 자부심으로 꽉 차 있는 존재 이기 때문에 자부심을 잘못 건드리면 쉽게 분노를 자아낼 수 있다.

같이 읽으면 좋을 책 추천

나는 프로그래머다