นี่คือหลักการออกแบบซอฟต์แวร์ที่สำคัญที่สุดที่กล่าวถึงในหนังสือเล่มนี้:
- ความซับซ้อนเพิ่มขึ้นแบบค่อยเป็นค่อยไป: คุณต้องให้ความสนใจกับรายละเอียดเล็ก ๆ (ดู p. 11).
- โค้ดที่ใช้ได้นั้นไม่เพียงพอ (ดู p. 14).
- ลงทุนในการปรับปรุงการออกแบบระบบอย่างต่อเนื่องในส่วนเล็ก ๆ (ดู p. 15).
- Modules ควรมีความลึก (ดู p. 22)
- Interface ควรออกแบบให้การใช้งานที่พบได้บ่อยที่สุดง่ายที่สุด (ดู p. 27).
- สำคัญมากกว่าที่ Module มี Interface ที่เรียบง่ายมากกว่า implementation ที่เรียบง่าย (ดู pp. 55, 71).
- Module ที่มีวัตถุประสงค์ทั่วไปจะลึกกว่า (ดู p. 39).
- แยก general-purpose code กับ special-purpose code ออกจากกัน (ดู p. 62).
- Layer ที่แตกต่างกันควรมี abstraction ที่แตกต่างกัน (ดู p. 45).
- ดึง complexity ลงสู่ชั้นล่าง (ดู p. 55).
- กำหนด errors (และ special cases) ให้หายไป (ดู p. 79).
- Design it twice (ดู p. 91).
- Comment ควรอธิบายสิ่งที่ไม่ชัดเจนจากโค้ด (ดู p. 101).
- ซอฟต์แวร์ควรออกแบบเพื่อความง่ายในการอ่าน ไม่ใช่ความง่ายในการเขียน (ดู p. 149).
- การพัฒนาซอฟต์แวร์ในแต่ละขั้นตอนควรเป็น abstraction ไม่ใช่ feature (ดู p. 154).