100년 뒤에도 유용할 소프트웨어 설계 원칙 & 프로그래머의 바른 길!
단순함을 추구하라! 더 나은 프로그래머가 될 것이다!
그러나 단순함을 추구하는 것은 어려운 일이다. 하지만 생각해 보자. 나는 프로그래머고, 지금 내 앞에는 해야 할 일이 있다. 자, 이제 어떻게 할 텐가? 나는 뭐든 할 거면 그 분야에서 제일 앞서 나가기 위해 최선을 다해야 한다고 생각한다. 다른 사람들에게도 그렇게 살라고 권하고 싶다. 다음과 같이 말이다.
“어차피 할 거라면 왜 잘하지 않나요? 더 능숙하게 할 수 있으면 일하는 게 더 즐겁지 않을까요? 자신이 한 일을 보고 다른 사람이 감동한다면 어떨까요? 하루를 마치고 집으로 가는 길에 그날 무언가를 잘 해낸 기억이 떠오른다면 어떨까요? 현재보다 아주 조금이라도 삶이 더 즐거워지지 않을까요?”
Google의 코드 건강(Code Health), 즉 코드의 가독성, 안정성, 단순성, 유지보수성은 어떻게 개선되어 왔을까? 오픈소스 버그질라(Bugzilla)는 어떻게 침체기를 벗어나 다운로드 수를 10배 이상 늘렸을까? 그 중심에는 이 책의 저자 맥스-카넷 알렉산더가 있다. Google의 기술 책임자로서, 버그질라 프로젝트의 수석 아키텍트로서 활동하면서 얻은 통찰과 깨달음을 이 한 권에 담았다. 수많은 프로그래머가 올바른 방법으로 소프트웨어를 설계하고, 더 나은 코드를 작성하도록 도와준 ‘소프트웨어 설계 원칙’을 차근차근 이야기해 준다.
지은이 서문
옮긴이 서문
1부 프로그래머를 위한 원칙
__1장 시작하기 전에
____할 거면 잘하라
__2장 엔지니어의 자세
__3장 능력자 프로그래머의 한 가지 비밀
__4장 두 문장으로 요약한 소프트웨어 설계
2부 소프트웨어의 복잡성과 원인
__5장 복잡성의 단서
__6장 복잡성을 키우는 방법: API 분리
__7장 하위 호환성이 가치를 잃는 시점은 언제인가?
__8장 복잡성은 감옥이다
3부 단순성과 소프트웨어 설계
__9장 설계는 프로젝트 초반에 하라
____올바른 방법 도입하기
__10장 미래 예측의 정확성
__11장 단순성과 엄격성
__12장 둘은 너무 많다
____리팩토링
__13장 분별 있는 소프트웨어 설계
____잘못된 방법
____잘못된 방법 분석
____이 작업을 여러 사람이 함께한다면?
____올바른 방법
____우리는 소프트웨어 설계 법칙을 따랐다
4부 디버깅
__14장 버그란 무엇인가?
____하드웨어
__15장 버그의 원인
____복합적인 복잡성
__16장 재발을 방지하라
____재발 방지 예시
____토끼굴로 들어가기
__17장 디버깅의 기본 철학
____버그 파악하기
____시스템 살펴보기
____진짜 원인 찾기
____4단계
5부 엔지니어링 팀에서 일하기
__18장 엔지니어링 생산성을 효과적으로 개선하기
____그러면 어떻게 해야 할까?
____해결책
____신뢰와 문제 해결
____장애물
____근원적 문제를 향해 나아가기
__19장 개발자 생산성 측정하기
____‘생산성’의 정의
____‘LOC’는 어떨까?
____유효한 기준 정하기
____코드가 제품이라면?
____개발자 생산성 개선 담당자라면?
____결론
__20장 소프트웨어 회사에서 코드 복잡성을 다루는 법
____1단계: 문제 목록
____2단계: 회의
____3단계: 버그 리포트
____4단계: 우선순위 선정
____5단계: 과제
____6단계: 계획
__21장 리팩토링할 때는 기능에 주목하라
____효과적으로 일하기
____리팩토링 한계 설정하기
____리팩토링을 하면 시간이 절약된다
____명확하게 만들어라
____정리
__22장 친절과 코드
____소프트웨어에서 중요한 건 사람이다
____친절의 예
____친절하게 더 나은 프로그램을 만들어라
__23장 간략하게 살펴보는 오픈 소스 커뮤니티
____기여자 유지하기
____장벽 없애기
____관심 유도하기
____아주 인기 있는 제품이 돼라
____인기 있는 프로그래밍 언어로 만들어라
____정리
6부 소프트웨어 이해하기
__24장 컴퓨터란 무엇인가?
__25장 소프트웨어 구성 요소: 구조, 동작, 결과
__26장 소프트웨어 개정판: (I)SAR 구별하기
____구조
____동작
____결과
____코드 한 줄에 담긴 ISAR
____SAR 정리
__27장 지식으로서의 소프트웨어
__28장 기술의 목적
____반대 사례도 있을까?
____기술의 발전이 ‘좋은’ 것인가?
__29장 간략하게 살펴보는 프라이버시 문제
____공간의 프라이버시
____정보의 프라이버시
____정리
__30장 단순성과 보안
__31장 테스트 주도 개발과 관찰 주기
____ODA 사례
____개발 프로세스와 생산성
____첫 번째 ODA
__32장 테스트 철학
____테스트 가치
____테스트 단언문
____테스트 범위
____테스트 가정
____테스트 설계
____E2E 테스트
____통합 테스트
____단위 테스트
____현실
____가짜
____결정론 177
____속도 178
____커버리지 180
____결론: 테스트의 전반적인 목표 180
7부 나아지기
__33장 성공의 비밀: 나아지기
____이 방법이 왜 효과가 있었을까?
__34장 개떡 같은 부분을 찾는 방법
__35장 ‘아니요’의 힘
____나쁜 아이디어 알아내기
____나쁜 아이디어 내지 않기
____거절과 무례는 다르다
__36장 프로그래머가 개떡 같은 이유
____무엇을 배워야 할까?
__37장 빠른 프로그래밍의 비결: 생각하지 않기
____이해하기
____그리기
____시작하기
____단계 건너뛰기
____신체적 문제
____주의 집중하기
____자기 회의
____잘못된 통념
____주의 사항
__38장 개발자의 자만심
__39장 ‘일관성’과 ‘획일성’은 다르다
__40장 사용자는 문제를 알려주고 개발자는 해결책을 만든다
____신뢰와 정보
____문제는 사용자에게서 나온다
__41장 즉각적인 만족감 = 즉각적인 실패
____해결책은 장기적인 관점으로 찾아라
____소프트웨어 회사를 망가뜨리는 방법
__42장 성공은 혁신이 아니라 실행에서 온다
__43장 훌륭한 소프트웨어
____1. 사용자의 명령을 정확하게 따른다
____2. 사용자가 예상한 대로 작동한다
____3. 사용자의 의도 전달을 막지 않는다
____코드를 단순하게 만드는 것보다 탁월하게 만드는 게 더 중요하다. 이 둘은 상충되지 않는다
찾아보기
필요한 자료를 선택하세요.
독자의견 남기기