ในตอนล่าสุดของ Dwarkesh Podcast นักวิจัย AI Andrej Karpathy (อดีตผู้อำนวยการฝ่าย AI และ Autopilot Vision ที่ Tesla) ได้แบ่งปันประสบการณ์และมุมมองของเขาเกี่ยวกับการเขียนโค้ดด้วย AI สิ่งที่เขาพูดนั้นโดนใจฉันมาก — โปรแกรมเมอร์หลายคนจะรับรู้ถึงความตึงเครียดและข้อแลกเปลี่ยนแบบเดียวกันกับที่เขาอธิบาย
ด้านล่างนี้ ฉันจะอธิบายประเด็นสำคัญของ Andrej (คุณสามารถดูบทสัมภาษณ์ฉบับเต็มได้หากคุณอยากรู้)
รูปแบบการเขียนโปรแกรม
Andrej อธิบายถึงแนวทางการเขียนโค้ดในปัจจุบัน 3 แนวทางกว้างๆ:
-
โหมดเขียนเองแบบเก่า: เขียนทุกอย่างด้วยตนเอง โดยไม่สนใจเครื่องมือ AI เลย
-
แบบผสมผสานพร้อมเติมข้อความอัตโนมัติ: คุณเขียนตรรกะหลัก แต่ใช้การเติมข้อความอัตโนมัติหรือคำแนะนำจาก AI สำหรับส่วนที่เป็นแบบแผน คุณยังคงรู้แน่ชัดว่าสิ่งต่างๆ ควรทำงานอย่างไร — AI เพียงช่วยในการนำส่วนต่างๆ ไปใช้
-
Vibe coding: คุณแจ้งสิ่งที่ต้องการ เช่น “โปรดนำสิ่งนี้ไปใช้” และปล่อยให้โมเดลทำงานหนัก จากนั้นกด Enter
Andrej จัดตัวเองอยู่ในกลุ่มที่สอง: เขาเขียนโค้ดตรรกะส่วนใหญ่ด้วยตัวเอง โดยใช้การเติมข้อความอัตโนมัติเมื่อสมเหตุสมผล
ข้อดีและข้อเสียของโค้ดที่เขียนด้วย AI
โมเดลการเขียนโค้ด AI ในขณะนี้เก่งในการสร้างโค้ดที่เป็นแบบแผนซึ่งเป็นเพียงการคัดลอกและวาง
โมเดลการเขียนโค้ด AI ยังเก่งในเรื่องที่อยู่ในอินเทอร์เน็ตแล้ว ตัวอย่างเช่น หากคุณกำลังสร้าง HTTP server ใน Go มันสามารถช่วยสร้างโค้ด HTTP server พื้นฐานได้อย่างง่ายดาย เนื่องจากเป็นมาตรฐานพอสมควรเมื่อพิจารณาว่าโมเดลได้รับการฝึกฝนจากโค้ดดังกล่าวจำนวนมาก
โมเดลการเขียนโค้ด AI ช่วยลดอุปสรรคในการเข้าถึงภาษาใหม่ ตัวอย่างเช่น หากคุณมีโปรเจ็กต์ Python ที่คุณคุ้นเคยเป็นอย่างดี และคุณต้องการนำไปใช้ใหม่ใน Rust (เพื่อประสิทธิภาพ) ซึ่งคุณไม่เก่ง นี่เป็นสิ่งที่เหมาะสมอย่างยิ่งสำหรับโมเดลการเขียนโค้ดที่จะช่วย
ในขณะที่โมเดลการเขียนโค้ดมีคุณสมบัติที่ดีทั้งหมดเหล่านี้ แต่ก็มาพร้อมกับข้อเสียบางประการเช่นกัน นี่คือสิ่งที่ Andrej แบ่งปัน
พวกเขาเข้าใจผิดเกี่ยวกับโค้ดอยู่เสมอเนื่องจากมีโค้ดจำนวนมากเกินไปในหน่วยความจำซึ่งโดยทั่วไปจะทำสิ่งต่างๆ ในบางวิธีซึ่งอาจปรับไม่ได้ ตัวอย่างหนึ่ง
So the way to synchronize, so we have eight GPUs that are all doing forward backwards. The way to synchronize gradients between them is to use a distributed data parallel container of PyTorch, which automatically does all the, as you're doing the backward, it will start communicating and synchronizing gradients. I didn't use DDP because I didn't want to use it because it's not necessary. So I threw it out. And I basically wrote my own synchronization routine that's inside the step of the optimizer. And so the models were trying to get me to use the DDP container, and they were very concerned about, this gets way too technical, but I wasn't using that container because I don't need it, and I have a custom implementation of something like it.
โมเดลการเขียนโค้ดยังชอบทำให้สไตล์ยุ่งเหยิง บางครั้งก็ป้องกันมากเกินไป พวกเขาจะสร้างคำสั่ง try-catch จำนวนมากซึ่งโปรแกรมเมอร์เขียนโค้ดโดยมีสมมติฐานที่ปลอดภัยอยู่แล้ว โดยปกติแล้วจะนำไปสู่การใช้งานที่ซับซ้อนและยุ่งเหยิงมาก
พวกเขาจะใช้ API ที่เลิกใช้แล้วเป็นครั้งคราวเช่นกัน นอกจากนี้ยังน่ารำคาญที่ต้องพิมพ์ภาษาอังกฤษมากเกินไปเกี่ยวกับสิ่งที่จำเป็นและรอการนำไปใช้
โดยรวมแล้ว Andrej คิดว่าการใช้โมเดลการเขียนโค้ดที่ใช้ AI อย่างสมบูรณ์เพื่อเขียนโค้ดไม่ใช่ความคิดที่ดี พวกเขามีส่วนที่ดี แต่ก็ยังมีอีกหลายสิ่งที่ต้องปรับปรุง
No comment for this article.