วิธีเขียนโปรแกรมร่วมกับ LLM
(crawshaw.io)- บทความสรุปประสบการณ์การเขียนโปรแกรมโดยใช้ LLM (โมเดลภาษาขนาดใหญ่) ตลอด 1 ปีที่ผ่านมา
- LLM ช่วยเพิ่มประสิทธิภาพการทำงาน และยากที่จะกลับไปเขียนโปรแกรมโดยไม่ใช้มัน
- กำลังพัฒนาเครื่องมือชื่อ sketch.dev โดยเน้นสภาพแวดล้อมการเขียนโปรแกรม Go เป็นหลัก
ภูมิหลัง
- เริ่มต้นจากความอยากรู้อยากเห็นเกี่ยวกับเทคโนโลยีใหม่
- หลงใหลในความสามารถของ LLM ที่สามารถสร้างคำตอบซับซ้อนสำหรับคำถามหรือเขียนโค้ดโปรแกรมได้
- ทำให้รู้สึกถึงความตื่นเต้นและความเป็นไปได้คล้ายกับตอนที่อินเทอร์เน็ตเพิ่งปรากฏขึ้นครั้งแรก
- เห็นประโยชน์สุทธิที่ได้เมื่อเครื่องมือสร้างโค้ดที่ “ส่วนใหญ่ถูกต้อง” และพยายามนำมาใช้งานจริง
กรณีการใช้งานหลัก
-
การเติมโค้ดอัตโนมัติ (Autocomplete)
- เพิ่มประสิทธิภาพการทำงานด้วยการให้ระบบเติมงานเขียนโค้ดที่ทำซ้ำบ่อยโดยอัตโนมัติ
- โดยเฉพาะโมเดล FIM (Fill-In-the-Middle) ถือว่าสำคัญอย่างยิ่งสำหรับงานประจำวัน
-
ใช้แทนการค้นหา (Search)
- ตอบคำถามการเขียนโปรแกรมเฉพาะทาง (เช่น การตั้งค่าความโปร่งใสของปุ่มใน CSS) ได้แม่นยำกว่าค้นหาด้วยเสิร์ชเอนจิน
- แม้ว่าคำตอบของ LLM อาจผิดได้ แต่ก็ยอมรับข้อจำกัดนี้และใช้งานต่อไป
-
การเขียนโปรแกรมแบบขับเคลื่อนด้วยบทสนทนา (Chat-driven Programming)
- เป็นพื้นที่ที่ยากที่สุดแต่ก็มีคุณค่ามากที่สุด
- ช่วยทำงานตั้งต้นแทน เช่น การสร้างไฟล์ใหม่ การค้นหาไลบรารี
- เป้าหมายของการเขียนโปรแกรมแบบโต้ตอบคือการลดความไม่สะดวกในปัจจุบัน และทำให้ความสามารถของ LLM เป็นมิตรกับผู้ใช้มากขึ้น
แก่นสำคัญของการเขียนโปรแกรมแบบโต้ตอบ
-
ทำไมต้องใช้บทสนทนา?
- มีประโยชน์ในการช่วยทำร่างแรกเมื่อพลังงานลดลงระหว่างวัน
- การเห็นร่างแรกแล้วค่อยแก้ไขมีประสิทธิภาพกว่าการเขียนใหม่ทั้งหมดตั้งแต่ต้น
-
วิธีทำงานร่วมกับ LLM
- กำหนดเป้าหมายของงานให้ชัดเจนและกระชับ
- อ่าน ตรวจสอบ และแก้ไขโค้ด
- ใช้ compiler error เพื่อแก้ปัญหาได้อย่างรวดเร็ว
-
การเขียนการทดสอบอย่างมีประสิทธิภาพ
- LLM กระตือรือร้นกับการเขียนเทสต์ และสามารถช่วยสร้างสภาพแวดล้อมการทดสอบที่รอบคอบยิ่งขึ้นได้
- นอกจากการทดสอบแบบอิงตัวอย่างแล้ว ยังขยายไปสู่ fuzz test ได้ด้วย
ตัวอย่าง: ตัวสุ่มตัวอย่างเศษส่วน
- เป้าหมาย: เขียนอัลกอริทึมสำหรับสุ่มตัวอย่างควอไทล์ของสตรีมข้อมูลด้วยภาษา Go
- กระบวนการ
- ใช้ LLM เพื่อทำร่างแรก
- ปรับปรุงโค้ดพร้อมแก้ compile error
- เขียนโค้ดทดสอบใหม่เพื่อให้ได้โครงสร้างที่อ่านง่ายขึ้น
ความเป็นไปได้ของโครงสร้างโค้ดแบบใหม่
-
แพ็กเกจที่เล็กลง เทสต์ที่มากขึ้น
- แพ็กเกจขนาดเล็กให้บริบทของโค้ดที่ชัดเจน ทำให้มีประโยชน์มากขึ้นทั้งต่อ LLM และมนุษย์
- เพิ่มความเป็นไปได้ในการทดสอบแบบอิสระและการคอมไพล์ได้สำเร็จ
-
ตัวอย่าง: API wrapper
- แนะนำให้ใช้ wrapper แบบบางที่ทำเฉพาะส่วนที่ต้องการ แทนการพึ่งพาไลบรารีทางการขนาดใหญ่
- ลดต้นทุนด้านการบำรุงรักษาและการเรียนรู้
ทิศทางในอนาคต: sketch.dev
- Go IDE สำหรับ LLM
- มอบสภาพแวดล้อมการเขียนโปรแกรมที่มี LLM เป็นศูนย์กลาง
- รองรับฟีดแบ็กการทดสอบอัตโนมัติ การแก้ compiler error และการรวม Go module
- เสริมความร่วมมือระหว่างมนุษย์กับ LLM เพื่อสร้างสภาพแวดล้อมที่มีประสิทธิภาพยิ่งขึ้น
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ผู้เขียนเป็นวิศวกรซอฟต์แวร์ระดับโลกอยู่แล้ว เป็นอดีตพนักงานของ Google และเป็นผู้ร่วมก่อตั้ง/CTO ของ Tailscale น่าประทับใจที่ LLMs ทำให้เขาทำงานได้มีประสิทธิภาพมากขึ้น
LLMs ช่วยลดพลังงานตั้งต้นของการทำงาน
เวลาใช้ LLMs ควรใช้เฉพาะในด้านที่ตัวเองรู้ดี
LLMs มีศักยภาพในฐานะเครื่องมือพัฒนาซอฟต์แวร์
คล้ายกับการใช้ search engine
รู้สึกว่าไม่มีความอยากใช้ LLMs
สำหรับคนที่ไม่ใช่โปรแกรมเมอร์ LLMs ช่วยได้มาก
LLMs มีประโยชน์ในการเขียนแอปพลิเคชันแบบง่าย
LLMs ช่วยคนที่เขียนโปรแกรมเป็นงานอดิเรก
LLMs ถูกใช้หลัก ๆ เพื่อ autocomplete และการค้นหา