읽기 쉬운 코드 : 더 좋은 코드를 작성하는 좋은 개발자 습관
Description
『소프트웨어 장인』에 이은 또 한 권의 ‘로버트 C. 마틴 시리즈’ 베스트셀러!
70년 동안 개발자들에게 검증 받은 개발 방법론과 주옥 같은 팁들을 한 권으로 총 정리!
'좋은 소프트웨어 설계를 하라'는 말에 명확한 답과 방법을 떠올릴 수 있는가? 개발은 명확한 답이 없는 문제를 경험, 직관, 시행착오를 겪으며 점점 만족스러운 설계로 발전시키는 과정이다. 이 과정에서 더 뛰어난 사람들에게 배우기도 하고, 배운 것을 다시 조언해 주기도 한다. 이 책에서는 오랫동안 시도하고 개선한 끝에 검증된 방법들, 그러나 체계적으로 정리되지 않아 흩어져 있던 수많은 답과 방법들을 모아 일관되고 효율적인 방식으로 제시했다. 코드를 복잡하지 않게, 지속 가능하게, 유지/보수하기 쉽게, 인간이 이해할 수 있게 작성할 수 있는 방법과 아이디어들을 이 한 권으로 정리해보자.

저자

마크시먼

저자:마크시먼
제2의직업으로프로그래머를선택한경제학자로,1990년대후반부터웹과기업용소프트웨어개발자로일했다.젊은시절록스타가되고싶었으나안타깝게도재능도,외모도뒷받침되지못했지만,나중에는누구나인정하는록스타급개발자가되었다.또한,의존성주입에대한책으로졸트상(JoltAward)을수상하고,여러국제컨퍼런스에서100번이넘는강연을했으며,온라인강의사이트인플루럴사이트(Pluralsight)와클린코더스(CleanCoders)에동영상강좌를개설했다.2006년부터는정기적으로블로그에게시물을작성해공개해왔다.현재코펜하겐에서아내와두아이와같이살고있다.

역자:김현규
프로그래밍을좋아하다가,디지털설계에빠져서프로세서를비롯한반도체IP를개발하고있지만,어쩌다보니디지털회로설계와소프트웨어설계를같이담당하는경우가많은엔지니어다.고려대학교에서컴퓨터시스템공학으로박사학위를받았으며,이후에국산상용임베디드마이크로프로세서인EISC프로세서IP의아키텍처와설계를담당했다.후에상용적으로성공한비디오코덱IP의아키텍처와설계를진행했으며,최근에는그동안관심을가지고있던NOC(Network-On-Chip)IP를담당해서설계및최적화방법들을생각해보고있다.하드웨어와소프트웨어가동시에필요한부분을좋아하고,다양한프로세서와개발언어에대해서알아가는것에재미를느끼고있으며,개발효율성을높일수있는설계방법론과새로운기술에아직도궁금증을가지고있다.
번역서로『CODE:하드웨어와소프트웨어에숨어있는언어』,『짜릿짜릿전자회로DIY』,『짜릿짜릿전자회로DIY플러스』,『재잘재잘피지컬컴퓨팅DIY』등이있다.

목차

1부속도를높여봅시다

1장예술인가?과학인가?
__1.1집짓기비유
____1.1.1프로젝트라고생각해서발생하는문제
____1.1.2단계가있다고생각해서발생하는문제
____1.1.3의존성의차이
__1.2정원가꾸기비유
____1.2.1무엇이정원을키워주나요?
__1.3공학으로나아가기
____1.3.1소프트웨어를기술로바라보는관점
____1.3.2휴리스틱방식
____1.3.3소프트웨어공학의초기개념
____1.3.4소프트웨어공학으로나아가기
__1.4결론

2장체크리스트
__2.1기억보조수단
__2.2새로운코드베이스를위한체크리스트
____2.2.1깃을사용할것
____2.2.2빌드를자동화할것
____2.2.3모든오류메시지를켜둘것
__2.3기존코드베이스를위한체크리스트
____2.3.1점진적개선
____2.3.2조직문화를바꾸는전략
__2.4결론

