Lean คืออะไรและทำไมมือใหม่ต้องรู้จัก
เวลาเราเขียนโปรแกรม เรามักจะเจอปัญหาว่าโค้ดที่เขียนไปอาจมีบั๊ก (จุดผิดพลาดในโปรแกรม) แฝงอยู่โดยที่เราไม่รู้ตัว Lean (ภาษาโปรแกรมที่ใช้พิสูจน์ความถูกต้องของโค้ด) เข้ามาแก้ปัญหานี้ด้วยการบังคับให้เราพิสูจน์ว่าโค้ดของเราทำงานได้ถูกต้องตามตรรกะจริงๆ ตั้งแต่ตอนเขียน
เปรียบเทียบง่ายๆ เหมือนการทำโจทย์เลข ถ้าคุณแค่เขียนคำตอบลงไป ครูอาจจะตรวจว่าถูกหรือผิด แต่ถ้าคุณต้องเขียนวิธีทำแบบละเอียดทุกขั้นตอน ครูจะรู้ทันทีว่าคุณเข้าใจหลักการจริงๆ หรือแค่เดามา Lean ก็คือเครื่องมือที่บังคับให้เราแสดงวิธีทำทุกขั้นตอนเพื่อให้มั่นใจว่าผลลัพธ์นั้นถูกต้องแน่นอน
สำหรับมือใหม่ที่เพิ่งหัดเขียนโค้ด การเรียนรู้เรื่องนี้ช่วยสร้างวินัยในการคิดเชิงตรรกะได้ดีมาก คุณจะไม่ได้แค่เขียนโค้ดให้ "รันผ่าน" แต่จะเริ่มคิดถึง "ความถูกต้อง" ของสิ่งที่เขียนลงไปจริงๆ ซึ่งเป็นทักษะสำคัญของโปรแกรมเมอร์มืออาชีพ
ความแตกต่างระหว่าง AI ทั่วไปกับ AI ที่ผ่านการพิสูจน์
ปัจจุบันเราใช้ AI ช่วยเขียนโค้ดกันเยอะมาก แต่ AI ส่วนใหญ่มักทำงานแบบ Probabilistic (การคาดเดาจากความน่าจะเป็น) เหมือนการเดาคำถัดไปในประโยค ซึ่งบางครั้งมันก็เดาผิดหรือให้โค้ดที่มีช่องโหว่มาให้เรา
ลองจินตนาการว่าคุณมีผู้ช่วยที่เก่งมากแต่ชอบเดาสุ่ม กับผู้ช่วยที่ตรวจสอบทุกอย่างด้วยหลักการทางคณิตศาสตร์ก่อนส่งงานให้คุณ Lean ทำหน้าที่เป็นผู้ช่วยคนที่สองที่เข้ามาเติมเต็มสิ่งที่ AI ขาดหายไป คือความแม่นยำที่ตรวจสอบได้จริง
เมื่อเราเอา AI มาทำงานร่วมกับ Lean เราจะได้ผลลัพธ์ที่ทรงพลังมาก AI จะเป็นตัวช่วยร่างโครงสร้างโค้ดให้เราอย่างรวดเร็ว ส่วน Lean จะเป็นตัวช่วยตรวจสอบว่าโค้ดเหล่านั้นไม่มีบั๊กซ่อนอยู่ ทำให้เรามั่นใจได้ว่าโค้ดที่ได้มานั้นใช้งานได้จริงและปลอดภัย
เริ่มหัดเขียน Lean ในระดับพื้นฐาน
การเริ่มต้นกับ Lean อาจดูยากเพราะมันเน้นคณิตศาสตร์ แต่ถ้าคุณเข้าใจพื้นฐานการนิยามตัวแปรและการพิสูจน์ คุณจะเห็นภาพว่าทำไมมันถึงช่วยลดบั๊กได้ดีนัก เริ่มแรกเราต้องรู้จักการสร้างฟังก์ชัน (ชุดคำสั่งที่รับค่าเข้ามาและประมวลผลออกมา) ที่พิสูจน์ได้
ลองดูตัวอย่างการนิยามฟังก์ชันบวกเลขง่ายๆ ใน Lean เพื่อดูว่ามันตรวจสอบความถูกต้องอย่างไร
-- นิยามฟังก์ชันบวกเลข
def add (a b : Nat) : Nat :=
a + b
-- พิสูจน์ว่าการบวกเลขมีสมบัติสลับที่
theorem add_comm (a b : Nat) : add a b = add b a := by
sorry -- ตรงนี้คือจุดที่เราต้องใส่เหตุผลพิสูจน์
ในโค้ดชุดนี้ บรรทัดแรกคือการกำหนดฟังก์ชันบวกเลขปกติ บรรทัดถัดมาคือการเขียน Theorem (ทฤษฎีบทที่ต้องพิสูจน์) เพื่อบอกว่าผลลัพธ์ของ a+b ต้องเท่ากับ b+a เสมอ คำว่า sorry คือที่ว่างให้เราใส่ขั้นตอนการพิสูจน์ลงไปเพื่อให้ Lean ยอมรับว่าโค้ดนี้ถูกต้อง
ผลลัพธ์ที่คุณจะเห็นคือ Lean จะขึ้นเครื่องหมายเตือนว่า "ยังพิสูจน์ไม่ครบ" หากคุณลบ sorry ออกแล้วเขียนขั้นตอนการพิสูจน์ที่ถูกต้อง เครื่องหมายเตือนจะหายไป นั่นหมายความว่าโปรแกรมของคุณได้รับการยืนยันว่าถูกต้องตามหลักคณิตศาสตร์เรียบร้อยแล้ว
การใช้ AI ช่วยเพิ่มประสิทธิภาพการเขียนโค้ดอย่างต่อเนื่อง
การเขียนโค้ดไม่ได้จบแค่ตอนที่โปรแกรมทำงานได้ แต่ต้องมีการ Continuous Optimization (การปรับปรุงประสิทธิภาพอย่างต่อเนื่อง) เพื่อให้โค้ดทำงานเร็วขึ้นและประหยัดทรัพยากร การใช้ AI ช่วยวนลูป (กระบวนการทำซ้ำ) ในการปรับปรุงโค้ดเป็นสิ่งที่ทำกันในบริษัทซอฟต์แวร์ระดับโลก
สมมติว่าคุณเขียนฟังก์ชันค้นหาข้อมูลแบบช้าๆ ไว้ AI สามารถแนะนำวิธีเขียนให้เร็วขึ้นโดยการเปลี่ยนโครงสร้างข้อมูล แต่ถ้าไม่มีตัวตรวจสอบ คุณอาจจะได้โค้ดที่เร็วขึ้นแต่มีบั๊กใหม่เพิ่มเข้ามา Lean จึงเป็นตัวการันตีว่าโค้ดที่ AI ปรับปรุงให้นั้นยังคงถูกต้องเหมือนเดิม
วิธีนำไปใช้จริงคือการตั้งค่าให้ระบบ CI/CD (ขั้นตอนการทดสอบและส่งโค้ดขึ้นระบบอัตโนมัติ) ทำงานร่วมกับ Lean ทุกครั้งที่มีการแก้ไขโค้ด ถ้า AI ปรับปรุงโค้ดแล้วทำให้ความถูกต้องเสียไป ระบบจะหยุดการทำงานทันทีและแจ้งเตือนคุณให้แก้ไข
จุดที่มือใหม่มักพลาดและวิธีแก้ไข
ข้อผิดพลาดที่พบบ่อยที่สุดคือการพยายามพิสูจน์ทุกอย่างมากเกินไปจนท้อ มือใหม่มักจะใช้เวลาเป็นวันกับฟังก์ชันเล็กๆ เพียงฟังก์ชันเดียว แทนที่จะโฟกัสแค่ส่วนที่สำคัญที่สุดของระบบ Lean ไม่ได้มีไว้ให้คุณพิสูจน์ทุกบรรทัด แต่มีไว้ให้คุณพิสูจน์จุดที่เสี่ยงต่อความผิดพลาดมากที่สุด
อีกจุดที่พลาดบ่อยคือการลืมอ่าน Error Message (ข้อความแจ้งเตือนเมื่อเกิดข้อผิดพลาด) ของ Lean เพราะมันมักจะดูซับซ้อนและมีศัพท์คณิตศาสตร์เยอะ ให้คุณค่อยๆ อ่านทีละบรรทัด เพราะ Lean มักจะบอกใบ้เสมอว่าเหตุผลที่พิสูจน์ไม่ได้คืออะไร
คำแนะนำสำหรับมือใหม่คือ ให้เริ่มจากโปรเจกต์ขนาดเล็ก (ชิ้นงานที่ฝึกทำเพื่อเรียนรู้) เช่น การเขียนฟังก์ชันจัดการตัวเลขในบัญชี หรือการตรวจสอบเงื่อนไขการเข้าใช้งานระบบ อย่าเพิ่งไปพิสูจน์ระบบที่ซับซ้อนตั้งแต่วันแรก เพราะหัวใจสำคัญคือความเข้าใจในตรรกะ ไม่ใช่ความซับซ้อนของโค้ด
สรุป: การนำแนวคิด Lean ไปปรับใช้ในการทำงานจริง
เมื่อคุณเริ่มเข้าใจว่าการเขียนโค้ดที่ถูกต้องต้องมีหลักฐานรองรับ คุณจะกลายเป็นโปรแกรมเมอร์ที่เขียนงานได้เนี๊ยบกว่าคนอื่น การนำ Lean มาใช้ไม่ได้หมายความว่าคุณต้องเปลี่ยนไปเขียนคณิตศาสตร์จ๋า แต่คือการเปลี่ยน "ทัศนคติ" ในการเขียนโปรแกรม
ตัวอย่างการนำไปใช้จริง: ในการพัฒนาแอปพลิเคชันจัดการสต็อกสินค้า คุณอาจใช้ Lean เพื่อพิสูจน์ว่า "จำนวนสินค้าต้องไม่ติดลบเด็ดขาด" แม้ว่า AI จะแนะนำโค้ดที่รวดเร็วแค่ไหน แต่ถ้าโค้ดนั้นทำให้สต็อกติดลบได้ Lean จะปฏิเสธโค้ดนั้นทันที ทำให้แอปของคุณไม่มีวันเกิดบั๊กเรื่องสต็อกสินค้าผิดพลาด
ความถูกต้องของโค้ดคือหัวใจของอาชีพโปรแกรมเมอร์ ถ้าคุณเริ่มฝึกคิดแบบ Lean ตั้งแต่วันนี้ คุณจะไม่ใช่แค่คนที่เขียนโค้ดเป็น แต่คุณจะเป็นคนที่เขียนโค้ดที่ไว้ใจได้ ซึ่งนี่คือทักษะที่ตลาดแรงงานต้องการตัวมากที่สุดในยุคที่ AI เข้ามามีบทบาทสำคัญ
ที่มา: When you keep AI Lean, you keep AI correct — Stack Overflow Blog