🚥 리뷰 전
개발에서 실용주의란 무엇일까?
단순히 코드의 실행시간을 최소화 시켜 효율성을 높이는게 실용적인걸까 아니면 아키텍처를 잘 구성하여 유연하게 변경할 수 있는 개발을 하는게 실용적일까
사실 답은 없다고 생각한다. 중요한 건 코드를 작성할 때 어떤 방향성을 갖고 진행하는가 라고 생각한다. 이 책에는 이제 막 코딩을 시작하는 초보 개발자에게 코딩 근육을 만들고 코딩 뇌를 개발하는 예제와 발상, 실용적인 팁들을 소개하고 있다.
📚 본격 리뷰
모든 개발자는 유일무이하다. 그렇지만 자신의 기예에 관심을 가지고 자기 일에 대해 생각하는건 공통적이다.
1. 실용주의 접근법
- 가역성
- 문제를 풀 때 간단한 해결책을 좋아하지만, 오늘의 x 값이 내일은 다르게 바뀔 수도 있다.
- 유연하고 적용 가능한 소프트웨어를 만들자
- 최종 결정이란 건 없다!
- 추정
- 추정 능력을 계발하여 무언가의 규모를 직관적으로 짚을 수 있게 하자
- 추정치는 문제의 모델에 기반한다.
- 배경 이해 -> 시스템의 모델링 -> 모델의 컴포넌트화 -> 매개변수에 값을 할당 -> 답을 계산
- 누군가 추정해달라고 말하면 '나중에 연락드릴게요'라고 말한 뒤 시간을 내서 추정하라
2. 구부러지거나 부러지거나
- 결합도 줄이기
- 높은 결합도는 변경의 적이다.
- 결합도가 낮은 코드는 변경하기 쉽다
- 변수나 함수를 글로벌화 하면 결합도가 높아진다
- 상속세
- 상속도 일종의 결합이다
- 인터페이스와 프로토콜, 위임을 통해 상속을 줄일 수 있다
3. 동시성
- 시간적 결합 깨뜨리기
- 작업 흐름 분석으로 시간이나 순서에 의존하는 시간적 결합을 끊어내야 한다
- 프로세스에서 동시성 찾는 연습을 하라
- 자원을 공유하는 상태는 틀린 상태다 (상호 배제의 규칙을 만들 것)
4. 코딩하는 동안
- 우연에 맡기는 프로그래밍
- 행운과 우연에 의존하지 않고 의도적으로 프로그래밍을 해야한다
이거 왜 되지?
- 알고리즘의 속도
- 리팩터링
- 소프트웨어 개발은 정원 가꾸기에 더 가깝다
- 리팩터링은 나중에 하는게 아니다. 발견한 순간 당장해라! (아니면 잊고 지나가거나, 나중에 변경하기 어렵게 된다)
- 리팩터링과 기능 추가를 동시에 하지 말아라
- 테스트로 코딩하기
- 테스트가 코드의 첫 번째 사용자다
- 초록색 테스트 통과 메세지에 중독된 나머지 진짜 문제 해결에는 보탬이 안 되는 코드를 작성하면 안 된다
- TDD(테스트 주도 개발)는 목표가 어디인지 확실히 알아야 한다
- 이름 짓기
- 컴퓨터 과학에는 어려운 문제가 딱 두 개 있다. 캐시 무효화와 이름 짓기다
- 문화를 존중해서 그 회사 혹은 그룹에 맞는 문화에 적응해라
- 함수나 메서드는 실제로 하는 일을 반영하도록 이름을 지어라
5. 실용주의 프로젝트
- 실용주의 팀
- 코코넛만으로는 부족하다
- 사용자가 필요로 할 때마다, 사업적으로 배포가 의미 있을 때마다 배포하기
- 실용주의 시작 도구
- 버전 관리 시스템
- 가차 없고 지속적인 테스트 (테스트 커버리지에 목숨걸지 않기)
➰ 리뷰 끝
책에서 모든 챕터를 읽지는 않았다. 당장 실무에서 쓸 수 있는, 혹은 써야할 방법론에 대한 내용을 먼저 읽었다.
나머지는 기본적인 프로그래밍 도구에 대한 내용이라 추후에 가볍게 읽는게 좋을 것 같다. 전체적으로 책을 읽으면서 느껴진 핵심 내용은 소통과 유연성이다.
사용자를 기쁘게 하는 코딩은 완벽하게 짜여진 계획과 업무가 아니다. 그 때 그 때마다 변경할 수 있고, 사용자의 요구에 따라 빠르게 기능을 변경해 대응할 수 있는 업무 문화와 소통이 필요하다.
다행히 지금 일하고 있는 현업에서는 위 사항들이 잘 진행되고 있어 감사한 일이다 😆
링크 : 실용주의 프로그래머