"사소한 곳에서 발휘하는 정직은 사소하지 않다." - 옛 덴마크 속담 - , 사소한 듯 보이나 실제로는 사소하지 않은 내용.
"신은 세세함에 깃들어 있다." - 루트비히 미스 반 데어 로에 -
패턴과 패턴 언어의 아버지인 건축가 크리스토퍼 알렉산더는 모든 설계 행위를 작은 규모로 이뤄지는 국부적인 수리 행위로 보았다.
아키텍처(architecture) : 하드웨어와 소프트웨어를 포함한 컴퓨터 시스템 전체의 설계방식으로 컴퓨터 아키텍처라고도 한다.
TDD(Test-Driven Development) : 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스로 본격적인 개발 시작 전, 테스트 상황을 만들고 테스트를 통과하는 실제 코드를 만드는 방식으로 개발하는 방법.
메타포(Metaphor) : 익숙한 개념을 이용하여 새로운 개념을 이해하기 위해 서로 다른 영역을 연결하는 것.
애자일(Agile Software Development) : 신속한 반복 작업을 통해 실제 작동 가능한 소프트웨어를 개발하여 지속적으로 제공하기위한 소프트웨어 개발 방식. 기존의 폭포수(Waterfall) 방법론과는 달리 개발과 함께 즉시 피드백을 받아 유동적으로 개발하는 방법, 테스트 주도 개발(TDD)은 대표적인 애자일 방법론의 한 종류이다.
스크럼(Scrum) : 소프트웨어 개발보다는 팀의 개선과 프로젝트 관리를 위한 애자일 방법론으로, 경험적 관리 기법 중 하나.
백로그(Backlog) : 사용자를 조사하여 구현해야 할 사항을 정의한 문서
린(Lean Software Development) : 제조 공정에서 쓸데없는 낭비를 최소하 하고 소프트웨어의 가치를 최대화 하는 방식. 애자일 방식이 고객의 요구조건을 충족시키는 제품 개발 방식이라면, 린 개발 방식은 고객을 위한 가치 창출 활동에 집중하는 개발 방식이다.
휴리스틱(Heuristic) : 의사 결정 과정을 단순화하여 만든 지침
우리 모두는 자신이 짠 쓰레기 코드를 쳐다보며 나중에 손보겠다고 생각한 경험이 있다 <p.4>.
우리 모두는 대충 짠 프로그램이 돌아간다는 사실에 안도감을 느끼며 그래도 안 돌아가는 프로그램보다 돌아가는 쓰레기가 좋다고 스스로를 위로한 경험이 있다. <p.4>
방금 한 이야기를 일부라도 겪었다면 시간을 들여 깨끗한 코드를 만드는 노력이 비용을 절감하는 방법일 뿐만 아니라 전문가로서 살아남는 길이라는 사실을 인정하라. <p.6>
프로그래머도 마찬가지다. 나쁜 코드의 위험을 이해하지 못하는 관리자 말을 그대로 따르는 행동은 전문가답지 못하다. <p.7>
다시 말해, 깨끗한 코드와 나쁜 코드를 구분할 줄 안다고 깨끗한 코드를 작성할 줄 안다는 뜻은 아니다. <p.7>
깨끗한 코드를 작성하려면 '청결'이라는 힘겹게 습득한 감각을 활용해 자잘한 기법들을 적용하는 절제와 규율이 필요하다. 열쇠는 '코드 감각'이다. <p.8>
비야네 스트롭스트룹이 생각한 좋은 코드
그래디 부치가 생각한 좋은 코드
데이브 토마스가 생각한 좋은 코드
마이클 페더스가 생각한 좋은 코드
론 제프리스가 생각한 좋은 코드
중복을 피하라, 한 기능만 수행하라, 제대로 표현하라, 작게 추상화하라.
워드 커닝햄이 생각한 좋은 코드
우리 업계에는 특정 언어를 신봉하는 광신자가 아주 많다. 하지만 프로그램을 단순하게 보이도록 만드는 열쇠는 언어가 아닌 프로그래머이다. <p.15>
새 코드를 짜면서 우리는 끊임없이 기존 코드를 읽는다. 그러므로 급하다면, 서둘러 끝내려면, 쉽게 짜려면, 읽기 쉽게 만들면 된다. <p.18>
잘 짠 코드가 전부는 아니다. 시간이 지나도 언제나 깨끗하게 유지해야한다. ( 미국 보이스카우트 규칙: "캠프장은 처음 왔을 때보다 더 깨끗하게 해놓고 떠나라." ) <p.18>
권위있는 프로그래머들이 생각하는 깨끗한 코드에 대한 생각들을 보며 내가 추구해야할 코드에 대한 방향성을 얻은 느낌이다.
깨끗한 코드가 결과적으로 시간과 비용을 절약하는 최고의 방법이다.
책은 도구와 기법 방식을 소개할 뿐 나한테 "코드 감각"을 주는것이 아니라는 것 이것은 "연습"을 통해서만 얻을 수 있다.
킬러 앱(Killer App) : 시장에 등장하자마자 다른 경쟁 제품을 몰아내고 시장을 완전히 재편할 정도로 인기를 누리고 투지비용의 수십 배 이상의 수익을 올리는 상품이나 서비스
메서드 추출(Extract Method) : 코드의 구성이 길어 주석이 필요하거나, 의도를 파악하기 어려울 떄에는 별도의 메서드를 만들어 코드를 나눌 수 있다.