서평
인상적이었던 내용
- 단순함은 단순하지 않다. 신중하게 다듬어졌고 실질적이며 효과적이다.
- 환경과 싸우지 말고 이해하기.
- 비유의 각 요소가 상호작용해야한다.
- 필요 주도 개발. 기능 = 미래의 부채.
느낀 점
- 시니어 프로그래머가 생각하는 좋은 소프트웨어 개발이란 이런 요소들이 있구나 알 수 있어서 좋았다.
- 마우스를 쓰지 않는 개발 환경에 대해서는 공감이 되지는 않았다.
- 코딩에 대한 직접적인 조언도 주어서 좋았다. 예를 들어, 반복된다면 코드에서 데이터를 분리한다.
- 소프트 스킬에 대해서도 평소에 고민하던 내용들이 있어서 좋았다.
- 정보 사일로를 제거하고 지식을 퍼뜨린다.
- DWP의 역할이 나와 얼마나 겹치는지는 모르겠지만 이런 역할도 필요하다고 얘기해서 좋았다.
- 불필요한 회의를 지양하고, 비유를 잘 활용하는 것이 좋다고 한다.
- 개인 생산성에 있어서 환경을 최적화하는 것도 공감이 되었다.
- Exploration and exploitation 딜레마의 아이디어를 하나 더 넣게 되어서 좋았다: 기발함과 실용성을 섞기.
내용
개요
원제: ‘simplicity: sustainable, humane, and effective software development’
4 Simplifications
- What You Do and How You Do It
- Your Environment
- Your Interactions
- Your Code
단순함에 관하여
- S(Simplicity)가 C(Complexity)보다 이해가 쉽다.
- S가 C보다 구성 요소가 적다.
- S가 C보다 문제의 본질을 더 직접적으로 반영.
단순함은 단순하지 않다. 신중하게 다듬어졌고 실질적이며 효과적이다.4
복잡성 접근 방식≈ 과학적 방법론: 현황파악(복합적 복잡성 인지하기) → 실행(시도하기) → 학습(행동 조정하기).
인생에서도 단순함을 추구하라.
코드
- 코드 단순화하기.
- 의존성 - 격리시키기. 외부 라이브러리에서 한 기능만 필요하면 직접 구현하기.
- 프레임워크 - 최소부터. 그린 필드와 브라운 필드.
- 기능 - 필요 주도 개발. 기능 = 미래의 부채.
- 데이터 주도 개발: 데이터는 What, 코드는 How.
- 반복적인 테스트에는 테이블 활용. 테스트는 데이터 기반.
- 코드 → 리스트 → 인터프리터 → 상태머신: 코드에서 로직을 분리해 단순하게 만들기.
- 가독성 높은 코드.
- 특별한 이유 없이 주석 넣지 않기. 적정선 찾기.
- TODO를 쓰고 모아보기.
- 줄 맞춰 정렬하기.
- 리스트 (1) 마지막 요소에도 쉼표 넣고, (2) 순서대로 정렬하기.
- 옆으로 긴 코드보다 아래로 긴 코드.
- 관련된 코드는 한 곳에 모아두기. 어쩌면 초기에는 한 파일로.
- 글쓰기도 마찬가지.
- 환경과 싸우지 말고 이해하기.
- 코드의 디버깅을 실수가 아닌 결과로 인식하기.
- 이상한 느낌이 들면 무시하지 않기.
소프트스킬
- 학습, 정보.
- 가르치면서 배운다. Positive-sum game.
- 정보 사일로를 제거하고 지식 퍼뜨리기.
- 팀.
- 팀의 결합도 낮추기: (1) 디커플링, (2) 비동기적인 삶.
- 팀의 다양성 지향하기.
- DWP(Developer Without Portfolio) 역할 만들기.
- 회의.
- 필요한 회의만 하기.
- 회의를 해야한다면 생산적으로 하기.
- 상호작용.
- 의견 대립은 제로섬이 아니다.
- 상대에게 공감해주기.
- 상대가 안다고 가정하지 않기.
- 인적자원이 아닌 사람으로 시간 내어주기.
- 황금률 _ 존 스튜어트 밀.
- 비유로 설명하기. 비유의 각 요소가 상호작용해야한다.
- 지금 맥락에서만 비유가 충분한지 체크하면 된다.
| 내가 아는 것 | 내가 모르는 것 | |
|---|---|---|
| 남이 아는 것 | 열린 영역 | 내게 보이지 않는 영역 |
| 남이 모르는 것 | 내가 숨긴 영역 | 발견될 영역 |
환경을 단순화
- 최적화.
- 데스크탑 환경 최적화.
- 터미널 사용 극대화.
- 나의 에디터 찾기.
- 자동화.
- 배포 자동화.
- 개발 장비 자동화. i.e., 복구 절차.
- 새로운 시도.
- 기발함과 실용성을 섞기.
- (1) ‘꼭 더 알아두어야 할 것들’ 목록과
- (2) ‘호기심 가는 것들’ 목록 각각 만들고 주제를 3가지씩 적기.
- 탐색 계획 세우기.
- 기발함과 실용성을 섞기.