ภาพรวมสรุป
-
หัวข้อหลัก
- แนะนำหนังสือและแหล่งข้อมูลที่เกี่ยวข้องซึ่งนักพัฒนาอธิบายโครงสร้างภายในและการตัดสินใจด้านการออกแบบของแอปพลิเคชันโอเพนซอร์สด้วยตนเอง
-
ประเด็นสำคัญ
- นักพัฒนาซอฟต์แวร์มีโอกาสน้อยที่จะได้เรียนรู้โครงสร้างของโปรแกรมขนาดใหญ่ที่มีความสำคัญทางประวัติศาสตร์อย่างเป็นระบบ เมื่อเทียบกับสถาปนิก
- ด้วยเหตุนี้จึงเกิดปัญหาการทำผิดพลาดคล้ายเดิมซ้ำ แทนที่จะนำกรณีความสำเร็จที่มีอยู่มาใช้ให้เกิดประโยชน์
- หนังสือเหล่านี้รวบรวมโครงสร้าง องค์ประกอบ วิธีที่องค์ประกอบต่าง ๆ โต้ตอบกัน และบทเรียนที่ได้จากกระบวนการพัฒนาของโครงการโอเพนซอร์สสำคัญ ๆ
- นักพัฒนาระดับเริ่มต้นสามารถเรียนรู้วิธีคิดของนักพัฒนาที่มีประสบการณ์ ส่วนระดับกลางและระดับสูงสามารถใช้อ้างอิงกรณีตัวอย่างในการแก้ปัญหาการออกแบบที่ซับซ้อนได้
- เอกสารทั้งหมดเผยแพร่ภายใต้สัญญาอนุญาต Creative Commons Attribution 3.0 และรายได้จากการขายหนังสือจะบริจาคให้ Amnesty International
- ชุมชนสามารถมีส่วนร่วมได้ เช่น แจ้งข้อผิดพลาด แปลภาษา หรือเขียนบทใหม่
บทนำ
-
ข้อจำกัดเชิงโครงสร้างในการเรียนรู้การออกแบบซอฟต์แวร์
- สถาปนิกได้สังเกตงานสถาปัตยกรรมจำนวนมากในกระบวนการศึกษา และเรียนรู้คำวิจารณ์จากผู้เชี่ยวชาญควบคู่กันไป
- ในทางกลับกัน นักพัฒนาซอฟต์แวร์มีโอกาสจำกัดในการทำความเข้าใจโปรแกรมขนาดใหญ่อย่างลึกซึ้ง
- นักพัฒนาจำนวนมากสะสมประสบการณ์โดยเน้นโปรแกรมที่ตนเองเขียนขึ้นเป็นหลัก
- ผลคือมีแนวโน้มที่จะทำผิดพลาดด้านการออกแบบคล้ายเดิมซ้ำ มากกว่าจะพัฒนาต่อยอดจากตัวอย่างการออกแบบที่ยอดเยี่ยมในอดีต
-
วัตถุประสงค์ของเอกสาร
- มีเป้าหมายเพื่อให้โครงสร้างจริงของแอปพลิเคชันโอเพนซอร์สอยู่ในรูปแบบที่สามารถวิเคราะห์ได้
- ผู้เขียนโครงการอธิบายโครงสร้างซอฟต์แวร์และบริบทเบื้องหลังการออกแบบด้วยตนเอง
- ช่วยให้นักพัฒนาเรียนรู้วิธีคิดด้านการออกแบบของนักพัฒนาคนอื่น ๆ
เนื้อหา
อธิบายโครงสร้างของโครงการโอเพนซอร์สโดยตรง
-
หัวข้อหลักที่นำมาวิเคราะห์
- หนังสือทั้งหมดสี่เล่มครอบคลุมแอปพลิเคชันโอเพนซอร์สและหัวข้อที่เกี่ยวข้องหลากหลาย
- แต่ละบทอธิบายโครงสร้างและแนวทางการออกแบบของโครงการหรือหัวข้อเทคโนโลยีเฉพาะ
- ผู้เขียนประกอบด้วยนักพัฒนาของโครงการนั้นหรือผู้เชี่ยวชาญที่เกี่ยวข้อง
-
คำถามหลักของการวิเคราะห์
- องค์ประกอบหลักของโปรแกรมคืออะไร
- องค์ประกอบแต่ละส่วนโต้ตอบกันอย่างไร
- มีการตัดสินใจด้านการออกแบบแบบใดเกิดขึ้นในระหว่างกระบวนการพัฒนา
- ได้บทเรียนอะไรจากการสร้างโครงการ
AOSA Volume 1 กล่าวถึงโครงสร้างของแอปพลิเคชันโอเพนซอร์สตัวแทน
-
เนื้อหาหลัก
- ครอบคลุมโครงการหลากหลาย เช่น Asterisk, Audacity, Bash, Berkeley DB, CMake, Eclipse, Graphite, HDFS, LLVM, Mercurial, Selenium WebDriver, Sendmail
- ครอบคลุมขอบเขตกว้าง ตั้งแต่ซอฟต์แวร์ระบบ เครื่องมือพัฒนา ฐานข้อมูล ระบบไฟล์แบบกระจาย เครื่องมือทำงานร่วมกัน ไปจนถึงเครื่องมือ visualization
-
ความสำคัญ
- ช่วยให้เข้าใจโครงสร้างภายในของโครงการโอเพนซอร์สจากมุมมองของนักพัฒนาจริง
- สามารถเปรียบเทียบปัญหาการออกแบบและแนวทางแก้ไขที่ปรากฏซ้ำในสาขาเทคโนโลยีที่แตกต่างกันได้
AOSA Volume 2 ให้กรณีศึกษาด้านเทคโนโลยีและการออกแบบที่ขยายกว้างขึ้น
-
เนื้อหาหลัก
- ครอบคลุมสถาปัตยกรรมเว็บที่ขยายสเกลได้, release engineering ของ Firefox, FreeRTOS, GDB, GHC, Git, GPSD, MediaWiki, Moodle, nginx, Open MPI, Puppet, PyPy, SQLAlchemy, Twisted, ZeroMQ
- รวมหัวข้อหลากหลาย เช่น เว็บ คอมไพเลอร์ ระบบปฏิบัติการ ระบบกระจาย runtime ของภาษา เฟรมเวิร์ก และเครื่องมือโครงสร้างพื้นฐาน
-
ความสำคัญ
- ให้กรณีตัวอย่างเกี่ยวกับวิธีออกแบบและดำเนินงานระบบซอฟต์แวร์ที่ซับซ้อน
- มีประโยชน์สำหรับนักพัฒนาระดับกลางและระดับสูงในการตรวจสอบกรณีจริงของการตัดสินใจด้านการออกแบบ
POSA กล่าวถึงปัญหาด้านประสิทธิภาพของแอปพลิเคชันโอเพนซอร์ส
-
เนื้อหาหลัก
- ครอบคลุม high-performance networking ของ Chrome, การเปลี่ยนผ่านจาก SocialCalc สู่ EtherCalc, ระบบ build Ninja, การปรับแต่ง XML parsing, MemShrink, ประสิทธิภาพเครือข่ายมือถือ และการประมวลผล big data ในชีวสารสนเทศ
-
ความสำคัญ
- แสดงให้เห็นว่าการปรับปรุงประสิทธิภาพซอฟต์แวร์ไม่ได้เป็นเพียงการปรับแต่งโค้ดเท่านั้น แต่เชื่อมโยงกับการออกแบบเชิงโครงสร้าง วิธี deployment สภาพแวดล้อมเครือข่าย และวิธีประมวลผลข้อมูล
- ช่วยให้วิเคราะห์ปัญหาด้านประสิทธิภาพโดยอิงกรณีจริงเป็นหลัก
500 Lines or Less นำแนวคิดหลักไปใช้งานด้วยโค้ดขนาดเล็ก
-
เนื้อหาหลัก
- ครอบคลุมเครื่องมือ visual programming, ระบบ continuous integration, ระบบ build แบบไดนามิก, เว็บครอว์เลอร์, ฐานข้อมูลกราฟแบบ in-memory, เว็บเฟรมเวิร์กแบบ event-driven, อินเทอร์พรีเตอร์ Python, OCR, เว็บสเปรดชีต, static analysis, template engine และเว็บเซิร์ฟเวอร์อย่างง่าย
-
ความสำคัญ
- อธิบายหลักการออกแบบสำคัญภายในขนาดโค้ดที่จำกัด
- จัดทำขึ้นเพื่อให้เรียนรู้แนวคิดของระบบที่ซับซ้อนผ่านการ implement ขนาดเล็กได้
สัญญาอนุญาตและวิธีมีส่วนร่วมมีความชัดเจน
-
สัญญาอนุญาต
- เอกสารนี้เผยแพร่ภายใต้สัญญาอนุญาต Creative Commons Attribution 3.0 Unported
- สามารถใช้เอกสารได้หากปฏิบัติตามเงื่อนไขการแสดงที่มาผู้สร้างสรรค์
-
การใช้รายได้
- ค่าลิขสิทธิ์ทั้งหมดที่เกิดจากการขายหนังสือจะบริจาคให้ Amnesty International
-
วิธีมีส่วนร่วม
- สามารถแจ้งข้อผิดพลาดได้
- สามารถเข้าร่วมแปลเป็นภาษาอื่นหรือรูปแบบอื่นได้
- สามารถเขียนบทที่อธิบายสถาปัตยกรรมของโครงการโอเพนซอร์สใหม่ได้
- ผู้ที่สนใจแปลใหม่หรือเขียนบทสามารถติดต่อผู้เกี่ยวข้องกับโครงการได้
บทสรุป
-
สรุปประเด็นสำคัญ
- เอกสารนี้เป็นชุดกรณีตัวอย่างสำหรับเรียนรู้โครงสร้างภายในและการตัดสินใจด้านการออกแบบของแอปพลิเคชันโอเพนซอร์สอย่างเป็นระบบ
- นักพัฒนาสามารถเข้าใจองค์ประกอบและเหตุผลด้านการออกแบบของทั้งระบบ ไม่ใช่แค่ชิ้นส่วนโค้ดแต่ละส่วน
- สำหรับนักพัฒนาระดับเริ่มต้น เอกสารนี้เป็นจุดเริ่มต้นในการเรียนรู้วิธีคิดของนักพัฒนาที่มีประสบการณ์
- สำหรับนักพัฒนาระดับกลางและระดับสูง เอกสารนี้เป็นแหล่งข้อมูลสำหรับเปรียบเทียบและวิเคราะห์กรณีจริงที่แก้ปัญหาการออกแบบซับซ้อน
-
คุณค่าในเชิงปฏิบัติ
- มีคุณค่าใช้อ้างอิงไม่เพียงสำหรับนักพัฒนาที่ใช้โครงการโอเพนซอร์ส แต่ยังรวมถึงนักพัฒนาที่ออกแบบและดำเนินงานระบบด้วยตนเอง
- ช่วยลดความผิดพลาดด้านการออกแบบที่เกิดซ้ำ และช่วยให้เรียนรู้กรณีการออกแบบที่ผ่านการพิสูจน์แล้ว
- แสดงให้เห็นว่าการแบ่งปันความรู้บนฐานชุมชนสามารถมีส่วนช่วยยกระดับความสามารถในการพัฒนาซอฟต์แวร์ได้
1 ความคิดเห็น
ขอบคุณครับ