목차

훌륭한 프로그래머 되는 법

13장 두 개의 시스템에 대한 이야기

14장 소프트웨어 개발이란

뛰어난 코드를 작성하고자 하는 프로그래머는 좋은 취향과 미적 감각을 지녀야 한다.

창조적 : 상상력이 필요하다. 소프트웨어는 능숙하게 구축하고 정확하게 설계해야 한다. 프로그래머는 자신이 만들고자 하는 코드에 대한 비전, 그리고 만드는 방법에 대한 계획이 있어야 한다. 이는 때로는 엄청난 독창성을 필요로 한다.

미학적 : 좋은 코드의 특징은 우아함, 아름다움, 그리고 균형에서 찾을 수 있다. 이 말은 좋은 코드의 기준이 특정 문화적 관례의 프레임워크 안에 있음을 의미한다. 우리는 코드의 기능 외에 외관 역시 고려한다.

기계적·수동적 : 예술가에 비유하자면, 지정된 매개물을 가지고 지정된 도구와 절차, 기법으로 작성하는 것이나 마찬가지다. 또한 관대한 후원자의 주문에 따라 작업하는 것과 같다.

팀 기반 : 수많은 형태의 예술은 한 사람이 아닌 여러 사람의 노고에서 비롯된 결과물이다. 예술 형식을 통틀어 예술가는 걸작을 완성할 때까지 밤낮으로 스튜디오에 노예처럼 앉아 있지만은 않는다. 거장 조각가와 견습생들의 관계를 생각해보라. 지휘자에 의해 각 단원의 화음이 맞아가는 오케스트라를 생각해보라. 작곡가가 곡을 만들고 연주자들이 그 곡을 해석하는 관계에 대해 생각해보라. 건물을 설계하는 건축 설계사와 실제로 건물으 짓는 시공자들의 관계도 생각해보라.

엄격함 : 우리는 언제나 그리고 매번 버그 없이 작동하는 코드를 기대한다. 코드는 유효한 모든 입력에 대해 작동해야 하고, 잘못된 입력에는 적절하게 대응해야 한다. 좋은 소프트웨어는 정확하고, 입증되고, 측정되고, 실험되며, 검증되어야 한다.

이를 실현하려면 어떻게 해야 할까? 좋은 테스트가 그 해결책이다. 우리는 단위 테스트, 통합 테스트, 시스템 테스트를 기대한다. 인간에 의해 빚어지는 오류의 위험을 제거하기 위해 되도록이면 자동화 작업을 해야 한다. 물론 경험에 근거한 테스트도 기대할 만하다.

체계화 : 소프트웨어 개발은 무작정 덤벼들 만한 일이 아니다. 작동하는 것처럼 보일 때까지 무작위로 코드 덩어리를 합치는 것만으로는 제대로 구조화된 대형 컴퓨터 시스템을 만들어낼 수가 없다. 먼저 계획을 세우고 설계를 하며, 예산 계획을 세우고 체계적으로 구성할 필요가 있다. 이는 지적이고 논리적이며 합리적인 과정이다. 즉 체계를 세우고 문제 공간과 설계 대안들을 이해하는 것이다.

통찰력 : 소프트웨어 개발에는 지적 노력과 더불어 기민한 분석력이 필요하다. 특히 까따로운 버그를 추적할 때 그 필요성은 명백히 드러난다. 과학자처럼 우리는 가설을 설정하고, 과학적인 방법과 유사한 무언가를 적용한다. 설정된 가설을 기반으로 실험을 수행하고, 이론을 검증하는 것이다.

15장 규칙 가지고 놀기

좋은 코드를 작성하기 위한 세개의 강력한 규칙

16장 간결하게 하기

간결한 코드는 설계하는 데 많은 노력이 필요하다. 다만 간결한 코드가 곧 과도하게 단순한 코드를 의미하지는 않는다.

오류를 발견했을 때 다룰 수 있는 두 가지 방법은 다음과 같다.

YAGNI (You Aren't Going To Need It)

17장 머리 쓰기

용기를 가지고 머리를 사용하라. 코드를 비판하고 개선할 방법을 결정할 권리가 자신에게 주어졌음을 꺠닫자.

18장 변하지 않는 것은 없다.

코드는 변해야 한다. 제품 중에 '불변'의 코드가 있다면 그 제품을 썩어버릴 것이다.

자신이 작성한 소프트웨어의 주인은 바로 자신이다. 소프트웨어는 자신의 지배하에 있다. 코드나 개발 절차를 풀어두지 말고 코드가 설장하는 방향을 지배하라.

어떻게 하면 오류에 대한 두려움 속에서도 용기 있게 수정할 수 있을까?

20장 효과적인 버전 관리


관련 문서