(พอตื่นเช้ามาแล้วกลับมาอ่านอีกที พบว่าโพสต์เดิมมีปัญหาเรื่องฟอร์แมต และก็เขียนยาวเกินไป เลยลงฉบับสรุปใหม่)
ผมเห็นอยู่บ่อย ๆ ว่ามือใหม่ ChatGPT มักทำพลาด 3 อย่างเวลาจะใช้ ChatGPT แก้ ‘ปัญหาที่ซับซ้อน’
- คาดหวังว่า ChatGPT จะให้ ‘คำตอบที่ถูกต้อง’ ได้ในครั้งเดียว
- คาดหวังว่า ChatGPT จะให้คำตอบที่ถูกต้องได้ ‘ในครั้งเดียว’
- เมื่อความคาดหวังนี้ไม่เป็นจริงง่าย ๆ ก็เลยผิดหวัง แล้วใช้ 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 อย่างมีประสิทธิภาพ
- เข้าใจว่าอะไรคือสิ่งที่ AI ทำได้ดี อะไรคือสิ่งที่โค้ดทำได้ดี และอะไรคือสิ่งที่มนุษย์ทำได้ดี
- วิเคราะห์ปัญหาที่ต้องการแก้ แล้วแยกขอบเขตที่ AI/โค้ด/มนุษย์ทำได้ดีออกจากกัน
- ช่วยให้ AI สร้างโค้ดตั้งต้นได้ดี จากนั้นลองรันโค้ดนั้นในหน่วยเล็ก ๆ แล้วปรับปรุงร่วมกับ AI และระหว่างทางรวมถึงตอนท้าย ส่วนที่มนุษย์ทำเองได้ง่ายกว่าก็ลงมือทำเอง
2 ความคิดเห็น
อ่านได้เพลินมากครับ
ได้ลบข้อความที่ซ้ำออกแล้ว