23 คะแนน โดย spilist2 2024-03-09 | 2 ความคิดเห็น | แชร์ทาง WhatsApp

(พอตื่นเช้ามาแล้วกลับมาอ่านอีกที พบว่าโพสต์เดิมมีปัญหาเรื่องฟอร์แมต และก็เขียนยาวเกินไป เลยลงฉบับสรุปใหม่)

ผมเห็นอยู่บ่อย ๆ ว่ามือใหม่ ChatGPT มักทำพลาด 3 อย่างเวลาจะใช้ ChatGPT แก้ ‘ปัญหาที่ซับซ้อน’

  1. คาดหวังว่า ChatGPT จะให้ ‘คำตอบที่ถูกต้อง’ ได้ในครั้งเดียว
  2. คาดหวังว่า ChatGPT จะให้คำตอบที่ถูกต้องได้ ‘ในครั้งเดียว’
  3. เมื่อความคาดหวังนี้ไม่เป็นจริงง่าย ๆ ก็เลยผิดหวัง แล้วใช้ ChatGPT แค่กับปัญหาง่าย ๆ ใช้อย่างรับคำสั่งอย่างเดียว หรือเลิกใช้ไปเลย

สุดท้ายพวกเขาก็พลาดโอกาสมากมายในการเพิ่มผลิตภาพด้วย AI

ซึ่งนี่ก็เคยเป็นตัวผมเองเมื่อไม่กี่เดือนก่อนเหมือนกัน

  • ความเร็วในการโหลดครั้งแรกของแอปช้า เลยลองวิเคราะห์ขนาด bundle แล้วพบไฟล์ JS ที่ใหญ่ผิดปกติ และพบว่าสามารถลบเนื้อหาส่วนใหญ่ของไฟล์ 18,500 บรรทัดนี้ได้
  • ตอนแรกผมไล่ดูด้วยตาแล้วลบด้วยมือเอง แต่ทั้งน่าเบื่อและพลาดบ่อย
  • เลยเริ่มทำงานด้วย ChatGPT แล้วก็พบว่าตัวเองก็คาดหวังแบบมือใหม่เหมือนกันว่าเขาจะให้ ‘คำตอบที่ถูกต้องในครั้งเดียว’
  • พอรู้ตัวก็เปลี่ยนมาใช้ ‘กลยุทธ์ความร่วมมือ 3 ฝ่าย’ และได้เห็นความคืบหน้าอย่างมากอย่างรวดเร็ว

ความคืบหน้าของงาน

ช่วยรีแฟกเตอร์ให้ฉันหน่อย

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

ช่วยเขียนโค้ดสำหรับรีแฟกเตอร์ให้หน่อย

  • แทนที่จะให้ทำเอง ผมขอให้เขียนโค้ด JS สำหรับรีแฟกเตอร์ → ล้มเหลว วิธีนี้ก็ยังเป็นการไล่ลบลงมาทีละบรรทัดอยู่ดี
  • พอมาคิดดู ChatGPT อาจยังไม่ได้เรียนรู้เรื่องการรีแฟกเตอร์ขนาดใหญ่แบบนี้มากพอ

ช่วยเขียนโค้ดรีแฟกเตอร์ด้วย AST ให้หน่อย

  • สิ่งที่ผมต้องการไม่ใช่การลบทีละบรรทัด แต่เป็นการลบเป็นบล็อก กล่าวคือจำเป็นต้องเข้าใจไวยากรณ์ของโค้ด จึงคิดว่าการใช้ AST น่าจะเหมาะ
  • ผมกำหนดบทบาทให้ ChatGPT เป็นวิศวกรที่มีประสบการณ์พัฒนา ESLint แล้วให้เขียนโดยใช้ AST ผลคือได้ boilerplate ที่ยอดเยี่ยมบนฐานของ babel นี่คือ ความก้าวหน้าครั้งใหญ่
  • เพราะผมไม่มีประสบการณ์กับ babel เลยค่อย ๆ เรียนรู้ไปพร้อมกับ ChatGPT และเพิ่มตรรกะเข้าไปเรื่อย ๆ แต่สุดท้ายก็เจอทางตัน การจัดการตรรกะที่ซับซ้อนยังยากอยู่

ฉันลองทำด้วย AST แบบนี้แล้วนะ ตรงนี้ไปต่อไม่ถูก ถ้าเป็นคุณจะทำยังไง?

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

ผลลัพธ์

  • โค้ด 18,500 บรรทัดเหลือ 1,335 บรรทัด และขนาด main chunk bundle ลดลงประมาณ 7.8%
  • เมื่อขนาดไฟล์ JS และตรรกะที่จำเป็นต่อการโหลดครั้งแรกลดลง ความเร็วในการโหลดครั้งแรกก็ดีขึ้นเล็กน้อย
  • ได้ทั้งประสบการณ์และความมั่นใจจากการรีแฟกเตอร์ legacy code ที่ยาวและซับซ้อนด้วย AST
  • ได้ความมั่นใจว่า ปัญหาซับซ้อนส่วนใหญ่สามารถแก้ได้อย่างมีประสิทธิภาพผ่านความร่วมมือ 3 ฝ่ายระหว่าง AI + โค้ด + มนุษย์

โมเดลทางความคิดสำหรับการแก้ปัญหาซับซ้อนร่วมกับ AI อย่างมีประสิทธิภาพ

  1. เข้าใจว่าอะไรคือสิ่งที่ AI ทำได้ดี อะไรคือสิ่งที่โค้ดทำได้ดี และอะไรคือสิ่งที่มนุษย์ทำได้ดี
  2. วิเคราะห์ปัญหาที่ต้องการแก้ แล้วแยกขอบเขตที่ AI/โค้ด/มนุษย์ทำได้ดีออกจากกัน
  3. ช่วยให้ AI สร้างโค้ดตั้งต้นได้ดี จากนั้นลองรันโค้ดนั้นในหน่วยเล็ก ๆ แล้วปรับปรุงร่วมกับ AI และระหว่างทางรวมถึงตอนท้าย ส่วนที่มนุษย์ทำเองได้ง่ายกว่าก็ลงมือทำเอง

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

 
agart319 2024-03-12

อ่านได้เพลินมากครับ

 
moderator 2024-03-09

ได้ลบข้อความที่ซ้ำออกแล้ว