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

Go คือค้อนของฉัน ทุกสิ่งล้วนเป็นตะปู

บทนำ

  • Markus เป็นนักพัฒนาที่ทำงานคนเดียวและเป็นผู้สร้างผลิตภัณฑ์ดิจิทัล
  • ทำงานคนเดียวโดยไม่มีทีม และมุ่งเน้นรูปแบบการทำงานที่ยืดหยุ่น
  • หลีกเลี่ยงเทคโนโลยีสแต็กที่ซับซ้อน และโฟกัสที่การส่งมอบคุณค่าให้ลูกค้า

เหตุผลที่เลือก Go

เหตุผลที่ 1: Go ทำได้แทบทุกอย่าง

  • Go เรียบง่าย อ่านง่าย และมีความสม่ำเสมอ
  • สามารถใช้ได้กับงานหลากหลาย เช่น CLI, โครงสร้างพื้นฐานคลาวด์, HTTP server, งานเครือข่าย เป็นต้น
  • แม้แต่เกมบน Nintendo Switch, แอป GUI, และเครื่องสังเคราะห์สตริงบนเทอร์มินัล ก็สามารถพัฒนาด้วย Go ได้

เหตุผลที่ 2: ลดการสลับบริบท

  • การใช้ภาษาโปรแกรมหลายภาษาทำให้การสลับไวยากรณ์เป็นเรื่องยาก
  • หากใช้เพียงภาษาเดียว ก็สามารถหลีกเลี่ยงปัญหานี้ได้
  • จัดการองค์ประกอบต่าง ๆ ได้ง่ายขึ้น เช่น ภาษา, compiler, IDE, toolchain, community เป็นต้น

เหตุผลที่ 3: ความรู้เชิงลึก

  • เมื่อโฟกัสกับภาษาเดียว ก็สามารถสั่งสมความรู้เชิงลึกได้มากขึ้น
  • การมุ่งเน้นที่ภาษาเดียวมีประสิทธิภาพมากกว่าการต้องดูแลหลายภาษา
  • ช่วยลดความซับซ้อนของการพัฒนาซอฟต์แวร์

สรุป

  • Markus ใช้ Go ทำโปรเจกต์ที่หลากหลายได้สำเร็จ
  • เขาเพิ่มผลิตภาพได้ด้วยความรู้เชิงลึกเกี่ยวกับ Go
  • Go ช่วยให้รับมือกับความท้าทายที่หลากหลายได้

สรุปโดย GN⁺

  • Markus ในฐานะนักพัฒนาที่ทำงานคนเดียว เลือกใช้ Go เพื่อลดความซับซ้อนและเพิ่มผลิตภาพ
  • Go ใช้งานได้หลากหลาย เรียบง่าย สม่ำเสมอ และจัดการได้ง่าย
  • การโฟกัสกับภาษาเดียวช่วยให้สร้างความรู้เชิงลึกได้ และมีประสิทธิภาพกว่าการดูแลหลายภาษา
  • Go ช่วยให้ทำโปรเจกต์ที่หลากหลายได้สำเร็จ และอาจเป็นประโยชน์กับนักพัฒนาคนอื่นด้วย

1 ความคิดเห็น

 
GN⁺ 2024-08-13
ความเห็นจาก Hacker News
  • เคยมีประสบการณ์ทำงานในบริษัทที่ใช้ Go ประมวลผลข้อมูลการเงิน

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

    • ต้องใช้เวลา 2-4 ปีจึงจะไปถึงระดับที่พูดได้ว่า "รู้ภาษานี้"
    • ต้องใช้เวลา 8-10 ปีในการเข้าใจภาษา, คอมไพเลอร์, รันไทม์, ไลบรารีมาตรฐาน และแนวทางการเขียนแบบ idiomatic
    • ในช่วงเวลานี้ คุณยังช่วยพัฒนาวิธีใช้งานภาษานั้นและฝึกมือใหม่ให้เก่งขึ้นได้เร็ว
  • คิดว่า Go เหมาะกับงานแทบทุกอย่าง

    • เวลาใช้ Go แล้วมีประสิทธิภาพในการทำงานสูงมาก
    • ถ้าโปรเจกต์ยาวเกิน 100 บรรทัด ก็รู้สึกว่าดีกว่า Python
    • ข้อดีของ Go:
      • ภาษาง่ายมาก
      • ไลบรารีแกนหลักออกแบบมาดี
      • ใช้แค่ toolchain กับไลบรารีแกนหลักก็จัดการงานส่วนใหญ่ได้
  • คิดว่า Go ไม่เหมาะกับโปรเจกต์ส่วนตัว

    • โค้ดยืดยาว และแม้งานง่าย ๆ ก็ต้องเขียนโค้ดเยอะ
    • ขาด enum, union type, null safety ที่เหมาะสม เป็นต้น
    • ด้วยเหตุผลเหล่านี้จึงไม่ค่อยสนุกเวลาใช้กับโปรเจกต์ส่วนตัว
  • ชอบ Typescript และ Rust มากกว่า

    • Deno และ Typescript เป็นเครื่องมือที่ใช้งานได้หลากหลายกว่า Go
    • Typescript ปลอดภัยกว่าและใช้งานตามหลักสรีรศาสตร์ได้ดีกว่า แต่ช้ากว่านิดหน่อย
    • Rust ปลอดภัยกว่าและเร็วกว่า แต่เรียนรู้ยาก
    • ข้อดีของ Typescript:
      • null safety
      • generics ที่รองรับอย่างกว้างขวาง
      • discriminated union types
      • concurrency ที่ปลอดภัย
      • เมธอดสำหรับ collection/iterator
    • ข้อดีของ Go:
      • มีประสิทธิภาพกว่าทั้งด้านขนาดและการใช้หน่วยความจำ
      • GC ของ Go ดีกว่า V8
      • เร็วกว่าในงานแบบ CPU-bound
      • มีไลบรารีมาตรฐานใหญ่กว่า
  • เคยใช้ทั้ง Go และ Typescript แต่ชอบ Kotlin/JVM มากกว่า

    • แม้จะมีความรู้สึกกังวลกับความเป็นสองขั้วของ Gradle/Maven และระบบ build ที่ไม่นิ่ง แต่ก็พึงพอใจกับฟีเจอร์ของภาษาและรันไทม์มาก
  • คิดว่า Go เป็นเครื่องมือสารพัดประโยชน์

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

    • คิดว่าระบบเครื่องมือค่อนข้างเละเทะ
    • Go modules ให้ความรู้สึกเหมือนยังทำไม่เสร็จ
    • generics ยังดูพื้นฐานเกินไป
    • รู้สึกว่า ecosystem ยังไม่สมบูรณ์
  • ชอบเกือบทุกด้านของ Go แต่ในฐานะคนที่เขียนโค้ดเชิงตัวเลขเยอะ การไม่มี operator overloading เป็นข้อเสีย

    • ยังใช้ Python และ C++ ต่อไป
    • Rust น่าสนใจในฐานะตัวแทนของ C++ แต่กฎเกณฑ์เยอะเกินไปหากจะมาแทน Python
  • ชีวิตสั้นเกินกว่าจะเก่งได้หลายอย่าง จึงต้องเลือกอย่างระมัดระวัง

    • เหตุผลที่เลือก Go:
      • ไลบรารีมาตรฐานยอดเยี่ยม
      • อ่านและเขียนง่าย
      • build เป็น static binary เดี่ยวได้
      • ไม่ต้องใช้ container
      • ใช้ได้ทุกที่ (เว็บแอป, เดสก์ท็อปแอป, การพัฒนาเกม, embedded ฯลฯ)