[북리뷰-IT] 더 나은 프로그래머 되는 법 (한빛미디어, 2024)
저는 은행 IT 부서에서 20년 이상 개발자로 일하며 다양한 프로젝트를 진행해 온 경험을 가지고 있습니다.
끊임없는 변화와 발전을 추구하며 전문성을 다져왔고, 현재는 은행 코어뱅킹 시스템의 핵심 개발을 담당하고 있습니다.
이번에 한빛미디어에서 출판된 "더 나은 프로그래머 되는 법"이라는 책을 읽을 수 있었던 소중한 기회를 얻었고,
현재의 나를 다시 한번 리마인드하며 놓치고 있던 부분들을 채워주는 좋은 계기가 되었습니다.
이 책은 Pete Goodliffe의 원서 "Becoming a Better Programmer"의 개정판으로,
15년 경력을 가진 개발자가 다양한 분야에서 쌓은 풍부한 경험과 지식을 바탕으로 실용적인 조언들이 가득 담겨 있습니다.
책의 주요 내용
"더 나은 프로그래머 되는 법"은 개발자로써 바로 실천할 수 있는 39가지 노하우를 크게 5파트로 소개하고 있고,
구글, 마이크로소프트, 토스 등 국내 개발자 8인의 이야기도 수록되어 있습니다.
각 장은 간단하고 완결된 하나의 주제를 다루므로, 원하는 장부터 선택해서 읽어도 전혀 무리가 없습니다.
또한 프로그래머가 개발하면서 겪을 수 있는 다양한 주제를 다루고 있고, 나아가야 할 방향을 제시하고 있어 큰 도움을 얻을 수 있습니다.
각 장별로 생각나는 몇가지를 적어봅니다.
PART 1 you.write(code)
- 1장 코드에 신경 쓰기
- 좋은 코드를 작성하려면 코드에 신경을 써야하고, 훌륭한 프로그래머가 되려면 시간과 노력을 투자해야 합니다.
- 다른 동료들이 쉽게 파악하고 이해할 수 있도록 의도가 드러나는 코드를 작성해야 하며, 유지보수가 가능하고 정확해야 합니다.
- 2장 정돈된 코드 유지하기
- 자신만의 코드 레이아웃을 만드는 올바른 방법을 익혀야 합니다.
- 불필요한 아스키 아트는 동료의 유지보수를 힘들게 합니다.
- 깔끔하게 코딩을 하고 싶다면, 먼저 생각부터 깔끔하게 정리해야 합니다.
- 기능 변경과 모양 변경을 동시에 하지 말아야 합니다.
- 3장 코드 적게 쓰기
- 중복된 코드는 공통 함수로 만들고, 일부 다른것이 있다면 매개변수를 달리해서 사용해야 합니다.
- 공통 라이브러리의 사용은 코드 작성 시간을 절약해줄 뿐만 아니라 잠재적 결점으로부터 작성자를 보호해줍니다.
- 주석 처리로 코드를 제거하지말고, 확실하게 지우세요. 형상관리로 언제든지 복원가능하니까요.
- 변수의 선언 부분과 정의 부분을 같은 위치에 써야, 코드 이해에 대한 노력을 최소화 합니다.
- 4장 코드 줄여 개선하기
- 코드 리뷰 과정에서 코드를 줄이고 개선할 수 있는 부분을 적극적으로 찾아야 합니다. 코드 중복을 제거하고, 불필요한 조건 분기문을 줄이며, 코드를 단순화해야 합니다.
- 미래에 필요할지도 모르는 기능이라도 코드를 제거하는 것이 안전합니다.
- 5장 코드베이스의 망령
- 오래된 코드를 다시 살펴보는 것은 코딩 기술 등을 향상시키는데 도움을 줍니다.
- 프레임워크나 RDBMS등 개발환경이나 라이브러리가 버전업 됨에 따라 기존 코딩을 단순화 할 수 있습니다.
- 6장 경로 탐색하기
- 코드를 파악하는 가장 좋은 방법은 이미 코드를 파악하고 있는 사람의 도움을 얻는 것입니다.
- 시스템의 실제 구조는 이상적 설계와 다를 수 있습니다. 문서가 아닌 코드를 믿으세요.
- 코드를 배우는 가장 좋은 방법은 수정해보는 것입니다. 그런 다음 실수를 통해 배우세요.
- 7장 똥통에서 뒹굴기
- 나쁜 코드를 수정하는 데 시간과 노력을 들여야 하는지 신중하게 판단하세요. 지금 그대로 놔두는게 실리적일 수도 있습니다.
- 수정으로 인해 기존 기능에 문제가 생기지 않음을 보장할 수 있는 모든 수단을 사용해야 합니다. 충분히 세심하게 검토하고 검증해야 합니다.
- 8장 오류 무시하지 않기
- 코드에서 발생할 수 있는 모든 오류를 무시하면 안됩니다. 은행 시스템에서 발생하는 오류는 심각한 결과를 초래할 수 있기 때문에 모든 오류를 철저하게 해결해야 합니다. 오류 로그를 분석하고, 오류 재현 시나리오를 작성하고, 오류를 근본적으로 해결해야 합니다. 자꾸 미루다 보면 처리하기 어려워집니다.
- 9장 예상하지 못한 것을 예상하기
- 코드 작성 시 가능한 모든 코드 경로를 고려해야 합니다. 나중에 오류나 장애시 대응하려 하지 마세요. 그렇게 할 일을 미루다 보면, 이후 그와 같은 경로 자체가 있음을 잊어버리게 되고 코드는 버그로 가득 찰 것입니다.
- 10장 버그 사냥하기
- 테스트하지 않은 코드는 버그의 번식지나 다름없습니다. 테스트는 표백제 역할을 합니다.
- 은행 시스템은 완벽한 시스템이 아니기 때문에 버그를 찾아 해결하는 능력이 중요합니다. 테스트를 철저히 하고, 코드 리뷰를 통해 버그를 찾고, 정적 분석 도구를 활용하여 버그를 예방해야 합니다.
- 11장 테스트하기
- 코드를 작성하면서 테스트를 같이 작성해야 합니다. 테스트 작성을 미루면 그만큼 테스트 효과가 줄어듭니다.
- 높은 신뢰성을 확보하기 위해 테스트가 필수적입니다. 단위 테스트, 통합 테스트, 시스템 테스트 등 다양한 수준의 테스트를 수행하고, 테스트 자동화 도구를 활용하여 테스트 효율성을 높여야 합니다.
- 12장 복잡도 다루기
- 복잡도는 블롭(소프트웨어 컴포넌트)과 라인(컴포넌트 사이의 연결)에서 비롯되기는 하지만, 대부분 기과한 소프트웨어를 만든 사람이 원인입니다. 설계 패턴을 적절하게 활용하고, 코드 모듈화를 통해 시스템 복잡도를 줄여야 합니다.
- 13장 두 개의 시스템에 대한 이야기
- 나쁜 구조로 인한 문제는 코드 내부에 한정되지 않습니다. 외부와도 연계되어 개개인과 팀,업무 처리 과정, 일정 산정 모두에 악영향을 미칩니다.
- 소프트웨어 구조는 불변의 것이 아닙니다. 필요하다면 변경하고, 변경 가능하게 만들려면 구조를 간결하게 유지해야 합니다. 간결성을 빼앗는 변화에 저항하세요.
- 요구 사항을 파악하기 전까지 구조 설계를 하지 마세요. 추측하지 마세요.
PART 2 연습을 통해 완벽해진다
- 14장 소프트웨어 개발이란
- 좋은 소프트웨어 개발은 머리속에 떠오른 첫 번째 코드를 뱉어내는 카우보이식 코딩이 아니다. 신중하고, 심사숙고하며, 정확한 노력의 산물이다.
- 좋은 프로그래머는 자신이 모든 것을 알지 못한다는 점을 인정하고 겸손한 자세로 일해야 한다.
- 15장 규칙 가지고 놀기
- 은행 시스템은 규정과 컴플라이언스를 준수해야 하기 때문에 개발 프로세스에서 규칙을 준수하는 것이 중요합니다. 코딩 규칙, 문서화 규칙, 테스트 규칙 등을 준수하고, 규칙 위반 사항을 발견하면 개선해야 합니다.
- 모호하게 구두로 전해지는 팀의 규칙에 의존하지 마세요. 무언의 규칙을 명백하게 만들고 코딩 문화를 다스려야 합니다.
- 16장 간결하게 하기
- 간결한 코드는 설계하는 데 많은 노력이 필요합니다. 다만 간결한 코드가 곧 과도하게 단순한 코드를 의미하지는 않습니다.
- 딱 필요한 만큼의 코드만 작성하세요. 무엇이든 추가하는 것은 복잡함이 되고 짐이 될 것입니다.
- 17장 머리 쓰기
- 실수를 인정하고 코딩에 있어서의 잘못된 결정을 인정하세요. 그로부터 배우면 됩니다.
- 용기를 가지고 머리를 사용하세요. 코드를 비판하고 개선할 방법을 결정할 권리가 자신에게 주어졌을을 깨달아야 합니다.
- 18장 변하지 않는 것은 없다
- 은행 시스템은 기술 변화에 따라 지속적으로 업데이트되어야 합니다. 새로운 기술을 배우고, 최신 트렌드를 파악하고, 시스템을 개선하기 위한 노력을 지속해야 합니다.
- 코드 수정에 필요한 것은 무모함이 아니라 용기와 기술입니다.
- '좋은 코드'는 자신의 책임입니다. 당신에게는 변화와 개선을 일으킬 수 있는 힘이 있습니다.
- 때때로 광범위하게 코드를 수정하는 것보다는, 자주 조금씩 검증할 수 있는 수정을 하는 편이 더 낫습니다.
- 자동화된 테스트는 코드 수정에 대한 확신을 심어줄 수 있는 귀중한 안전 도구입니다.
- 19장 코드 재사용 사례
- '복사/붙여넣기' 코딩은 지양하세요. 복제된 코드(복제된 버그)로부터 고통받지 말고, 로직을 공통 함수와 공통 라이브러리에 넣으세요.
- 주의 깊게 조사하지 않은 채 인터넷에서 찾은 코드를 프로젝트에 복사하는 일이 없도록 하세요.
- 다른 사람의 코드를 무시하지 마세요. 자신의 것보다 이미 존재하는 라이브러리를 사용하는 편이 나을 수도 있습니다.
- 20장 효과적인 버전 관리
- 버전 관리 도구를 반드시 사용해야 합니다. 버전관리 도구야 말로 개발의 중추입니다. Git, SVN 등 버전 관리 시스템을 활용하고, 버전 관리 규칙을 준수하며, 코드 변경 사항을 명확하게 기록해야 합니다.
- 버전 관리 도구에 소프트웨어 프로젝트를 구성하는 모든 파일을 저장해야 하나, 불필요한 파일은 포함하지 마세요.
- 21장 골키퍼 있다고 골 안 들어가랴
- 팀간의 의사소통이 건전하지 않으면 코드도 건전해지지 않습니다.
- QA 배포 버전을 신중하게 만들지 않는 것은 테스터들을 존중하지 않는 것입니다.
- QA의 오류보고서를 개인적으로 받아들이지 마세요. 개인적 모욕이 아닙니다.
- 좋은 소프트웨어를 만들려면 QA팀과 건전한 관계를 조성해야 합니다. 품질은 모두의 책임입니다.
- 22장 프리징된 코드의 신기한 사례
- '코드 프리징'은 애매한 용어입니다. 아무리 코드가 변하지 않길 바라지만 코드는 반드시 변경되기 마련이니까요.
- 유일하고 참된 '코드 프리징'은 납득할 만한 출시가 이루어진 시점을 가르킵니다. 이는 곧 코드에 더 이상의 변경이 가해지지 않게 된 시점입니다.
- 23장 제발 저를 출시해주세요
- 소프트웨어는 항상 새로운 체크아웃에서 빌드해야 합니다. 기존에 사용하던 빌드의 일부분을 재사용하는 일이 절대 없도록 해야합니다.
- 최종 결과물을 테스트하지 않았다면 출시해서는 안됩니다.
- 은행 시스템은 엄격한 출시 프로세스를 거쳐야 합니다. 출시 전 테스트를 철저히 수행하고, 출시 일정을 계획하고, 출시 후 시스템을 모니터링해야 합니다.
PART 3 개인적인 일로 받아들이기
- 24장 배움을 사랑하며 살기
- 은행 IT 개발자는 지속적인 학습을 통해 전문성을 발전시켜야 합니다. 새로운 기술을 배우고, 개발 관련 서적을 읽고, 컨퍼런스에 참여하여 지식을 쌓아야 합니다. 배움을 즐기는 것을 배워라!
- 목적을 가지고 자신만의 지식 포트폴리오를 관리하세요.
- 어떤 주제를 잘 배우기 위해 남에게 가르쳐보세요.
- 25장 테스트 주도 개발자
- 자신의 머리로 코드에 항상 집중하고, 어이없고 위험성 높은 오류를 파하도록 해야합니다.
- 은행 시스템 개발에서 테스트 주도 개발(TDD)은 중요한 방법론입니다. TDD를 통해 테스트 케이스를 먼저 작성하고, 테스트 케이스를 통과하는 코드를 개발하여 코드 품질을 높일 수 있습니다.
- 26장 도전 즐기기
- 새로운 기술에 도전하고, 어려운 문제를 해결하고, 끊임없이 노력하여 전문성을 발전시켜야 합니다.
- 다른 플랫폼이나 패러다임을 무시하지 마세요. 자신이 알고 있는 것을 다시 작성하도록 노력하고 다른 플랫폼이나 다른 종류의 프로그래밍 언어를 사랑하세요. 결과를 비교하고 차이를 확인해보세요.
- 27장 부진 피하기
- 기술 향상을 위해 시간과 노력을 투자하세요. 가치 있는 투자이고 보답을 받게 될 것입니다.
- 지속적인 동기 부여를 유지해야 합니다. 목표를 설정하고, 성과를 평가하고, 긍정적인 태도를 유지하여 지속적인 성장을 이끌어낼 수 있습니다.
- 28장 윤리적인 프로그래머
- 읽을 수 없거나 불필요하게 '뛰어난' 코드를 작성하는 방법으로 자신이 없어서는 안 될 사람이라는 것을 부각시키지 마세요.
- 대접 받고 싶은 대로 대접하세요.
- 피곤에 절은 프로그래머는 누구에게도 쓸모가 없습니다. 초과 작업을 하지 마세요. 자신의 한계를 인정하세요.
- 29장 언어에 대한 사랑
- 훌륭한 프로그래머들은 다양한 언어와 방법론을 알고 있는 만큼 문제 해결의 범위가 넓습니다. 이는 좋은 코드를 작성하는데 도움이 됩니다.
- 자신의 언어를 사랑하고, 즐길 수 있는 언어로 작업하세요.
- 하루아침에 언어를 마스터하려 하지 말고, 작업하는 동안 좌절하지 마세요.
- 30장 프로그래머의 자세
- 자신을 돌보며, 일하면서 좋은 자세를 유지하세요.
- 자신을 돌보며, 일하면서 좋은 자세를 유지하세요.
PART 4 일 끝내기
- 31장 '더 열심히'보다는 '더 현명하게'
- 직접 만들기보다는 이미 있는 코드를 현명하게 재사용하세요. 더 중요한 일에 시간을 투자하세요.
- 우선순위가 가장 높은 일에 집중하세요. 가장 긴급한 작업 혹은 가장 가치가 높은 작업은 무엇입니까?
- 특정 작업을 자주 해야 할 경우 컴퓨터가 대신하도록 스크립트를 자동화하세요.
- 개발자는 효율적인 업무 방식을 가지고 일해야 합니다. 시간 관리, 우선순위 설정, 집중력 향상 등을 통해 업무 효율성을 높여야 합니다.
- 32장 끝나야 끝나는 것
- 커다란 작업을 더 작고 잘 아는 일로 나누세요. 더 정확하게 진행 상황을 판단할 수 있습니다.
- 필요 이상으로 많은 작업을 수행하지 마세요. '완료' 상태까지만 작업하세요. 그런 뒤에는 중지하세요.
- 33장 교훈 얻기
- 문제에 직면했을 때, 이를 해결하기 위한 한가지 이상의 접근법을 고려해야 합니다. 그런 다음 작업에 착수해야 합니다.
- 개발 프로젝트에서 발생하는 문제와 실패로부터 교훈을 얻어야 합니다. 실수를 분석하고, 개선점을 찾고, 다음 프로젝트에 반영해야 합니다.
PART 5 사람의 일
- 34장 사람의 힘
- 훌륭한 프로그래머들 주변에 의도적으로 머물으세요. 전문가(키맨)이 누군인지 항상 파악하고 있어야 합니다.
- 35장 생각이 중요하다
- 다른 사람이 코드를 읽고 품평하리라는 것을 알고 나면 좋은 코드를 짜고 싶은 마음이 더 커집니다.
- 36장 말하기!
- 코드는 다른 사람들과의 의사소통입니다. 명백하고 애매모호함이 없어야만 다른 사람들이 코드를 유지보수 할 수 있습니다.
- 더 많은 주석을 단다고 반드시 코드가 더 나아지는 것은 아닙니다. 의사소통에 충실한 코드는 추가적인 주석이 필요 없습니다.
- 적절한 사람들과 적절한 단어를 사용하도록 신경써야합니다.
- 37장 선언문
- 개발 방법론, 최신 경향, 선언문, 유행에 대해 알아두고, 납득할 만한 개발 선언문을 지지하되, 맹목적으로 따르거나 독단적으로 다루지 마세요.
- 38장 코드 찬가
- 보통, 소프트웨어 개발과 관련해 까다로운 부분은 기술적인 측면에 있지 않고, 결국 사람이 문제입니다.
- 39장 태도가 핵심이다
- 당신의 태도가 당신이 프로그래머로서 얼마나 나아갈 수 있는지를 결정합니다. 더 나은 프로그래머가 되고 싶다면 더 나은 태도를 목표로 하세요.
- 어려움에도 굴하지 않고, 도전을 두려워하지 않고, 끊임없이 노력하여 목표를 달성해야 합니다.
책의 장점 및 특징
1. 다양한 주제의 커버리지
코드 작성부터 자기 관리, 협업 방법, 업무 처리에 이르기까지 개발자로서의 삶을 풍부하게 만들어주는 실용적인 조언들로 가득합니다. 이로 인해 독자는 다양한 주제에 대한 깊이 있는 이해를 얻을 수 있습니다.
2. 현업에서의 경험 공유
현업에서 활약하는 국내 개발자 8인의 인터뷰를 통해 그들의 경험담과 함께 현실적인 조언도 얻을 수 있습니다.
이는 독자에게 실제 개발 환경에서의 경험을 공유하고, 그들이 겪은 문제와 해결책에 대해 배울 수 있는 기회를 제공합니다.
3. 저자의 전문성
저자 Pete Goodliffe는 프로그래머이자 소프트웨어 개발 칼럼니스트, 음악가, 그리고 작가로서 다양한 경험을 바탕으로 이 책을 저술하였습니다. 그의 경험은 OS 개발부터 오디오 코덱, 멀티미디어 애플리케이션, 임베디드 펌웨어, iOS 애플리케이션 개발, 데스크톱 애플리케이션 개발에 이르기까지 다양하며, 이러한 경험을 바탕으로 '더 나은 프로그래머 되기'라는 칼럼을 매거진에 기고하고 있습니다.
4. 독립적인 장 구성
이 책의 각 장은 독립적인 주제를 다루므로, 독자는 필요와 관심에 따라 원하는 부분을 선택적으로 읽을 수 있습니다. 이는 독자가 자신의 필요에 따라 책을 읽을 수 있게 해주며, 특정 주제에 대해 깊이 있게 공부할 수 있는 기회를 제공합니다.
특히, 각 장을 읽을 때 '생각해보기'와 '연습해보기'를 대충 훑어보거나 그냥 넘어가지 말고,
본래의 내용을 넘어 더 깊이 생각해보고, 자신의 경험과 주제를 엮어낸다면, 우리도 훌륭한 프로그래머가 될 수 있을 꺼라 봅니다. ^^
이 책은 개발자의 성장과 발전을 위한 필수 도서로, 모든 개발자에게 꼭 추천하고 싶습니다.
이 책을 통해 개발자로서의 여정이 더욱 풍요롭고 성공적이길 바랍니다.
이 책을 읽고 나면 '더 나은 프로그래머'가 되는 길을 찾을 수 있을 것입니다.
이 책을 읽는 모든 개발자에게 행운이 함께하기를 바랍니다.
더 높은 수준의 전문성과 역량을 갖춘 프로그래머로 성장하세요 ^^
"한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 제공 받아 작성된 서평입니다."
#북리뷰 #책 #도서리뷰 #서평 #더나은프로그래머되는법 #프로그래밍 #코드리뷰 #자기관리 #협업방법 #업무처리 #개발자의삶 #소프트웨어개발 #개발노하우 #개발자성장 #PeteGoodliffe #한빛미디어 #OReillyMedia #프로그래밍서적 #코드작성 #프로그래밍스킬 #개발자경험 #개발자인터뷰 #개발자조언 #프로그래밍학습
'Review > Book' 카테고리의 다른 글
[북리뷰-IT] 부트캠프 QA편 (한빛미디어, 2024) (31) | 2024.06.16 |
---|---|
[북리뷰-IT] 개발자를 위한 필수 수학 (한빛미디어, 2024) (33) | 2024.06.15 |
[북리뷰-IT] 빅데이터 분석기사 실기 with Python (데이터에듀, 2024) (75) | 2024.05.04 |
[북리뷰-IT] 랭체인으로 LLM 기반의 AI 서비스 개발하기 (길벗, 2024) (63) | 2024.04.28 |
[북리뷰-IT] 맛있는 디자인 포토샵 CC 2024 (한빛미디어, 2024) (43) | 2024.04.21 |