3장복잡성을잘다루는법
__3.1목적
____3.1.1지속가능성
____3.1.2가치
__3.2프로그래밍이어려운이유
____3.2.1두뇌에비유하는것
____3.2.2코드는작성하는것보다읽는경우가더많다
____3.2.3가독성
____3.2.4지적인작업
__3.3소프트웨어공학으로나아가기
____3.3.1컴퓨터과학과의관계
____3.3.2인간친화적인코드
__3.4결론

4장수직슬라이스
__4.1동작하는소프트웨어에서시작하기
____4.1.1데이터수신에서데이터보존까지
____4.1.2가장간단한수직슬라이스
__4.2동작하는골격
____4.2.1특성화테스트
____4.2.2준비-행동-어설트(AAA패턴)
____4.2.3정적분석조절
__4.3외부접근개발
____4.3.1JSON수신
____4.3.2예약게시
____4.3.3유닛테스트
____4.3.4DTO와도메인모델
____4.3.5가짜객체
____4.3.6저장소인터페이스
____4.3.7저장소생성
____4.3.8의존성구성
__4.4슬라이스완성
____4.4.1스키마
____4.4.2SQL저장소
____4.4.3데이터베이스설정
____4.4.4스모크테스트수행
____4.4.5가짜데이터베이스를사용한경계테스트
__4.5결론

5장캡슐화하기
__5.1데이터저장하기
____5.1.1변환우선순위전제
____5.1.2매개변수를이용하는테스트
____5.1.3DTO를도메인모델로복사하기
__5.2검증
____5.2.1날짜가잘못입력된경우
____5.2.2빨강-초록-리팩터
____5.2.3자연수
____5.2.4포스텔의법칙
__5.3변하지않는값보호하기
____5.3.1항상유효한상태
__5.4결론

6장다각화하기
__6.1단기기억과장기기억
____6.1.1레거시코드와메모리
__6.2용량
____6.2.1초과예약
____6.2.2악마의변호인
____6.2.3기존예약다루기
____6.2.4악마의변호인vs.빨강-초록-리팩터
____6.2.5테스트는언제충분하다고할수있을까?
__6.3결론

7장분해하기
__7.1코드의부패
____7.1.1임계값
____7.1.2순환복잡도
____7.1.380/24규칙
__7.2머리에잘들어오는코드
____7.2.1육각꽃
____7.2.2응집
____7.2.3기능편애
____7.2.4바꾸는과정에서잃는것들
____7.2.5유효성검사대신분석하라
____7.2.6프랙탈구조
____7.2.7변수세기
__7.3결론

8장API설계
__8.1설계의원칙
____8.1.1행동유도성
____8.1.2포카요케
____8.1.3읽는사람을위한코드작성
____8.1.4주석보다중요한,잘지은이름
____8.1.5X로이름바꾸기
____8.1.6명령과쿼리의분리
____8.1.7정보전달단계
__8.2API설계예제
____8.2.1지배인
____8.2.2캡슐화된객체와의상호작용
____8.2.3구현의자세한부분
__8.3결론

9장팀워크
__9.1깃
____9.1.1커밋메시지
____9.1.2지속적통합
____9.1.3조금씩커밋하기
__9.2코드의공동소유
____9.2.1짝프로그래밍
____9.2.2몹프로그래밍
____9.2.3코드리뷰대기시간
____9.2.4큰변경사항거부하기
____9.2.5코드리뷰
____9.2.6풀리퀘스트
__9.3결론

2부지속가능성

10장코드를보강해봅시다
__10.1기능플래그
____10.1.1캘린더플래그
__10.2스트랭글러패턴
____10.2.1메서드수준의스트랭글러
____10.2.2클래스수준의스트랭글러
__10.3버전관리하기
____10.3.1미리경고하기
__10.4결론

11장유닛테스트편집하기
__11.1유닛테스트리팩터링하기
____11.1.1안전망변경하기
____11.1.2새로운테스트코드추가하기
____11.1.3테스트와프로덕션코드에대한리팩터링분리하기
__11.2테스트실패참조하기
__11.3결론

