จากที่ไปเรียนมาพบว่าในเอกสาร
มีอ้างอิงถึงหนังสือชื่อว่า A Philosophy of Software Design
จึงลองตามไปดูว่าในหนังสือมีอะไรบ้าง
ก็พบว่าเป็นหนังสือที่น่าสนใจ
เขียนโดยคุณ John Ousterhout เป็นอาจารย์สอนเรื่องของ Software Design

โดยหนังสือเล่มนี้เป็นการสรุปแนวคิดต่าง ๆ ของการออกแบบ software

นำข้อผิดพลาดที่เกิดขึ้นจากการวิจัยและสอน รวมทั้งงานจริง ๆ 
หัวใจหลักของการออกแบบ software คือ
การแยกส่วนการทำงานต่าง ๆ ที่มันมีความซับซ้อนออกจากกัน (decomposition)
ออกมาเป็น module เช่น class และ method ซึ่งทำงานเป็นอิสระต่อกัน

เนื้อหาในหนังสือประกอบไปด้วย

  1. Introduction
  2. The nature of complexity
  3. Working code isn’t enough
  4. Modules should be deep
  5. Information hiding (and Leakage)
  6. General-purpose modules are deeper
  7. Different layers, different abstractions
  8. Pull complexity downwards
  9. Better together or better apart? 10 Define errors out of existence
  10. Design it twice
  11. Why write comments? The four excuses
  12. Comments should describe things that aren’t obvious from the code
  13. Choosing names
  14. Write comments first
  15. Modifying existing code
  16. Consistency
  17. Code should be obvious
  18. Software trends
  19. Designing for performance

จาก course Practical Go ที่ไปเรียนมา
จะพูดถึงเรื่องที่ 9 คือ Better together or better apart? 10 Define errors out of existence

มีกลุ่มใน Google Group สำหรับพูดคุยหนังสือเล่มนี้กับผู้เขียนด้วย

สามารถดู VDO เรื่องนี้ได้อีก

ถ้าสังเกตให้ดีจะเป็นหนังสือที่มีเนื้อหาคล้าย ๆ กับหนังสือพวก

  • Clean code
  • Code simplicity
  • The Pragmatic Programmers

เป็นหนังสือในกลุ่มสำหรับนักพัฒนาที่เพิ่มเริ่มต้นจนถึงระดับกลาง
ส่วนใครที่เป็นคนมีประสบการณ์สามารถนำมาศึกษาเพื่อ reflect ตัวเองได้ดีอีกเล่ม
ว่าแล้วไปหาหนังสือเล่มจริงมาอ่านกันดีกว่า