[Book] 실용주의 프로그래머
16 Jul 2023실용주의 프로그래머
책을 읽고
많은 이들이 기술서적으로 추천하는 책중 하나인 실용주의 프로그래머를 최근에 다 읽게 되어 느낀점을 남기려고 한다.
실용주의 프로그래머는 특정 기술의 활용법에 대한 내용을 기술한것이 아닌 데이비드 토머스와 앤드류 헌트가 수십년간의 프로그래밍 경험을 녹혀 소프트웨어 개발자로서의 실무적인 지식과 방법론을 제시한 책이다.
간단하게 세줄로 요약해본다면.
실용주의 프로그래머는 단순한 코딩 기술을 넘어서
팀 협업, 커뮤니케이션, 개인적인 성장 등을 다루어
프로그래머로서의 전체적인 역량을 향상시킬 수있는 방법을 제시한다
주니어 개발자로서 이 책을 보며 코드를 기술적으로 작성하는 방법에 한정된 것이 아닌, 코드와 프로젝트 더 나아가 실무적인 영역에 대해 되돌아 볼수 있게 되는 좋은경험이 되었다.
책을 통해서 내가 일하는 방식을 살펴봤을때, 회사의 업무상 모든 내용을 반영하기는 어렵지만 이미 적용해서 진행하고 있는 것과, 내 업무방식에 적용하여 참고할 수 있는 것을 기준으로 되돌아 보게 되었던 것 같다.
이미 적용해서 진행하고 있는 것은 책에 담긴 노하우와 내가 일하는 방식을 비교하여 개선할 점을 찾아보게 되었고 또는 회사에서 진행중인 프로세스에 대해 조금더 이해하게 되었던 것 같다.
내 업무방식에 적용하여 참고할 수 있는 것은 내가 개발을 진행하면서 가져야 할 마음가짐이나 의사결정하는 방식, 커뮤니케이션의 중요성 등등에 대해 고민해볼 수 있게 된 것같다.
실용주의 프로그래머의 원칙 10가지
실용주의 프로그래머에서는 다음과 같은 원칙과 방법을 제시하고 있다.
요점들을 간략하게 정리하자면 아래와 같다.
- 실용주의 프로그래머는 간결하고 명확한 코드 작성을 강조한다. 복잡성을 최소화하고, 코드의 가독성과 이해성을 높이는 것을 중요시한다.
- 테스트를 통해 개발자가 테스트 케이스를 작성하고, 코드의 품질과 신뢰성을 높일 수 있다.
- 자동화된 빌드와 배포는 개발 과정에서 반복적이고 오류 가능성이 있는 작업들을 자동화 함으로써 개발자의 생산성을 향상시킨다.
- 실용주의 프로그래머는 완벽한 코드 대신 자신의 실수에 대비한 방어책을 마련하고 좋은 설계를 위해 고민한다.
- 디버깅과 리팩토링은 프로그램 개발 과정에서 발생할 수 있는 버그를 개선하고 코드의 구조와 가독성을 개선할 수 있게 한다.
- 개발자가 단독으로 작업하는 것이 아니라. 팀과 협업하여 개발을 진행해야 한다. 효과적인 커뮤니케이션과 지식 공유는 팀 협업을 원할게 만든다.
- 개발자는 문서화를 통해 코드 및 시스템에 대한 이해를 갖고, 지식을 공유하여 팀의 성장을 도모해야 한다.
- 실용주의 프로그래머는 성능을 고려하면서도 최적화가 필요한 시점과 방법을 잘 판단하는 능력을 갖추어야 한다.
- 개발자는 지속적인 학습과 지식 확장에 주의를 기울여야 한다.
- 실용주의 프로그래머는 사용자와의 상호작용을 고려해 사용자 요규사항을 이해하고, 사용자 경험으로 개선하는 방향으로 프로그램을 개발해야 한다.
몇가지 주제 소개
내가 책을 읽으면서 기억에 남는 주제를 몇가지 소개해 보고자 한다.
소프트웨어 엔트로피
엔트로피는 ‘무질서’한 정도를 가리키는 물리학 용어인데, 이에 빗대어 소프트웨어의 엔트로피가 증가 할수록 소프트웨어는 부패하며, ‘기술 부채(technical debt)’가 증가한다고 한다.
여기에서 또 나오는 이론은 ‘깨진 유리창 이론’으로 깨진 유리창을 그대로 둘 경우 버려진 건물로 판단되어, 급속도로 건물의 상태가 좋지 않아진다는 것이었다.
프로그램 또한 ‘깨진 유리창’ 이론을 적용하여, 프로그램이 부패 할 수 있으니, 나쁜 설계나 형편없는 코드등을 발견하면 바로 수정해주는것이 좋다.
헤드라이트를 앞서가지 말라
헤드라이트는 ‘투사 거리’라고 부르는 범위까지만 밝힐 수 있다. 마찬가지로 소프트웨어 개발에서도 우리의 ‘헤드라이트’는 제한되어있으니, 프로그램 개발 단계에서 언제나 신중하게 작은 단계를 밟아야 한다.
리팩토링이나 설계의 구조 개선등 프로그램의 수정은 언제나 필수적으로 따라온다. 불확신한 미래에 대비해 설계를 하느라 많은 시간과 자원을 낭비하는 것보다는 언제나 교체 가능한 코드를 작성하여 대비하는 것이 좋다.
테스트로 코딩하기
테스트가 코드의 첫번째 사용자다. 테스트 주도 개발(TDD)와 같은 방법론을 적용하되 테스트를 진행하는 목표을 알아야 한다.
모듈을 조립하기전 단위 테스트를 통해 각 모듈의 동작을 검증하는 것이 중요하며, 이후 우리가 개발하고자 하는 프로세스대로 작동하는지에 대해 테스트가 필요하다.
테스트, 설계, 코딩 이 모든 것이 프로그래밍이다.
요구사항의 구렁텅이
의뢰인의 요구사항을 수집하여 프로젝트를 진행할때 주의할 점이 있다. ‘자신이 뭘 원하는지 정확히 아는 사람은 없다.’는 것이다.
프로그래머들은 의뢰인의 요구사항을 처음 받았을 때, 피드백이라는 탐험을 통해 다른 해법을 찾아 요구 사항을 수집하고 보완할 수 있다.
이러한 과정을 통해 잘못된 방향으로 개발이 진행되더라도 잃어버리는 시간을 최소화 할 수 있다.
요구 사항을 문서화하여 프로그램의 개발에 대한 계획과 자신의 할 일을 명확히 알 수 있을 것이다.
이렇게 네가지의 Topic을 정리해 보았다.
위의 주제들에 대한 더 자세한 설명과 53개의 Topic 주제로 지금보다 더욱 성장하고, 고능률의 개발을 진행할 수 있도록 도와주는 시니어 개발자의 가르침을 받아 볼 수 있다.
자신이 지금보다 더 좋은 실용주의 프로그래머가 되고 싶다면 위의 책을 읽어보는 것을 추천한다.