<A Philosophy Of Software Design> 후기

Roeniss Moon·2023년 3월 14일
1

독서

목록 보기
22/29
post-thumbnail

한줄평

쉬운 단어와 영 낯선 주장들. 근원부터 질문하라.

책 소개, 감상

복잡성(Complexity)이라는 측면에서, 어떻게 코드를 짜야하는지를 설명하는 책. 대학교에서 학생들을 괴롭...아니, 가르치면서 배운 내용을 집대성했다고 한다.

상당히 쉬운 영어로 쓰여있다.

이 책은 "코딩에 뭐가 더 있지? 그냥 '짜면' 되는거잖아?" 라는 나의 생각을 부숴준 고마운 책들 중 하나다. 이렇게 이른 시기에 접하게 되어 너무 다행인듯.

책 구성

책은 총 22 챕터인데, 크게 보면 4개의 파트로 쪼갤 수 있다 :

  1. 복잡성이란 무엇인가 : 복잡성의 정의, 요소. 그리고 Tactical/Strategic 프로그래밍 스타일 >> (1장은 인트로) 2~3 장

  2. 모듈은 딥(deep)해야 한다 : Information Hiding/Leakage, General-purpose 모듈, 레이어, Interface vs Implementation, 합쳐라, 예러 핸들링 >> 4~11장

  3. 주석 달아라 : 주석을 피하는 변명, 주석이 필요한 이유, 선주석 후코딩 >> 12~13, 15장

  4. 잡팁 : 이름 잘짓는 법, 기존 코드 수정 방법, 일관성에 관하여, 명확한 코드를 만드는 법, 소프트웨어 트렌드들에 대한 논평, 퍼포먼스를 복잡하지 않도록 디자인하는 법, 중요한 것을 판단하는 법 >> 14, 16~21 (22장은 아웃트로)

제일 인상 깊은 대목

파트 3이 제일 인상깊다.

"주석을 적으셔야 합니다."

보통 주석을 "내 코드가 구려서 죄송합니다" 와 동치로 여기는 것을 상식으로 알고 있으니까. 그런데... 실제로 그게 상식이던 아니던, 일반적으로 너무나도 당연하게 상식으로 받아들이고 있던 부분에 대해서 차분하게 이견을 제시하는 저자의 모습은 대단히 인상적이었다. 책을 다 읽은 지금도 솔직히 주석을 (그래도 꽤 적긴 하는데) 자연스러운 프로그래밍의 일부로 받아들이기가 너무너무너무너무너무 어렵다. 한글 코딩과 비슷한 수준으로. 개인적으로 한글 코딩을 좋아하긴 하지만.

아무튼, 자세한 내용을 다 적지는 않겠지만, 근본의 근본까지 부정해버리는 그의 논리는 책의 주장에 동의하지 않아도 한 번쯤 맛볼 가치가 충분하다고 본다. 그리고 전반적으로 말이 너무 평온해서 그것도 참 좋음. 자극적이지 않다고 해야되나 << 영어를 잘 못해서 뉘앙스를 못 읽었을 수도 있음.

그 밖에 생각나는 부분들

  • 독자 관점에서 생각하라
  • 자료형 타입을 노출하지 마라, 정보를 새어나가게 하지마라, 주석의 내용을 코드 내용과 다르게 (upper-layer, lower-layer) 적을 수가 없다면 shallow 한 코드라는 증거다. << 내가 짜던 코드가 별로 객체지향이 아니구나 싶었던 지점들
  • 복잡성의 3대 근원 : 변경 증폭 (하나만 바꿨는데 도미노마냥 드르륵), 인지 부하(외워야 할 게 많음), Unknown Unknowns (무슨 위험이 있는지조차 모름)
  • Tactical 하지 말고, Strategic 하라 (튼튼한 설계를 내일로 미루지 마라)
  • Generalize.
  • 가보지 않은 길을 고민하라. 코드를 다 작성하기도 전에.
  • 주석은 디자인 도구다. (책에서 정확히 이렇게 말했는지는 모르겠음)

p.s. 마음이 흔들릴(?) 땐 이 영상을 : https://youtu.be/h0LMEVDXCxE?t=1397

profile
기능이 아니라 버그예요

2개의 댓글

comment-user-thumbnail
2023년 3월 17일

책 정말 빡세게 읽으시네요. 주석 파트는 특히 더 공감이 됩니다.

1개의 답글