12장문제해결하기
__12.1이해하기
____12.1.1과학적인방법
____12.1.2단순화
____12.1.3고무오리디버깅
__12.2결함
____12.2.1결함을테스트로재현하기
____12.2.2느린테스트
____12.2.3비결정적결함
__12.3이분법
____12.3.1깃에서이분법방식사용하기
__12.4결론

13장관심사의분리
__13.1조합
____13.1.1중첩조합
____13.1.2순차적조합
____13.1.3참조투명성
__13.2횡단관심사
____13.2.1로그남기기
____13.2.2데코레이터
____13.2.3무엇을로그로남길까?
__13.3결론

14장리듬
__14.1개인적인리듬
____14.1.1타임박싱
____14.1.2휴식취하기
____14.1.3시간을계획적으로사용하기
____14.1.4자판외우기
__14.2팀의리듬
____14.2.1주기적으로의존성갱신하기
____14.2.2다른작업일정잡기
____14.2.3콘웨이의법칙
__14.3결론

15장유력한용의자
__15.1성능
____15.1.1과거의유산
____15.1.2명료성
__15.2보안
____15.2.1STRIDE위협모델
____15.2.2스푸핑
____15.2.3변조
____15.2.4거부
____15.2.5정보노출
____15.2.6서비스거부
____15.2.7권한상승
__15.3다른기법들
____15.3.1속성기반테스트
____15.3.2행위기반코드분석
__15.4결론

16장여행
__16.1코드베이스탐색하기
____16.1.1큰그림보기
____16.1.2파일정리
____16.1.3세부사항찾아보기
__16.2아키텍처
____16.2.1모놀리식
____16.2.2순환구조
__16.3사용법
____16.3.1테스트를통해서배우기
____16.3.2테스트에귀를기울이자
__16.4결론

부록A프랙티스목록
__A.150/72규칙
__A.280/24규칙
__A.3준비-행동-어설트
__A.4이분법
__A.5새로운코드베이스를위한체크리스트
__A.6명령과쿼리의분리
__A.7변수개수세기
__A.8순환복잡도
__A.9횡단관심사에대한데코레이터
__A.10악마의변호인
__A.11기능플래그
__A.12함수형코어,명령셸
__A.13정보전달단계
__A.14예외규정이있을때이유설명하기
__A.15유효성검사말고구문분석하기
__A.16포스텔의법칙
__A.17빨강-초록-리팩터
__A.18정기적인의존성업데이트
__A.19결함을테스트로재현하기
__A.20코드리뷰
__A.21유의적버전관리
__A.22테스트와프로덕션코드에대한리팩터링분리하기
__A.23슬라이스
__A.24스트랭글러
__A.25위협모델
__A.26변환우선순위전제
__A.27XX-주도개발
__A.28X로이름바꾸기

부록B참고문헌

부록C예제빌드해보기
__C.1예제파일관련정보
__C.2윈도우환경에서빌드하는방법
__C.3리눅스/WLS환경에서컴파일하는방법
__C.4끝내면서

찾아보기

출판사 서평

읽기쉬운코드가좋은코드다.
내손과내머리로,복잡한코드와프로젝트를통제하라!

여러분은코드를어떻게관리하고있는가?다른사람이더좋은코드를작성하는방법을물어보면뭐라고조언해주는가?대부분여러분보다더뛰어난사람들에게배운지식과아이디어를떠올릴것이다.세상에는수많은뛰어난사람들이이미생각했고고안해낸좋은방법들이흩어져있다.이책은그러한지식과지혜를한데모아한권으로응축시켰다.
그리고응축된지혜를매우실용적이고효과적으로전달하고자했다.본문의설명과개념이실제로코드를어떻게변화시키고진화시키는지레스토랑예약시스템을구현하는예제를통해자세히보여주고,이를통해프로젝트를시작부터끝까지경험하면서현대소프트웨어엔지니어링의좋은관행을복습하고더나은코드를작성하는방법,복잡하고유지보수할수없는코드를개선하는방법을배울수있게안배했다.