실용주의 프로그래머

표지

예전에 유명한 양서라고해서 읽어봤는데, 내용이 좋기도 했고 읽은지가 오래되서 다시한번 읽었다. 두번째 읽을 때는 인사이트가 있는 문장들을 정리했고 내 생각을 덧붙였다.


프로그래머는 이해시키는 일을 하는 사람 개발자는 문제를 해결하는 일을 하는 사람이다. 코딩은 그 수단 중 하나(매우 강력한)이다. 코딩하지 않고 문제를 해결하는 것이 베스트. 코딩은 그 차선책이다.


단지 돌을 자를 지라도 언제나 대성당을 마음속에 그려야 한다 이건 어쩌면 YAGNI 원칙과 충돌할 수 있는데, 그것을 구분하는것은 개발자의 직관이다.


어설픈 변명을 만들지 말고 대안을 제시하라 개발에만 적용되는 것은 아닌것 같다. 개발자는 결국 문제를 해결해야하고, 문제를 해결하기위해서는 먼저 무엇이 문제인지를 제시해야하는건 맞지만, 대안이 뒤따르는 문제제시와 그렇지 못한 문제제시는 큰 차이가 있다. 나에 대한 평가를 가를 수도 있다.


보통 오늘의 훌륭한 소프트웨어는 내일의 완벽한 소프트웨어보다 낫다 대부분의 실무에서 적용되는 공감가는 문장. 그러나 이따금씩 시간 신경 안쓰고 최대한 품질만을 신경 쓴 프로덕트를 만들어 보고싶다는 생각도 있다.


무엇을 말하는가와 어떻게 말하는가 모두 중요하다 무엇을 말하는가의 “무엇”에 “어떻게”가 영향을 끼친다고 생각한다. 어떻게 말하느냐에 따라 무엇을 말하는지가 바뀔수도 있다.


문서와 코드는 모두 동일 지식에 대한 표현이다 읽는 사람(미래의 나를 포함한)이 이 코드 혹은 문장을 보고 어떻게 받아들일지를 많이 생각해야 한다는 점에서 코드와 글쓰기는 공통점이 있다.


당신이 가진 생각이 딱 하나밖에 없다면, 그것만큼 위험한 것은 없다 다양하게 생각하자. 말도 안되는것은 없다. 그저 다른 대안이 더 좋다면 그것을 선택할 뿐이다.


언어의 한계가 곧 자기 세계의 한계다 책에서는 여러 프로그래밍 언어를 배워야 한다는 문맥이었지만, 내가 평소에 하는 말과 대화에도 적용되는것 같다. 그리고 언어의 한계는 생각의 한계가 정한다. 항상 고민하고 사유하자. 그 후 행동도 한다면 더 좋다.


일정 정제를 각 반복 과정의 일부로 삼아야한다 일정 정제는 정제가 필요하다고 생각되는 가장 빠른 시점에 할 수록 이득이므로 사이클마다 넣어야한다. 할 수 있는한 가장 빠른 주기에 수정하는 것. 그리고 수정해야함을 알기 위해 촉각을 곤두세우는것. 애자일은 그런게 아닐까…


완성은 더 이상 더할게 없을 때가 아니라 더 이상 뺄게 없을때 얻게되는 것이다 생텍쥐페리와 스티브잡스의 유명한 격언인데 언제 봐도 인사이트를 주는 문장이다. 단순함은 아름답다.


만약 사용자들이 절대적으로 리스트박스를 필요로 한다면 이것은 요구사항이다. 하지만 뭔가 선택할 수 있는 기능을 설명하느라 리스트박스를 예로 들었다면 그것은 요구사항이 아닌것이다

요구사항은 아키텍처가 아니다. 요구사항은 설계가 아니며, 사용자 인터페이스도 아니다. 요구사항은 필요다.

명세와 구현은 단지 동일한 과정, 즉 요구사항을 포착해서 명문화하는 노력의 다른 측면일 뿐이다

사용자의 입장에서 생각한다는건 “진짜 요구사항”이 무엇인지 생각하는 것이며 그것은 적극적 수용, 즉 내가 채굴해내야한다. 받은 명세 대로만 구현한다면 좋은 개발자라고 할 수 없다. 그러기 위해 다른이의 입장에서 생각하고, 도움을 주고 또 받는 과정이 자연스러워야 한다.


품질은 팀의 이슈다. 품질은 팀원 전체가 개인적으로 기여할 때만 보장된다 제품은 제품을 만드는 사람들이 생각하는 편함에 대한 구현이다. 때로는 러프하게, 때로는 정교하게 설계해야한다. 완전히 데이터에 기반 해야할때도 있고 오로지 직관에 의존해야할 때도 있다. 팀이 호흡을 맞추지 못하면 절대 지속적으로 가치를 제공하기 위한 좋은 결정을 할 수 없다.


여러분이 만들었던 것이 여러분의 기대에 미치지 못해서 실망했던 경험이 있는가? 어떻게 그럴 수 있었을까? 여기에는 논리 이상의 무언가가 있을지도 모른다 직관의 중요성. 초보자에서 전문가로 다가갈수록 직관에 의존한다. 직관은 운이아니다. 직관속엔 체득과 습관이 녹아있다.

그 외 좋았던 문장들

  • 한사람이 오해했다는 것은 여러 사람이 그럴 수 있다는 이야기다
  • 진보는 변화보다는 기억에 의존한다. 과거를 기억하지 못하면 과거를 반복할 뿐이다
  • 테스트는 기술적이라기보다는 문화적인 것이다

여러가지 생각할거리를 던져주는 좋은 책이었다. 다만 어느정도 실무경험이 있어야 그 경험에 빗대보면서 재밌게 읽을 수 있는 책이 아닐까 싶다. 좀 더 연차가 쌓이고 읽으면 또다른 느낌이 아닐까 싶다