AI가 코드를 작성하는 시대에는 단순 코딩 노동자는 더 이상 살아남기 어렵습니다. 소프트 엔지니어는 애플리케이션 개발부터 배포 그리고 운영까지 수많은 단계에 참여해야 합니다. 특히 애플리케이션 개발은 설계부터 구현까지 효율적으로 만들어져야 합니다. 그러므로 ‘소프트웨어 엔트로피(시스템의 무질서, 복잡도)’에 대한 끝없는 고민이 이어집니다. 우리는 매번 새로 소프트웨어를 작성할 수는 없으며, 방치되어 있는 레거시 소프트웨어도 우리가 품고 가야 할 자산입니다. 이에 이 책은 두 가지를 강조합니다. ‘프로세스 개선’과 소프트웨어 ‘복잡성 관리’입니다.
이 책은 소프트웨어를 개발하는 전반적인 프로세스나 개발 방법론을 활용하는 방법을 설명합니다. OOP, TDD, DDD 같은 개발 방법론을 어떻게 프로젝트에 활용할지 이야기를 풀어나가며, 단순한 정보 전달이 아닌 저자의 경험을 바탕으로 이야기합니다. 따라서 처음 프로젝트에 참가하는 초보 개발자나 혹은 애플리케이션 개발 경험이 적은 개발자보다는, 어느 정도 개발 경험이 있는 개발자들에게 추천하고 싶습니다.
“시간과 기능에 비례해서 커져가는 내 소프트웨어의 복잡성을 어떻게 풀어야 할까?”, “방치된 코드를 어떤 식으로 최신 기술로 변경해야 할까?” 같은 고민을 하시는 분들에게 소중한 실마리를 제공할 책입니다.
- 김병부 (Line+ 소프트웨어 개발자)
혹시 ‘기도 메타’라는 얘기를 들어본 적이 있을까요? 배포 때마다 배포가 실패하면 믿음과 기도가 부족해서 실패한 것이니 기도를 통해 운에 모든 것을 맡기겠다는 표현입니다.
장애가 발생하면, 이전의 경험에서 해당 문제를 확인하려고 하지는 않나요? 소프트웨어 개발이라는 것은 공학적인 접근이 필요합니다. 공학적인 접근을 위해서는 여러 가지 방법이 있지만, 현재 상태의 관찰, 가설 수립, 예측, 실험, 측정의 단계로 접근할 필요가 있습니다. 이런 각 단계는 절대로 길어서도 안 됩니다. 모든 단계에서는 빠른 피드백이 필요합니다.
단순히, 코딩, 설계, 통합의 관점에서뿐만 아니라 소프트웨어 공학이라는 관점에서 조직과 문화에 대해서도 피드백이 필요합니다. 지금까지 우리의 소프트웨어 개발은 소프트웨어 공학을 적용한다고 생각해 왔지만, 정말로 올바르게 소프트웨어 공학을 적용하고 있었을까요? 이 책에서는 이에 대한 답으로, 빠르게 바뀌는 세상에서 우리는 ‘학습의 전문가’가 되어야 한다고 말합니다. 또한 지속적으로 계속 과학적이고 공학적인 관점에서 소프트웨어 개발을 바라보게 해줍니다.
- 강대명 (소프트웨어 엔지니어, 전 레몬트리 CTO)
저에게는 무척 감동적인 책입니다. 모든 개발자가 읽어야 합니다.
직업 프로그래머로 일하면서 생각대로 개발이 진행되지 않아 소프트웨어 공학에서 답을 찾으려고 무척 노력했습니다. 하지만 당시 소프트웨어 공학은 답이 아니었습니다.
애자일과 관련 실천법에서 답을 찾은 저는 이 실천법을 ‘공학’ 대신 ‘기예’라고 부르며 소프트웨어 공학을 비판하는 입장을 유지했습니다. 이런 저에게 어떤 분이 이 ‘기예’들이야말로 우리가 소프트웨어 공학이라고 부를 수 있는 것이 아니냐는 의견을 주셨고, 비로소 저는 다시 소프트웨어 공학이라는 단어를 사용하기 시작했습니다.
이 책은 우리 업계가 오랫동안 노력해 찾은 ‘올바른 소프트웨어 공학’을 설명합니다. 제가 늘 추천하는 『구글 엔지니어는 이렇게 일한다』가 실증된 엔지니어링을 구체적으로 설명한다면 이 책은 그 책과 짝을 이루어 이론적 배경을 설명합니다.
우리가 다시 길을 찾았습니다.
- 박성철 (컬리 CTO, 『Release의 모든 것』 역자)
다양한 방면에서 활용되는 소프트웨어가 첨단 공학의 집약체임을 부인할 사람은 없을 것입니다. 하지만 역설적이게도 이런 소프트웨어를 만드는 과정은 공학보다는 예술이나 개인기로 여겨지곤 합니다. 저자는 소프트웨어 개발도 공학의 한 분야이며, 따라서 인류가 쌓아온 공학의 지식을 활용해 충분히 개선할 수 있다고 설득합니다.
이 책에서 다루는 실천 방안과 기본 원칙들은 널리 알려지고 검증된 내용이라 새롭지 않을 수도 있습니다. 하지만 이렇게 머릿속에 떠다니던 지식들을 공학의 틀에 잘 녹여, 우리의 프로젝트에 적용할 용기를 낼 수 있도록 설득력 있게 전파하고 있다는 점이 이 책의 매력이라고 생각합니다.
좋은 소프트웨어를 잘 만들기 위해 고민하는 분들에게 좋은 지침이 될 것이라고 생각합니다.
- 안세원 (카카오모빌리티 안드로이드 개발자)
내가 소프트웨어 공학에 관심을 가지게 된 건 아무래도 내 전공이 수의학이다 보니, 개발을 하면서 느끼는 학술적 목마름에 대한 이유가 가장 컸다. 하지만 교과서 같은 『Software Architecture in Practice』 책과 디자인 패턴 같은 것들보다 당시의 내게 더 와닿았던 건, 애자일이라고 불리기 한참 전의 익스트림 프로그래밍(XP)이었다. 모범 관행들은 내 개발 과정에 영감을 주기에 모자람이 없었지만, 나는 결국 그렇게 몇 년을 보낸 뒤 『Software Architecture in Practice』를 다시 정독하고 비로소 소프트웨어 공학에 많은 시간을 보내며 공부했던 기억이 있다.
이 책은 10년이 넘는 개발자로서의 내 방황에 대한 모든 이유를 너무나도 잘 설명하는 글이 가득하다. 특히 2부 ‘소프트웨어 프로세스 개선을 위한 구체적인 실천 방안’에는 정말 보석 같은 내용이 실려 있다. 내가 관행으로만 인식하고 있던 것들에 공학적 뒷받침을 살려준 명문들이다. 공학에 선입견을 가진 분들이라면 꼭 읽어보길 추천 드린다. 우리가 걸었던 길들은 필시 틀린 길이 아니었다.
- 양수열 (크라우드웍스 CTO, 한국인 최초의 자바 챔피언)
대부분의 소프트웨어 프로젝트에서 요구사항 도출, 프로그램 설계와 구현, 디버깅은 모두 동적인 과정이며 반복적인 과정이다. 전체 소프트웨어 개발은 이런 요구분석부터 디버깅에 이르는 과정을 여러 번 반복해 가면서 도메인과 개발 중인 소프트웨어에 대한 지식을 축적해 나가면서 우리가 원하는 소프트웨어의 최종적인 모습을 발견해 나가는 과정에 가깝다고 생각한다.
박재호 님이 깔끔하게 번역한 이 책은 이런 반복적 과정에서 우리가 관심을 가져야 할 요소를 학습 관리와 복잡성 관리라는 두 분야로 나눠 설명하면서, 우리가 더 나은 개발자가 되고 프로젝트를 더 잘 마무리하기 위해 필요한 마인드셋을 갖춰나갈 수 있게 해주는 원칙을 제시한다.
물론 소프트웨어 개발에는 은총알은 없지만, 이 책에 담긴 내용을 마음에 담고 이 책의 지침을 자신의 프로젝트에 구체적으로 적용할 방법을 찾아나가다 보면 더 나은 개발자로 성장하고 프로젝트를 성공으로 이끌 수 있을 것이다.
- 오현석 ((주)모빌리티42 CTO, 기술번역가)
AI가 빠르게 만들어 주는 코드를 그대로 받아들이는 ‘바이브 코딩’ 방식이 확산되면서, 소프트웨어 개발은 더욱 편리해졌지만 역설적으로 이전에는 없던 새로운 차원의 복잡성을 마주하게 되었습니다. 동작 여부에만 집중한 나머지 장기적인 관리와 유지보수에 어려움을 겪는 사례가 늘고 있습니다.
이 책은 이렇게 심화되는 소프트웨어 복잡성을 ‘공학적 접근’으로 다루는 법을 명쾌하게 제시합니다. 점점 복잡해지는 시스템을 체계적으로 관리하고 발전시킬 역량을 키우고 싶은 개발자라면, 이 책에서 깊은 즐거움을 느끼게 될 것입니다.
- 이일민 (이프릴 대표, 『토비의 스프링』 저자)
많은 개발자가 소프트웨어를 개발하면서도 자신이 ‘엔지니어링’을 한다고 느끼지 못합니다. 그 이유는 소프트웨어 공학은 물리적 실체가 없어 다른 공학 분야와 다른 특성이 많고 하드웨어의 눈부신 발전으로 인해 소프트웨어의 많은 문제가 저절로 풀리는 경험을 했기 때문이라고 생각합니다.
이 책은 그런 개발자들의 고민을 정확히 짚어내며, 소프트웨어 공학의 본질을 문제 해결의 절차와 방법론으로 새롭게 정의합니다. 특히 저자는 학습과 복잡성 관리의 중요성을 강조하며, 구체적인 5가지 학습 방법과 소프트웨어 복잡성을 다룰 수 있는 5가지 핵심 특성을 명료하게 제시합니다. 소프트웨어 개발자로서 자신의 업무를 좀 더 공학적으로 접근하고, 체계적이고 효율적으로 문제를 해결하고자 하는 모든 이들에게 이 책을 강력히 추천합니다.
- 허정준 ((주)크몽 AI 엔지니어, 『LLM을 활용한 실전 AI 애플리케이션 개발』 저자)
이 책은 오늘날 숙련된 실무자가 실제로 소프트웨어를 공학적으로 만드는 방식을 제대로 파악해서 설명한다. 이 책에서 제시하는 기술은 엄격하거나 규범적이거나 선형적이라기보다는 소프트웨어에 필요한 방식, 즉 경험적, 반복적, 피드백 중심, 경제적, 코드 실행에 초점을 맞춘 방식으로 규율을 갖추고 있다.
- 글렌 밴더버그(Glenn Vanderburg) (누뱅크 공학 디렉터)
특정 소프트웨어 공학 관례를 따르는 방법을 알려주는 책은 많지만 이 책은 다르다. 데이브는 이 책에서 소프트웨어 공학을 정의하는 본질과 그것이 단순한 기술과는 어떻게 다른지를 설명한다. 소프트웨어 공학을 마스터하기 위해 학습과 복잡성 관리의 달인이 되어야 하는 이유와 방법, 이미 존재하는 관례가 이를 지원하는 방법, 소프트웨어 공학 관점에서 다른 아이디어의 장점을 판단하는 방법을 설명한다. 소프트웨어 개발을 이제 막 시작했든, 수십 년 동안 소프트웨어를 구축해왔든, 소프트웨어 개발을 진정한 공학 분야로 진지하게 여기는 모든 사람을 위한 책이다.
- 데이브 하운슬로(Dave Hounslow) (소프트웨어 엔지니어)
검토를 위해 이 책의 사본을 읽어봤는데, 우리에게 꼭 필요한 내용을 담고 있다. 소프트웨어 엔지니어를 꿈꾸는 사람이나 기술을 마스터하고 싶은 사람이라면 반드시 읽어야 할 필독서다. 전문적인 공학에 대한 실용적인 조언이 가득하다. 대학이나 부트캠프에서 반드시 읽어야 하는 책이다.
- 브라이언 핀스터(Bryan Finster) (USAF 플랫폼 원 수석 공학자 겸 가치 흐름 아키텍트)