36 คะแนน โดย GN⁺ 2025-01-08 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • บทความสรุปประสบการณ์การเขียนโปรแกรมโดยใช้ LLM (โมเดลภาษาขนาดใหญ่) ตลอด 1 ปีที่ผ่านมา
  • LLM ช่วยเพิ่มประสิทธิภาพการทำงาน และยากที่จะกลับไปเขียนโปรแกรมโดยไม่ใช้มัน
  • กำลังพัฒนาเครื่องมือชื่อ sketch.dev โดยเน้นสภาพแวดล้อมการเขียนโปรแกรม Go เป็นหลัก

ภูมิหลัง

  • เริ่มต้นจากความอยากรู้อยากเห็นเกี่ยวกับเทคโนโลยีใหม่
  • หลงใหลในความสามารถของ LLM ที่สามารถสร้างคำตอบซับซ้อนสำหรับคำถามหรือเขียนโค้ดโปรแกรมได้
  • ทำให้รู้สึกถึงความตื่นเต้นและความเป็นไปได้คล้ายกับตอนที่อินเทอร์เน็ตเพิ่งปรากฏขึ้นครั้งแรก
  • เห็นประโยชน์สุทธิที่ได้เมื่อเครื่องมือสร้างโค้ดที่ “ส่วนใหญ่ถูกต้อง” และพยายามนำมาใช้งานจริง

กรณีการใช้งานหลัก

  1. การเติมโค้ดอัตโนมัติ (Autocomplete)

    • เพิ่มประสิทธิภาพการทำงานด้วยการให้ระบบเติมงานเขียนโค้ดที่ทำซ้ำบ่อยโดยอัตโนมัติ
    • โดยเฉพาะโมเดล FIM (Fill-In-the-Middle) ถือว่าสำคัญอย่างยิ่งสำหรับงานประจำวัน
  2. ใช้แทนการค้นหา (Search)

    • ตอบคำถามการเขียนโปรแกรมเฉพาะทาง (เช่น การตั้งค่าความโปร่งใสของปุ่มใน CSS) ได้แม่นยำกว่าค้นหาด้วยเสิร์ชเอนจิน
    • แม้ว่าคำตอบของ LLM อาจผิดได้ แต่ก็ยอมรับข้อจำกัดนี้และใช้งานต่อไป
  3. การเขียนโปรแกรมแบบขับเคลื่อนด้วยบทสนทนา (Chat-driven Programming)

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

แก่นสำคัญของการเขียนโปรแกรมแบบโต้ตอบ

  • ทำไมต้องใช้บทสนทนา?

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

    1. กำหนดเป้าหมายของงานให้ชัดเจนและกระชับ
    2. อ่าน ตรวจสอบ และแก้ไขโค้ด
    3. ใช้ compiler error เพื่อแก้ปัญหาได้อย่างรวดเร็ว
  • การเขียนการทดสอบอย่างมีประสิทธิภาพ

    • LLM กระตือรือร้นกับการเขียนเทสต์ และสามารถช่วยสร้างสภาพแวดล้อมการทดสอบที่รอบคอบยิ่งขึ้นได้
    • นอกจากการทดสอบแบบอิงตัวอย่างแล้ว ยังขยายไปสู่ fuzz test ได้ด้วย

ตัวอย่าง: ตัวสุ่มตัวอย่างเศษส่วน

  • เป้าหมาย: เขียนอัลกอริทึมสำหรับสุ่มตัวอย่างควอไทล์ของสตรีมข้อมูลด้วยภาษา Go
  • กระบวนการ
    1. ใช้ LLM เพื่อทำร่างแรก
    2. ปรับปรุงโค้ดพร้อมแก้ compile error
    3. เขียนโค้ดทดสอบใหม่เพื่อให้ได้โครงสร้างที่อ่านง่ายขึ้น

