3 คะแนน โดย GN⁺ 2024-01-05 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

ครบรอบ 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 ความคิดเห็น

 
GN⁺ 2024-01-05
ความเห็นจาก Hacker News
  • รู้สึกขอบคุณบุคคลสำคัญที่สละเวลาให้กับการทบทวนย้อนหลังของโปรเจ็กต์

    • การจำกัดขอบเขตของภาษาให้เน้นที่ system programming
    • การกำหนดภาษาและหลักการให้ชัดเจน เพื่อหลีกเลี่ยงความกำกวมและการสูญเสียจากการออกแบบที่มีเป้าหมายไม่ตรงกัน
    • การให้ความสำคัญกับคุณภาพ โดยแก้ปัญหาก่อนปล่อยใช้งานซึ่งมีต้นทุนถูกกว่าสำหรับผู้มีส่วนได้ส่วนเสียทุกฝ่าย
    • การรักษาสมดุลระหว่างการแบ่งปันกับชุมชน และการกำกับดูแลภาษาและการออกรุ่นอย่างเข้มงวด
    • การที่ Google ไม่เข้าแทรกแซงมีส่วนช่วยให้ Go ประสบความสำเร็จ และตั้งคำถามว่าสิ่งนี้จะเกิดขึ้นได้กับโปรเจ็กต์อื่นหรือไม่
    • Go เป็นเทคโนโลยีหลักที่ทำให้ซอฟต์แวร์ฝั่งเซิร์ฟเวอร์ย้ายจาก Java ไปสู่ native container และรองรับโครงสร้างพื้นฐานของเว็บแอปพลิเคชันส่วนใหญ่ตลอด 10 ปีที่ผ่านมา
  • ความชื่นชอบต่อภาษา Go และชุมชน

    • ได้รู้จัก Go ในปี 2012 ในฐานะนักพัฒนา Python และประทับใจกับความง่ายของการจัดการบิต
    • ผ่านไป 10 ปีแล้วก็ยังประหลาดใจที่ฟีเจอร์ส่วนใหญ่ของ Go ยังคงทำงานได้ดี
    • รู้สึกขอบคุณ Rob, Ian, Russ และคนอื่น ๆ สำหรับสิ่งที่ทำให้ Go รวมถึงความตรงไปตรงมาเกี่ยวกับ "ความขรุขระของถนน" ร่วมกับชุมชน
    • แม้จะมีมุมมองวิจารณ์ต่อปัญหาเรื่องการจัดการแพ็กเกจ แต่ก็มองว่าตอนนี้ได้มาถึงทางออกที่ดีแล้ว
  • การแบ่งปันประสบการณ์เชิงวิจารณ์ต่อระบบจัดการแพ็กเกจของ Go

    • เมื่อ 10 ปีก่อนเคยแสดงความเห็นวิจารณ์เกี่ยวกับแนวทางจัดการแพ็กเกจของ Go ใน go-nuts และมีประสบการณ์ว่าถูก Rob Pike เพิกเฉย
  • มุมมองเชิงวิจารณ์ต่อภาษา Go

    • ขาดการยอมรับต่อปัญหาเชิงลึกของภาษาอย่างเพียงพอ
    • ไม่แนะนำ Go เพราะระบบ type, การจัดการ error, concurrency ที่ไม่ปลอดภัย และไวยากรณ์ที่เรียบง่ายเกินไป
    • ใช้ Rust เป็นภาษาหลัก และพบวิสัยทัศน์ที่ Go ไม่มีใน Rust
  • ประเด็นที่น่าสนใจเกี่ยวกับการตัดสินใจของ Ken Thompson ในการใช้ C compiler

    • กล่าวถึงความไม่พอใจต่อการตัดสินใจใช้ C compiler ของ Ken Thompson แทน LLVM และโค้ดที่สร้างออกมาในเวอร์ชันแรก ๆ ที่ยังไม่ถูก optimize
    • แต่การตัดสินใจนี้ก็ทำให้สามารถทำ segmented stack ได้อย่างรวดเร็ว
  • เน้นย้ำความสำเร็จของการนำ gofmt มาใช้

    • สร้างคุณค่าอย่างมากด้วยการขจัดข้อถกเถียงเรื่องการฟอร์แมตโค้ดออกไปอย่างสิ้นเชิงตั้งแต่ช่วงเริ่มต้นของโปรเจ็กต์
    • เห็นว่าภาษาใหม่หลายตัวเลียนแบบ gofmt หรือสร้างเครื่องมือที่คล้ายกัน
  • ในฐานะผู้จัดงาน GopherConAU ได้แชร์เพลย์ลิสต์ทั้งหมด

    • ไม่เข้าใจว่าทำไมถึงเปิดเพลย์ลิสต์สาธารณะไม่ได้
  • ข้อดีของการใช้ Go ในการสร้าง monorepo ได้ง่ายและ build แอปได้รวดเร็ว

    • สร้างเครื่องมือ CLI ด้วย Go ได้ง่าย และสามารถใช้เป็นส่วนหนึ่งของ Unix pipeline ได้
    • Go มีประโยชน์สำหรับงานอย่างการวิเคราะห์ล็อกปริมาณมาก
  • การกล่าวถึงเรื่อง interoperability ของ Go และทางเลือกด้าน C FFI ที่มีน้อยเกินไป

    • คำตอบแบบ "เขียนใหม่ด้วย Go" กลายเป็นการตัดตัวเลือกอื่นทิ้ง
  • ความเห็นเกี่ยวกับการเขียน compiler ด้วยภาษาของตัวเอง

    • ตั้งคำถามว่าภาษาที่ไม่สามารถคอมไพล์ด้วยตัวเองเหมาะกับการเขียน compiler หรือไม่
    • ไม่เข้าใจนัยที่ว่าภาษาที่เหมาะกับ compiler จะไม่เหมาะกับแอปพลิเคชันประเภทอื่น และต้องการบริบทเพิ่มเติม