ครบรอบ 14 ปีการเปิดตัวโครงการโอเพนซอร์สของภาษา Go
- หนึ่งในผู้ร่วมก่อตั้งภาษา Go ได้ขึ้นบรรยายครั้งสุดท้ายที่งานประชุม GopherConAU ซึ่งจัดขึ้นที่ซิดนีย์เมื่อวันที่ 10 พฤศจิกายน 2023
- ในการบรรยาย มีการร่วมฉลองวาระครบ 14 ปีนับตั้งแต่ภาษา Go เปิดตัวเป็นโครงการโอเพนซอร์ส พร้อมทั้งพูดถึงทั้งความสำเร็จและสิ่งที่ควรทบทวนตลอดช่วงเวลาที่ผ่านมา
- ผู้บรรยายระบุว่านี่เป็นมุมมองส่วนตัว ไม่ได้เป็นตัวแทนของทีม Go หรือ Google และได้แสดงความขอบคุณต่อชุมชนที่มีส่วนทำให้ภาษา Go ประสบความสำเร็จ
ปัจจัยความสำเร็จและจุดที่ควรปรับปรุงของภาษา Go
- เป้าหมายเดิมของภาษา Go ไม่ใช่การสร้างภาษาโปรแกรมใหม่ แต่คือการปรับปรุงวิธีการเขียนซอฟต์แวร์
- ภาษา Go มุ่งแก้ความซับซ้อนของการสร้างซอฟต์แวร์เซิร์ฟเวอร์สมัยใหม่ เช่น การจัดการ dependencies การทำงานร่วมกันในทีมขนาดใหญ่ ความง่ายในการบำรุงรักษา การทดสอบที่มีประสิทธิภาพ และการใช้ประโยชน์จาก CPU แบบมัลติคอร์และเครือข่ายอย่างมีประสิทธิผล
- Go ไม่ได้เป็นเพียงภาษาโปรแกรม แต่เป็นโครงการที่ทำให้การสร้างซอฟต์แวร์สำหรับใช้งานจริงทำได้ง่ายขึ้นและมีประสิทธิผลมากขึ้น
โกเฟอร์ มาสคอตของภาษา Go
- โกเฟอร์ซึ่งเป็นมาสคอตของภาษา Go มีบทบาทสำคัญต่อความสำเร็จของภาษา Go
- โกเฟอร์เป็นทั้งสัญลักษณ์ของโปรแกรมเมอร์ Go และธงของชุมชน ซึ่งเป็นองค์ประกอบสำคัญต่อการเติบโตของโครงการ
- การเผยแพร่ดีไซน์โกเฟอร์ภายใต้สัญญาอนุญาต Creative Commons Attribution ช่วยส่งเสริมจิตวิญญาณของชุมชน แต่ก็สร้างความยากลำบากจากประเด็นลิขสิทธิ์ด้วยเช่นกัน
ปัจจัยทางเทคนิคที่ทำให้ภาษา Go ประสบความสำเร็จ
- การจัดทำสเปกอย่างเป็นทางการ การมี implementation หลายแบบ ความสามารถในการพกพาข้ามแพลตฟอร์ม การรับประกันความเข้ากันได้ ไลบรารีที่ครบถ้วน ความง่ายในการพัฒนาเครื่องมือ และเครื่องมือจัดรูปแบบโค้ดอัตโนมัติอย่าง
gofmt ล้วนมีส่วนต่อความสำเร็จของภาษา Go
gofmt ส่งอิทธิพลต่อชุมชนการเขียนโปรแกรมโดยรวม จนเป็นแรงผลักให้ภาษาส่วนใหญ่มี formatter มาตรฐานของตนเอง
Concurrency และ interface
- ภาษา Go วางให้ concurrency เป็นองค์ประกอบหลักของภาษา ช่วยให้โครงสร้างของซอฟต์แวร์เซิร์ฟเวอร์เรียบง่ายขึ้น
- interface เป็นแนวคิดเด่นของภาษา Go เป็นคำตอบของ Go ต่อการออกแบบเชิงวัตถุ และมีบทบาทสำคัญต่อ standard library และการจัดการ dependencies
Generics และคอมไพเลอร์
- การมีอยู่ของ interface เป็นหนึ่งในสาเหตุที่ทำให้การเพิ่ม generics เข้าไปในภาษา Go ใช้เวลานาน
- การที่คอมไพเลอร์ Go ยุคแรกเขียนด้วยภาษา C เคยเป็นประเด็นถกเถียงในชุมชนภาษาโปรแกรม แต่ก็เป็นตัวเลือกที่เหมาะสมต่อการพัฒนาของภาษา Go ในเวลานั้น
การบริหารโครงการและการจัดการแพ็กเกจ
- แม้ภาษา Go จะเป็นโครงการโอเพนซอร์ส แต่ในช่วงแรกของการพัฒนาได้ดำเนินการแบบปิด และหลังจากเปิดสาธารณะแล้ว การมีส่วนร่วมจากชุมชนก็เพิ่มขึ้นอย่างก้าวกระโดด
- กระบวนการพัฒนาระบบจัดการแพ็กเกจไม่ได้ราบรื่นนัก และทีมยังขาดความเข้าใจในวิธีทำงานร่วมกับชุมชน
เอกสารประกอบและตัวอย่าง
- เอกสารของภาษา Go ในช่วงแรกยังไม่ตอบโจทย์ความคาดหวังของชุมชน แต่ภายหลังก็มีการปรับปรุง เช่น การนำเสนอตัวอย่างที่รันได้จริงบนเว็บ
ความเห็นของ GN⁺
- ความสำเร็จของภาษา Go มาจากองค์ประกอบอย่าง standard library ที่แข็งแกร่ง การรองรับ concurrency การออกแบบที่ยึด interface เป็นฐาน การจัดการแพ็กเกจที่ชัดเจน เครื่องมือ build และ testing ที่รวดเร็ว การจัดรูปแบบโค้ดที่สม่ำเสมอ การให้ความสำคัญกับการอ่านง่าย และการรับประกันความเข้ากันได้
- ภาษา Go ไม่ได้มีคุณค่าเพียงในฐานะภาษาโปรแกรม แต่ยังนำความเปลี่ยนแปลงมาสู่วิธีพัฒนาซอฟต์แวร์ด้วย ซึ่งเกิดขึ้นได้เพราะความหลากหลายและการสนับสนุนจากชุมชน
- กระบวนการพัฒนาภาษา Go และการทบทวนสิ่งที่ผ่านมา มอบบทเรียนสำคัญต่อการดำเนินโครงการโอเพนซอร์ส
1 ความคิดเห็น
ความเห็นจาก Hacker News
รู้สึกขอบคุณบุคคลสำคัญที่สละเวลาให้กับการทบทวนย้อนหลังของโปรเจ็กต์
ความชื่นชอบต่อภาษา Go และชุมชน
การแบ่งปันประสบการณ์เชิงวิจารณ์ต่อระบบจัดการแพ็กเกจของ Go
มุมมองเชิงวิจารณ์ต่อภาษา Go
ประเด็นที่น่าสนใจเกี่ยวกับการตัดสินใจของ Ken Thompson ในการใช้ C compiler
เน้นย้ำความสำเร็จของการนำ gofmt มาใช้
ในฐานะผู้จัดงาน GopherConAU ได้แชร์เพลย์ลิสต์ทั้งหมด
ข้อดีของการใช้ Go ในการสร้าง monorepo ได้ง่ายและ build แอปได้รวดเร็ว
การกล่าวถึงเรื่อง interoperability ของ Go และทางเลือกด้าน C FFI ที่มีน้อยเกินไป
ความเห็นเกี่ยวกับการเขียน compiler ด้วยภาษาของตัวเอง