
한빛미디어 후원으로 '더 나은 프로그래머 되는 법' 책을 제공받아 읽었습니다. 책에 대한 소개는 한빛미디어 책 소개 페이지를 참고했습니다.
책의 구성
책을 소개하는 헤드라인을 보면 '더 나은 프로그래머가 되기 위한 자기 계발서, 성장을 위한 레벨업 가이드 북'으로 소개하고 있습니다. 이 책은 단순한 기술서가 아니라 '어떻게 하면 더 나은 프로그래머가 될 수 있을까?'에 대한 선배 개발자들의 나름의 답, 노하우를 담은 책입니다. 책은 크게 5가지 파트로 나뉘며, 프로그래머로서 괜찮은 코드를 작성하기 위해 어떻게 작성하고 연습하면 좋을지를 다룬 기술 관련 파트(01.you.write(code); & 02. 연습을 통해 완벽해진다)와 훌륭한 프로그래머가 갖춰야 할 태도에 대해 다룬 파트(03. 개인적인 일로 받아들이기), 효율적인 업무 처리 방법에 대해 다룬 업무 관련 파트(04. 일 끝내기), 협업에 관해 다룬 파트(05. 사람의 일 파트)로 구성되어 있습니다.
책의 구성은 각 장에서 말하고자 하는 바를 코드와 예시, 비유를 통해 자세하게 설명한 후, 챕터를 다 읽은 후 스스로 생각해 보면 좋을 질문들이 생각해보기에 적혀 있고, 해당 챕터와 연관된 챕터들이 참고에 안내되고, 연습해보기에서 각 장의 내용을 직접 적용해 볼 수 있는 과제들을 제시하고 있습니다.

