코드가 존재하리라
- 코드의 도움 없이 요구사항을 상세하게 표현하기란 불가능.
- 코드는 기계가 이해하고 실행할 정도로 엄밀하고 정확하고 상세하고 정형화되어야 함.
- 코드는 요구사항을 정밀하게 표현하는 언어.
나쁜 코드
- 좋은코드는 중요하다
- 어떠한 이유로 나쁜 코드를 짰더라도 수정할 수 있는 나중은 결코 오지 않는다.
나쁜 코드로 치르는 대가
- 나쁜 코드는 개발속도를 크게 떨어뜨린다.
- 나쁜 코드가 쌓일수록 팀 생산성은 떨어진다. (얽히고 설킨 코드를 해독 하느라)
- 인력을 투자 하더라도 기존 설계 의도를 온전히 파악 하지 못하면 나쁜 코드를 더 양산하게 된다.
원대한 재설계의 꿈
- 관리층은 재설계에 자원을 쏟아붓기 싫지만 나쁜코드로 인해 생산성이 안좋다는것을 부인 할수 없다.
- 결국 팀의 요구대로 원대한 재설계를 허락한다.
- 오래 걸려 기존 시스템을 따라잡을 즈음 새로운 팀원이 새로운 설계를 하자고 한다.
- 이러한 반복의 예를 통해 깨끗한 코드를 만드려는 노력이 얼마나 중요한지 알아야 한다.
태도
- 나쁜 코드의 잘못은 전적으로 프로그래머에게 존재.
- 관리자와 마케팅은 그저 요구사항을 내놓으며 우리에게 도움 요청.
- 좋은 코드를 사수하는 일은 프로그래머들의 책임.
- 나쁜 코드의 위험을 이해하지 못하는 관리자 말을 그대로 따르는 행동은 전문가답지 못하다.
원초적 난제
- 나쁜 코드는 업무 속도를 늦춘다.
- 기한을 맞추려 나쁜코드를 양산한다, 이는 오히려 개발을 더디게 한다.
- 언제나 코드를 최대한 깨끗하게 유지하는 습관이 중요하다.
깨끗한 코드라는 예술?
- 깨끗한 코드가 무엇인지 모르면 깨끗한 코드를 만들 수 없다.
- 깨끗한 코드와 나쁜 코드를 구분할 줄 안다고 깨끗한 코드를 작성 할줄 아는건 아니다.
- 깨끗한 코드를 작성 하려면 힘겹게 습득한 감각을 활용해 적용하는 절제와 규율이 필요하다.
- 코드 감각이 있는 프로그래머는 나쁜모듈을 좋은모듈로 개선할 방안을 떠올린다.
깨끗한 코드란?
비야네 스트롭스트룹(Bjarne Stroustrup)
- 깨끗한 코드는 보는 사람에게 즐거움을 선사해야 한다
- CPU 자원을 낭비하는 코드는 우아하지 못하다.(효율의 중요성)
- 나쁜 코드를 고치면서 오히려 더 나쁜 코드를 만든다.
- 깨끗한 코드는 세세한 사항까지 꼼꼼하게 처리한다.(철저한 오류 처리)
- 깨끗한 코드는 한 가지에 집중 한다.
그래디 부치(Grady Booch)
- 깨끗한 코드는 단순하고 직접적이며 잘 쓴 문장처럼 읽힌다.
- 설계자의 의도를 숨기지 않는다.(가독성)
- 코드는 추측이 아니라 사실에 기반해야 하며 반드시 필요한 내용만 담아야한다.
- 코드를 읽는 사람에게 프로그래머가 단호하다는 인상을 줘야한다.
큰 데이브 토마스(Dave Thomas)
- 깨끗한 코드란 반드시 다른 사람이 고치기 쉽다.
- 의존성은 최소이며 각 의존성 명확히 정의한다.(작을수록 좋다.)
- 테스트 케이스가 없다면 아무리 우아하고 가독성이 높아도 깨끗하지 않다.(테스트 코드 매우 중요)
마이클 페더스(Michael Feathers)
- 깨끗한 코드는 주의 깊게 짰다는 느낌을 준다.
- 누군가 시간을 들여 깔끔하고 단정하게 정리한 코드.
론 제프리스(Ron Jeffries)
- 켄트백이 제안한 코드 규칙을 따른다.
- 모든 테스트를 통과한다.
- 중복이 없다.
- 시스템 내 모든 설계 아이디어를 표현한다.
- 클래스, 메서드, 함수 등을 최대한 줄인다. (작게 추상화)
- 중복과 표현력(의미있는 이름)만 신경써도 깨끗한 코드라는 목표에 다가선다.
- 추가로 초반부터 간단한 추상화 고려 까지 포함하는것이 깨끗한 코드를 만드는 비결이다.
워드 커닝햄(Ward Cunningham)
- 읽으면서 짐작했던 기능을 수행 한다면 깨끗한 코드다.
- 코드가 그 문제를 풀기 위한 언어처럼 보인다면 아름다운 코드다.
- 깨끗한 코드는 읽으면서 놀랄 일이 없어야한다. (의도한 대로, 짐작한 대로 동작하기 때문)
- 프로그램을 단순하게 보이도록 만드는 열쇠는 언어가 아니다. 프로그래머의 역량이다.
우리들 생각 (저자와 저자의 팀의 생각)
- 깨끗한 변수 이름, 깨끗한 함수, 깨끗한 클래스
- 이 책은 오브젝트 멘토 진영이 생각하는 깨끗한 코드를 설명한다.
- 이 책을 통해 수십 년에 걸친 경험과 반복적 시행착오로 습득한 교훈과 기법을 체득했으면한다.
우리는 저자다
- 새로운 코드 작성시 대부분 기존 모듈을 파악하는대에 시간을 쓴다.
- 새 코드를 짜면서 끊임없이 기존코드를 읽는다.
- 따라서 읽기 쉬운코드는 매우 중요하다.
보이스카우트 규칙
- 잘 짠 코드가 전부는아니다. 시간이 지나도 언제나 깨끗하게 유지해야 한다.
- 체크아웃 할때보다 좀 더 깨끗한 코드를 체크인해야 한다.
- 우리가 본 코드를 그 순간보다 조금만 더 개선한다면 코드는 더러워질 수가 없다.
- 거창하게 생각할 필요는 없다. 변수의 명명, 너무 긴 코드의 분할, 작은 중복의 제거, 복합 if문 하나의 개선 정도만 해 보라.
- 지속적 개선이야 말로 전문가 정신의 본질이다.
프리퀄과 원칙
- 이책은 저자가 작성한 Agile Software Development: principles, Patterns, and Practices (PPP) 의 프리퀄
- PPP는 SRP, OCP, DIP 등의 설계 원칙을 거론한다.
결론
- 이책을 읽는다고 뛰어난 프로그래머가 된다는 보장은 없다.
- 단지 뛰어난 프로그래머가 생각하는 방식과 그들이 사용하는 기술과 기교, 도구를 소개한다.
- 다양한 경험적 교훈과 체계, 절차, 기법도 열거한다.
- 얼마만큼 습득하는지는 독자에게 달려있다.
- 항상 끊임없이 연습해야 한다.