Preface to the Second Edition (คำนำฉบับพิมพ์ครั้งที่สอง)
“ว้าว มีเนื้อหาเยอะขนาดนี้เลยเหรอ!”
ตอนที่เราเริ่มเขียน Fundamentals of Software Architecture ฉบับพิมพ์ครั้งที่สอง เรามีไอเดียอยู่บ้างว่าอยากขยายความและปรับปรุงอะไรจากฉบับพิมพ์ครั้งแรก แต่เหมือนกับโปรเจกต์ซอฟต์แวร์หลายๆ โปรเจกต์ มันก็ขยายขนาดขึ้นเรื่อยๆ
หนึ่งในเป้าหมายที่เราทำสำเร็จคือการทำให้ส่วนของแต่ละ style มีความสม่ำเสมอมากขึ้น ทำให้เปรียบเทียบกันได้ง่ายขึ้น เรายังปรับเปลี่ยนระบบให้คะแนนดาวของเรา เพิ่มหัวข้อและหมวดหมู่ใหม่บางส่วน และเพิ่มหัวข้อใหม่เกี่ยวกับการพิจารณาด้าน cloud, data topology, team topology และ governance ให้กับแต่ละ architectural style นอกจากนี้เรายังเพิ่มเนื้อหาสำคัญให้กับหลายบท ในหัวข้อยอดนิยม เช่น บทที่ 15 และ 18 และเพิ่มบทใหม่ ( บทที่ 11 ) เกี่ยวกับ modular monolith architectural style
เรายังเพิ่มบทใหม่ทั้งหมดหลายบท ครอบคลุม architectural pattern ใน บทที่ 20 จุดตัดกันของ architecture ใน บทที่ 26 และการทบทวน law of software architecture ของเรา (ซึ่งมี corollary ใหม่และ law ใหม่เพิ่มเข้ามา) ใน บทที่ 27
Preface to the First Edition (คำนำฉบับพิมพ์ครั้งแรก)
Axiom
ข้อความหรือข้อเสนอที่ถูกยอมรับว่าเป็นที่ยุติ เป็นที่ยอมรับ หรือเป็นจริงในตัวเอง
นักคณิตศาสตร์สร้างทฤษฎีขึ้นจาก axiom นั่นคือข้อสมมติที่เป็นจริงอย่างไม่มีข้อโต้แย้ง สถาปนิกซอฟต์แวร์เองก็สร้างทฤษฎีขึ้นบน axiom เช่นกัน แต่โลกของซอฟต์แวร์นั้น อ่อนไหว กว่าคณิตศาสตร์มาก สิ่งพื้นฐานต่างๆ ยังคงเปลี่ยนแปลงอย่างรวดเร็วอยู่ตลอด รวมถึง axiom ที่เราใช้เป็นฐานของทฤษฎีด้วย
ระบบนิเวศของการพัฒนาซอฟต์แวร์อยู่ในสภาวะสมดุลแบบพลวัตตลอดเวลา แม้ว่า ณ จุดใดจุดหนึ่งมันจะดูสมดุล แต่ในระยะยาวมันแสดงพฤติกรรมแบบ dynamic ตัวอย่างสมัยใหม่ที่ดีของธรรมชาติของระบบนิเวศนี้คือการเติบโตของ containerization และการเปลี่ยนแปลงที่ตามมา เครื่องมืออย่าง Kubernetes เมื่อสิบปีก่อนยังไม่มีอยู่เลย แต่ตอนนี้กลับมีงานประชุมซอฟต์แวร์ทั้งงานที่จัดขึ้นเพื่อรองรับผู้ใช้ของมันโดยเฉพาะ ระบบนิเวศของซอฟต์แวร์ เปลี่ยนแปลงแบบโกลาหล การเปลี่ยนแปลงเล็กๆ หนึ่งอย่างนำไปสู่การเปลี่ยนแปลงเล็กๆ อีกอย่างหนึ่ง เมื่อเกิดขึ้นซ้ำๆ หลายร้อยครั้ง มันก็สร้างระบบนิเวศใหม่ขึ้นมา
สถาปนิกมีความรับผิดชอบสำคัญในการตั้งคำถามกับข้อสมมติและ axiom ที่ตกทอดมาจากยุคก่อนๆ หนังสือเกี่ยวกับ software architecture หลายเล่มถูกเขียนขึ้นในยุคที่แทบจะไม่เหมือนกับโลกปัจจุบันเลย อันที่จริง ผู้เขียนเชื่อว่าเราต้องตั้งคำถามกับ axiom พื้นฐานอย่างสม่ำเสมอ โดยพิจารณาจาก engineering practice ที่ดีขึ้น ระบบนิเวศเชิงปฏิบัติการ กระบวนการพัฒนาซอฟต์แวร์ และทุกสิ่งที่ประกอบกันขึ้นเป็นสภาวะ สมดุลแบบพลวัตอันวุ่นวายที่สถาปนิกและนักพัฒนาต้องทำงานอยู่ทุกวัน
ผู้ที่เฝ้าสังเกตวงการ software architecture มาอย่างต่อเนื่องต่างได้เห็นวิวัฒนาการของขีดความสามารถต่างๆ เริ่มจาก engineering practice ของ Extreme Programming ต่อเนื่องมาถึง continuous delivery, การปฏิวัติ DevOps, microservices, containerization และตอนนี้คือทรัพยากรบน cloud นวัตกรรมทั้งหมดนี้นำไปสู่ขีดความสามารถใหม่ๆ และ trade-off ใหม่ๆ เมื่อขีดความสามารถเปลี่ยนไป มุมมองของสถาปนิกที่มีต่ออุตสาหกรรม ก็เปลี่ยนตามไปด้วย หลายปีที่ผ่านมา คำนิยาม แบบขำๆ ของ software architecture คือ “สิ่งที่แก้ไขทีหลังได้ยาก” ต่อมา microservices architecture style ก็ปรากฏขึ้น ซึ่ง การเปลี่ยนแปลง กลายเป็น ข้อพิจารณาหลักในการออกแบบ
แต่ละยุคใหม่ต้องการ practice, tool, การวัดผล, pattern และการเปลี่ยนแปลงอื่นๆ อีกมากมาย หนังสือเล่มนี้มองที่ software architecture ในมุมมองสมัยใหม่ โดยคำนึงถึงนวัตกรรมทั้งหมดในทศวรรษที่ผ่านมา พร้อมด้วย metric และการวัดผลใหม่ๆ ที่เหมาะสมกับ โครงสร้างและมุมมองใหม่ในปัจจุบัน
ชื่อรองของหนังสือเราคือ “A Modern Engineering Approach” นักพัฒนาต่างปรารถนามานานแล้วที่จะเปลี่ยนการพัฒนาซอฟต์แวร์จาก งานฝีมือ ที่ช่างฝีมือผู้ชำนาญสร้างผลงานแบบครั้งเดียวจบ ให้กลายเป็นศาสตร์ทาง วิศวกรรม ซึ่งหมายถึงความสามารถในการทำซ้ำได้ ความเข้มงวด และการวิเคราะห์ที่มีประสิทธิภาพ แม้ว่า software engineering จะยังตามหลังศาสตร์ทางวิศวกรรมประเภทอื่นอยู่หลายขั้น (ต้องยอมรับว่าซอฟต์แวร์เป็นศาสตร์ที่ยังใหม่มากเมื่อเทียบกับวิศวกรรมสาขาอื่นๆ ส่วนใหญ่) แต่สถาปนิกก็ได้พัฒนาไปไกลมาก ซึ่งเราจะพูดถึงเรื่องนี้ โดยเฉพาะอย่างยิ่ง Agile engineering practice สมัยใหม่ได้ช่วยให้เกิดความก้าวหน้า ครั้งใหญ่ในประเภทของระบบที่สถาปนิกออกแบบได้
เรายังพูดถึงประเด็นสำคัญอย่าง trade-off analysis ด้วย ในฐานะนักพัฒนาซอฟต์แวร์ มันง่ายมากที่จะหลงใหลไปกับเทคโนโลยีหรือแนวทางใดแนวทางหนึ่ง แต่สถาปนิกต้องประเมินข้อดี ข้อเสีย และแง่มุมที่ไม่สวยงามของทุกทางเลือกอย่างมีสติเสมอ และแทบไม่มีอะไรในโลกความเป็นจริงที่เป็นทางเลือกแบบขาวดำง่ายๆ ทุกอย่างล้วนเป็น trade-off ด้วยมุมมองเชิงปฏิบัตินี้ เราจึงพยายามตัดการตัดสินคุณค่าของเทคโนโลยีออกไป แล้วมุ่งเน้นไปที่การวิเคราะห์ trade-off เพื่อติดอาวุธให้ผู้อ่านมีสายตาเชิงวิเคราะห์ต่อการเลือกใช้เทคโนโลยี
หนังสือเล่มนี้ไม่ได้ทำให้ใครกลายเป็น software architect ได้ในชั่วข้ามคืน มันเป็นสาขาที่ละเอียดอ่อนและมีหลายแง่มุม เราต้องการมอบภาพรวมสมัยใหม่ที่ดีของ software architecture และแง่มุมต่างๆ ของมัน ตั้งแต่โครงสร้างไปจนถึง soft skill ให้กับสถาปนิกทั้งที่มีอยู่แล้วและกำลังจะเติบโตขึ้นมา แม้ว่าหนังสือเล่มนี้จะครอบคลุม pattern ที่รู้จักกันดีอยู่แล้ว แต่เราก็นำเสนอด้วยแนวทางใหม่ โดยอิงจากบทเรียนที่ได้เรียนรู้มา เครื่องมือ engineering practice และข้อมูลอื่นๆ เรานำ axiom ที่มีอยู่แล้วในวงการ software architecture มาคิดทบทวนใหม่ในบริบทของระบบนิเวศปัจจุบัน และออกแบบ architecture โดยคำนึงถึง ภูมิทัศน์สมัยใหม่