책을 고르는 기준이자 제가 생각하는 잘 만들어진 책의 기준은 책을 통해 내가 인사이트 얻은 것이 있는가, 생각할 거리를 주는가, 나의 행동을 변화시킬 동기부여 요인이 있는가, 나아가 어떻게 행동하면 좋을지 안내되어 있는가입니다. 이 책은 그런 점에서 명시적으로 생각할거리와 어떻게 행동하면 좋을지 안내되어 있어 추천하고 싶은 책입니다. 한 챕터, 한 챕터 꼼꼼하게 읽고 생각해보기에 나온 질문들에 대해 고민한다고 하면 읽는 데 상당한 시간이 소요될 것 같습니다. 그만큼 깊게 생각할 거리도 잔뜩 안겨주고 있는데, 해당 질문들이 실제 면접에도 쓰일 법한 질문들이라 한 번씩 고민하고 답변해 본다면 어떤 프로그래머가 되고 싶은지 방향성을 정할 때에도 도움이 되고, 추후 면접을 대비할 때에도 유용하리라 생각됩니다.
그래서 이번 책 후기에는 인상 깊었던 챕터들을 소개하고 챕터의 생각해보기에 적혀있는 질문들에 답해보며 책의 후기를 작성해보고자 합니다.
1부 you.write(code);
Chapter7. 똥통에서 뒹굴기
제목이 꽤나 자극적이라 처음부터 흥미가 돋은 챕터였습니다. 챕터를 다 읽으니 아주 찰떡같은 비유였습니다. 우리는 흔히 잘 짜인 코드를 보며 클린 코드라 말하고 이해하기 어렵고 복잡하게 짜인 코드를 보며 코드가 더럽다고 표현합니다. 여기에서 똥통도 더러운 코드를 말하고 있으며 기존에 작성된 ‘더러운 코드’를 맞닥뜨렸을 때 어떻게 해야 할지에 대해 설명하고 있습니다.
(1) 똥통 조사하기 : 평가 기준에 따라 코드 품질 측정하기
내가 보기에는 더러워 보여도 나와 코드 스타일이 다르거나 나와 친숙하지 않아 더럽게 보이는 코드일 수 있습니다. 이 코드가 정말 똥통인지 아래와 같은 몇 가지 기준에 따라 품질을 측정할 필요가 있습니다.
- 자료형을 잘 고르고, 변수명을 적절히 지었는가?
- 코드의 레이아웃을 정돈하여 일관성 있게 작성했는가?
- 특정 기능을 구현하는 코드 부분이 어디에 있는지 쉽게 찾을 수 있는가?
(2) 전투 지역 선택하기 : 코드 수정 전략 세우기
코드를 수정하는 일은 늪이라고 표현할 정도로 쉽게 할 수 있는 작업이 아닙니다. 간단한 수정이라고 해도 해당 수정사항으로 인해 발생할 변경들을 모두 고려해야 하며 전체적인 레이아웃도 고려해야 하기 때문입니다. 코드의 수정 필요성, 프로젝트의 긴급성 정도에 따라 적절한 공략 계획을 세워야 합니다.
- 고쳐야만 하는 코드인가?
- 현재 문제를 해결할 최소한의 수정을 해야 할까?
- 문제 되는 부분을 모두 삭제하고 다시 작성해야 할까?
(3) 똥 치우기 : 코드 수정하기
수정을 한다고 하면 로버트 마틴의 ‘보이스카우트 규칙‘을 따라야 합니다. ‘캠핑을 마치고 떠날 때는 반드시 캠핑하기 전보다 더 깨끗하게 정리하고 떠나야 한다.‘ 변수명을 수정하거나 함수를 나누는 것처럼 간단한 수정이라도 코드를 건드릴 때에는 이전보다 더 나아지도록 변경해야 합니다. 이때 수정으로 인해 기존 기능에 문제가 없도록 자동화 도구를 사용하거나 동료들에게 도움을 요청하는 등의 노력이 필요하며, 단위 테스트를 위해 테스트 코드를 작성하는 것이 좋습니다.
생각해보기
Q. 어째서 코드는 자주 똥 덩어리가 되는 것일까?
A. 똥 덩어리 같은 코드는 코드의 반복, deprecated 된 함수 사용, 효율적이지 않은 코드 때문이라 생각합니다. 이런 코드가 작성되는 이유는 (1) 급하게 결과를 내기 위해 효율성을 고려하지 않아서 (2) 고급 함수 등을 쓰는 등 아직 자유자재로 구사할 정도의 코딩 실력이 되지 않아서 (3) 새로운 input 없이 관습적으로 코드를 작성해서 (4) 새로운 기능이 계속 추가되면서 새롭게 레이아웃을 구성해야 해서 등등이라고 생각합니다.
Q. 어떻게 하면 작업을 시작하는 단계부터 이런 일을 방지할 수 있을까? 가능하기는 한가?
A. 이런 일을 방지하기 위해서는 어떤 코드가 효율적인 코드인지 고민하는 자세, 구현하려는 기능뿐 아니라 제품의 전체 기능과 레이아웃을 사전에 고려하기, 계속 코딩 실력 업그레이드하기와 같은 노력이 필요하다고 생각합니다. 이 모든 노력을 통해서도 똥덩어리는 계속 만들어질 수밖에 없는데, 그 이유는 프로그래밍 기술이 계속 발전하며 기존 코드를 더 유연하게, 안정적으로 만들어 줄 프레임워크가 생길 수 있고, 내 실력이 늘면서 더 효율적으로 코드를 작성하는 방법을 습득했기 때문입니다. 그러니 언제나 100% 완벽한 코드는 없고, 처음엔 깨끗하다고 여겨도 시간이 지나며 점점 탁해질 수 있습니다.
3부 개인적인 일로 받아들이기
Chapter 24 배움을 사랑하며 살기
“배움이란 물살을 거스르며 상류를 나아가는 것과 같다. 나아가지 않으면 뒤쳐진다.” - 중국 속담
배움이란 것은 더 나은 프로그래머가 되기 위한 필수적인 요소이기 때문에 해당 챕터가 이 책의 핵심이라 생각합니다. 프로그래머에게 기량과 능력의 향상이 지속적으로 요구되기 때문에 항상 배움의 상태를 유지할 필요가 있는데, 그렇기 때문에 배움 자체를 즐기지 못하면 프로그래머로서 너무 불행한 삶을 살아갈 것입니다. 그래서 이 책에서는 배움을 즐기는 법을 배우라는 말하고 있어 인상깊었습니다.
여기서 배움을 강조하고 있는데 그렇다면 우리는 무엇을 배워야 할까요? 새로운 기술, 새로운 기술적 기법, 협업과 의사소통 방법, 새로운 문제 영역, 효율적인 학습 방법 등을 배워야 하며, 초보자 단계에서 능숙한 단계, 전문가 단계로까지 도달하기 위해 블로그에 기록하고 대화하며 누군가에게 설명해 보는 것과 직접 배운 것을 실천하는 것을 추천합니다.
생각해보기
Q. 언제 마지막으로 배움의 필요성을 느꼈는가? 그 상황에 대한 접근 방법은 무엇이었는가?
A. 이 책을 읽으면서도 배움의 필요성을 느꼈습니다. 책의 모든 부분을 온전히 이해하지 못함에 속상하였습니다. 책을 읽으며 내가 부족하다 생각하는 많은 부분 중 내게 당장 중요한, 배움이 필요한 것의 우선순위를 세우는 것이 중요하다 생각되었습니다.
5부 사람의 일
Chapter34. 사람의 힘
“프로그래밍은 사람이 하는 일이다.” 우울한 사람 옆에 있으면 같이 우울해지듯, 사람은 사람에게 부정적인 것이든 긍정적인 것이듯 영향을 받게 되어 있습니다. 그렇기에 훌륭한 프로그래머가 되고 싶다면 훌륭한 프로그래머 주변에서 그들과 함께 일하며 그들을 관찰하고 배우는 것이 중요합니다. 그들이 문제를 어떤 관점으로 바라보고 어떻게 해결하는지, 어떤 태도를 취하는지, 특별한 코딩 기법이나 기술은 없는지를 파악하면서 자연스럽게 그들의 수행 능력과 열정, 책임감까지도 얻을 수 있습니다.
생각해보기
Q. 지금 훌륭한 프로그래머라고 생각되는 사람과 함께 있는가? 그 이유는 무엇인가? 그렇지 않다면 그 이유는 무엇인가?
A. 훌륭한 프로그래머라고 생각되는 사람과 같이 일하고 있습니다. 이 책에서 언급하는 모든 조건을 만족하는 특정 사람이 있는 것은 아니지만 나와 같이 일하고 협업하는 동료들에게 각자의 장점들이 있고, 그로부터 배울 점이 있다고 생각하기 때문입니다. 이 질문을 처음 들으며 생각난 답변은 ‘없다’ 였습니다. 내가 그리는 이상적인 완벽한 프로그래머 상에 맞는 사람을 아직 못 만났기 때문입니다. 하지만 내 동료들이 훌륭하지 않냐라고 반문했을 때 그들에게 배울 수 있는 훌륭한 점들이 떠올랐기에 ‘있다’라고 답변을 수정하였습니다.
훌륭의 의미는 ‘칭찬할 만큼 뛰어나고 대단하다’입니다. 모든 점에서 뛰어난 독보적인 존재가 내 옆에 없더라도 각자가 지닌 장점들을 인정하고 이를 학습하는 자세가 중요하지 않나 생각이 든 질문이었습니다. 동료들에게 훌륭하다고 느끼는 포인트들을 종합하여 훌륭한 프로그래머가 어떤 프로그래머인지 한 번 정리해 보았습니다.
- 더 나은 방법이 있는지, 새로운 트렌드는 어떤 것인지 계속 탐구하고 그걸 적용해 나가는 프로그래머
- 모르는 부분을 적극적으로 물어볼 줄 아는 프로그래머
- 기존 프로세스를 충실히 이행하여 정해진 시간 안에 일정한 퀄리티를 보장하는 프로그래머
- 아이디어가 샘솟는 프로그래머
- 궁금함이 해결될 때까지 끝까지 파고드는 프로그래머
이렇게 훌륭한 프로그래머의 모습을 정리해보며 나도 내 동료들에게 긍정적인 자극을 주는 사람이 되어야지 다짐하게 되었습니다.
마지막으로 책을 읽으며 느낀 좋았던 점과 아쉬웠던 점, 총평을 남기며 후기를 하겠습니다.
좋았던 점
- 기술적인 내용, 뻔할 수 있는 내용을 비유와 각종 예시를 통해 읽기 쉽게 작성하였습니다. 특히 프로그래밍을 운전에 비유한 것과 언어와의 관계를 결혼으로 풀어낸 챕터가 비유를 들어 설명하여 이해하기 쉬었고 오래 기억에 남았습니다.
- 각 챕터가 연관은 있지만 연결되어 있지는 않습니다. 그래서 필요한 부분만 골라서 읽을 수 있고, 더 깊게 읽고 싶다면 각 챕터 끝 '참고' 부분에 명시된 관련 챕터를 읽으면 됩니다.
아쉬웠던 점
- 기술적인 내용이 나오는 01&02 파트에서 잘못 작성한 코드와 잘 작성한 코드에 대한 예시가 C 언어로 작성되어 있어 Python 만 익힌 데이터 분석가, 사이언티스트들은 이해하기 어려울 수 있을 것 같습니다.
- 기술 파트에서 잘못된 예시와 더불어 어떻게 고치면 좋을지도 같이 작성되면 좋을 것 같습니다. 어떤 코드는 좋은 코드의 예시도 있지만 잘못된 코드만 작성되어 있기도 합니다.
총평
종합안내서란 표현이 매우 적절하다고 생각합니다. 하드스킬과 소프트스킬을 모두 다룬 책이고, 해당 스킬에 대해 안내할 것들은 자세히 안내하고 생각해 볼거리로 남길 것들은 생각해보기로 남겨 개인의 방향성을 설정하는 데에도 도움이 될 만한 책이기 때문입니다.
하지만, 막 개발을 시작한 신입 개발자가 전부 이해하기에는 어려울 수도 있다고 생각되었습니다. 프로그래밍을 운전자에 비유한 부분이 있는데 이 비유를 이용해 설명하자면, 훌륭한 운전자가 되기 위해서는 운전에 대한 경험도 많아야 하고, 운전에 대한 에티켓, 어떤 경로가 가장 목적지에 도달하기 위해 가장 빠른 경로인지 파악하는 능력, 안전하게 운전하는 방법 등 단순한 운전 조작뿐 아니라 운전 외적으로 다양한 것을 알아야 합니다. 하지만 초보 운전자에게 해당 능력들을 모두 요구할 수도 없으며 해당 능력들을 어떤 것인지 안다고 해도 운전하기에 급급하여 신경을 못 쓸 확률이 높습니다. 이 책은 운전을 잘하기 위한 방법응 다룬 가이드북이기 때문에 운전을 좀 해본 사람들에게 더욱 유용할 것이라 생각됩니다. 그렇다고 신입 개발자, 취미로 개발을 공부하는 일반인들이 읽기에 어렵고 유용하지 않다는 말은 아닙니다. 당장에 모든 것을 이해할 수 없더라도, 운전을 잘하기 위한 방법들이 존재하고, 방법들은 어떤 것들인지 알아두는 것만으로도 아무 가이드 없이 운전하는 사람들보다 백배는 더 빠르게 성장할 수 있기 때문입니다.
요약하자면, 해당 책에서 어려운 부분이 나타났다고 포기하지 말고 어려우면 어려운 대로 해당 챕터는 놔두고 1년 뒤, 2년 뒤 주기적으로 읽으면 좋을 책이라고 생각합니다. 아무 경험이 없는 상태에서 협업에 대한 고민을 하는 것과 프로젝트를 몇 번 경험해 본 개발자들이 협업에 대해 느끼는 바는 다를 것이기 때문입니다. 또한, 이 책은 각 파트 별로 필요한 스킬을 잘 구분하고 있기 때문에 협업에 대해 고민이 생겼을 때 협업 관련 파트를 읽어보고, 효율적인 업무 처리에 대한 고민이 생겼을 때는 04번 일 끝내기 파트를 읽어보는 등 필요할 때마다 필요한 파트를 골라 읽으면 좋을 것 같습니다.