หนังสือเล่มนี้พูดถึงเรื่องเดียว นั่นคือความซับซ้อน (complexity) การจัดการกับความซับซ้อนคือความท้าทายที่สำคัญที่สุดในการออกแบบซอฟต์แวร์ มันเป็นสิ่งที่ทำให้ระบบสร้างและบำรุงรักษาได้ยาก และมักทำให้ระบบทำงานช้าลงอีกด้วย ตลอดทั้งเล่มนี้ ผมได้พยายามอธิบายสาเหตุหลักที่นำไปสู่ความซับซ้อน อย่างเช่น dependencies และ obscurity ผมได้พูดถึง red flags ที่จะช่วยให้คุณระบุความซับซ้อนที่ไม่จำเป็นได้ เช่น information leakage, error conditions ที่ไม่จำเป็น, หรือชื่อที่ generic เกินไป ผมได้นำเสนอแนวคิดทั่วไปที่คุณสามารถใช้เพื่อสร้างระบบซอฟต์แวร์ที่เรียบง่ายขึ้น เช่น การออกแบบคลาสให้ deep และ generic, การทำให้ errors หมดไปตั้งแต่ต้น (defining errors out of existence), และการแยก interface documentation ออกจาก implementation documentation และสุดท้าย ผมได้พูดถึง investment mindset ที่จำเป็นในการสร้างดีไซน์ที่เรียบง่าย
ข้อเสียของคำแนะนำทั้งหมดนี้คือมันสร้างงานเพิ่มขึ้นในช่วงแรกของโปรเจกต์ ยิ่งไปกว่านั้น ถ้าคุณไม่คุ้นเคยกับการคิดถึงเรื่องการออกแบบ คุณจะยิ่งทำงานช้าลงไปอีกในขณะที่เรียนรู้เทคนิคการออกแบบที่ดี ถ้าสิ่งเดียวที่สำคัญสำหรับคุณคือการทำให้โค้ดปัจจุบันของคุณทำงานได้เร็วที่สุดเท่าที่จะเป็นไปได้ การคิดถึงการออกแบบก็จะดูเหมือนเป็นงานที่น่าเบื่อที่ขวางทางเป้าหมายที่แท้จริงของคุณ
ในทางกลับกัน ถ้าการออกแบบที่ดีคือเป้าหมายสำคัญสำหรับคุณ แนวคิดในหนังสือเล่มนี้จะทำให้การเขียนโปรแกรมสนุกยิ่งขึ้น การออกแบบคือปริศนาที่น่าหลงใหล: เราจะแก้ปัญหาเฉพาะอย่างหนึ่งด้วยโครงสร้างที่เรียบง่ายที่สุดเท่าที่เป็นไปได้ได้อย่างไร? การสำรวจแนวทางต่างๆ เป็นเรื่องสนุก และเป็นความรู้สึกที่ยอดเยี่ยมเมื่อได้ค้นพบโซลูชันที่ทั้งเรียบง่ายและทรงพลัง ดีไซน์ที่สะอาด เรียบง่าย และชัดเจนนั้นเป็นสิ่งที่สวยงาม
ยิ่งไปกว่านั้น การลงทุนในการออกแบบที่ดีจะให้ผลตอบแทนอย่างรวดเร็ว modules ที่คุณกำหนดอย่างรอบคอบตอนเริ่มโปรเจกต์จะช่วยประหยัดเวลาในภายหลังเมื่อคุณนำกลับมาใช้ซ้ำแล้วซ้ำเล่า documentation ที่ชัดเจนที่คุณเขียนเมื่อหกเดือนก่อน จะช่วยประหยัดเวลาเมื่อคุณกลับมาเขียนโค้ดเพื่อเพิ่มฟีเจอร์ใหม่ เวลาที่คุณใช้ในการฝึกฝนทักษะการออกแบบก็จะคุ้มค่าเช่นกัน เมื่อทักษะและประสบการณ์ของคุณเพิ่มขึ้น คุณจะพบว่าคุณสามารถสร้างดีไซน์ที่ดีได้เร็วขึ้นเรื่อยๆ การออกแบบที่ดีนั้นใช้เวลาไม่มากไปกว่าการออกแบบแบบลวกๆ (quick-and-dirty design) เมื่อคุณรู้วิธีแล้ว
รางวัลของการเป็นนักออกแบบที่ดีคือคุณจะได้ใช้เวลาส่วนใหญ่อยู่ในขั้นตอนการออกแบบ ซึ่งเป็นเรื่องสนุก นักออกแบบที่แย่มักใช้เวลาส่วนใหญ่ไปกับการตามล่าบั๊กในโค้ดที่ซับซ้อนและเปราะบาง ถ้าคุณพัฒนาทักษะการออกแบบของคุณ ไม่เพียงแต่คุณจะผลิตซอฟต์แวร์ที่มีคุณภาพสูงขึ้นได้เร็วขึ้นเท่านั้น แต่กระบวนการพัฒนาซอฟต์แวร์จะสนุกยิ่งขึ้นด้วย