ความเป็นไปได้ของโครงสร้างโค้ดแบบใหม่

  • แพ็กเกจที่เล็กลง เทสต์ที่มากขึ้น

    • แพ็กเกจขนาดเล็กให้บริบทของโค้ดที่ชัดเจน ทำให้มีประโยชน์มากขึ้นทั้งต่อ LLM และมนุษย์
    • เพิ่มความเป็นไปได้ในการทดสอบแบบอิสระและการคอมไพล์ได้สำเร็จ
  • ตัวอย่าง: API wrapper

    • แนะนำให้ใช้ wrapper แบบบางที่ทำเฉพาะส่วนที่ต้องการ แทนการพึ่งพาไลบรารีทางการขนาดใหญ่
    • ลดต้นทุนด้านการบำรุงรักษาและการเรียนรู้

ทิศทางในอนาคต: sketch.dev

  • Go IDE สำหรับ LLM
    • มอบสภาพแวดล้อมการเขียนโปรแกรมที่มี LLM เป็นศูนย์กลาง
    • รองรับฟีดแบ็กการทดสอบอัตโนมัติ การแก้ compiler error และการรวม Go module
    • เสริมความร่วมมือระหว่างมนุษย์กับ LLM เพื่อสร้างสภาพแวดล้อมที่มีประสิทธิภาพยิ่งขึ้น

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

 
GN⁺ 2025-01-08
ความคิดเห็นบน Hacker News
  • ผู้เขียนเป็นวิศวกรซอฟต์แวร์ระดับโลกอยู่แล้ว เป็นอดีตพนักงานของ Google และเป็นผู้ร่วมก่อตั้ง/CTO ของ Tailscale น่าประทับใจที่ LLMs ทำให้เขาทำงานได้มีประสิทธิภาพมากขึ้น

    • LLMs มีประโยชน์เมื่อร่างแนวคิดใหม่ ๆ ในเบื้องต้น
    • ในอดีตเคยดึง implementation มาจากฐานข้อมูล แต่ตอนนี้ LLMs สร้างให้ได้แบบเรียลไทม์
  • LLMs ช่วยลดพลังงานตั้งต้นของการทำงาน

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

    • จะประหยัดเวลาได้ก็ต่อเมื่อสามารถระบุจุดที่ผิดได้ง่าย
    • ช่วยในการค้นหาได้
  • LLMs มีศักยภาพในฐานะเครื่องมือพัฒนาซอฟต์แวร์

    • sketch.dev ให้ตัวอย่างที่สะอาดดีตั้งแต่การลองครั้งแรก
    • ต้องการ LLMs ที่ฝึกตามเอกสารทางการของภาษา
    • ความพยายามทำให้ LLMs ดูเป็นมนุษย์ทำให้รู้สึกไม่สบายใจ
  • คล้ายกับการใช้ search engine

    • การใช้คีย์เวิร์ดที่เหมาะสมเป็นสิ่งสำคัญ
  • รู้สึกว่าไม่มีความอยากใช้ LLMs

    • สนุกกับกระบวนการเขียนโค้ดด้วยตัวเอง
    • LLMs อาจทำให้ต้นทุนเพิ่มขึ้น
  • สำหรับคนที่ไม่ใช่โปรแกรมเมอร์ LLMs ช่วยได้มาก

    • ช่วยลดเวลาในการเขียนโค้ดได้มาก
    • มีประโยชน์กับโปรเจ็กต์ส่วนตัว
  • LLMs มีประโยชน์ในการเขียนแอปพลิเคชันแบบง่าย

    • ถ้าอธิบายผลิตภัณฑ์ขั้นต่ำที่ใช้งานได้ ก็สามารถสร้างโค้ดได้
    • หนี้เทคนิคอาจสะสมอย่างรวดเร็ว
  • LLMs ช่วยคนที่เขียนโปรแกรมเป็นงานอดิเรก

    • ช่วยตั้งค่าโครงสร้างโปรเจ็กต์และสร้างโค้ด
    • แต่คำสั่งที่กำกวมอาจทำให้เกิดปัญหาได้
  • LLMs ถูกใช้หลัก ๆ เพื่อ autocomplete และการค้นหา

    • ChatGPT มีประโยชน์ในการปรับโค้ดที่มีอยู่เดิมให้เหมาะสมยิ่งขึ้น