นี่อาจเป็นความเห็นที่หลายคนไม่เห็นด้วย แต่สำหรับผม TypeScript คือภาษาที่ดีที่สุดสำหรับ Codex เมื่อเป้าหมายคือการส่งมอบซอฟต์แวร์จริง ไม่ใช่แค่เขียนโค้ดไว้โชว์ในเดโม
ไม่ได้เป็นเพราะ TypeScript มีความมหัศจรรย์อะไรเป็นพิเศษ แต่เพราะเครื่องมือเขียนโค้ดด้วย AI มักทำงานได้ดีกว่าในสภาพแวดล้อมที่มีข้อจำกัดชัดเจนและมีสัญญาณทางโครงสร้างที่อ่านได้ง่าย ยิ่งโค้ดเบสอธิบายตัวเองได้มากเท่าไร โมเดลก็ยิ่งต้องเดาน้อยลง และยิ่งควบคุมผลลัพธ์ให้ไปในทางที่พร้อมใช้จริงได้ง่ายขึ้นเท่านั้น
ทำไม TypeScript ถึงเข้ากับเครื่องมือเขียนโค้ดด้วย AI ได้ดีมาก
ในโค้ดเบส JavaScript ที่หลวมมาก โมเดลสามารถสร้างโค้ดที่ดูน่าเชื่อถือได้ แต่ในขณะเดียวกันก็อาจทำลายสมมติฐานสำคัญแบบเงียบ ๆ โค้ดอาจรันได้จริง แต่ไม่ได้แปลว่ามันสอดคล้องกับสถาปัตยกรรม เคารพโครงสร้างข้อมูล หรือหลีกเลี่ยง regression เล็ก ๆ ได้เสมอไป โค้ดแบบ “ดูฉลาด” แต่สร้างภาระในระยะยาวจำนวนมากมักเกิดจากจุดนี้เอง
TypeScript ช่วยลดความคลุมเครือนั้นได้ Types ทำหน้าที่เหมือนสัญญา Interfaces สื่อเจตนาของระบบ Compiler ตอบกลับได้ทันที และการ refactor ขนาดใหญ่ก็ไม่ต้องทำแบบคลำทางมากเท่าเดิม สำหรับ Codex สิ่งนี้หมายถึงการด้นสดน้อยลง และการทำซ้ำแบบมีทิศทางมากขึ้น
- สัญญาที่ชัดเจน: functions, objects และ APIs ถูกอธิบายอย่างตรงไปตรงมามากขึ้น
- ฟีดแบ็กจาก typecheck ทันที: เมื่อระบบตอบกลับด้วย error ที่ชัด โมเดลก็แก้ทิศทางได้เร็วขึ้น
- refactor ขนาดใหญ่ที่ปลอดภัยกว่า: การเปลี่ยนแปลงวงกว้างตรวจสอบได้ง่ายขึ้นในโค้ดเบสจริง
- สัญญาณด้านสถาปัตยกรรมที่ชัดกว่า: types ทำให้ความสัมพันธ์ที่เคยซ่อนอยู่มองเห็นได้
ข้อได้เปรียบจริงอยู่ที่วงจรฟีดแบ็ก
workflow ที่แข็งแรงที่สุดในการใช้ AI เขียนโค้ดยังคงเรียบง่ายมาก: edit, typecheck, lint, test, fix วงจรนี้สำคัญกว่าพรอมต์ที่ดูฉลาด เมื่อเป้าหมายคือคุณภาพระดับ production ระบบวิศวกรรมที่ดีมักชนะความสร้างสรรค์ที่คลุมเครือ
นี่เองคือเหตุผลที่ JavaScript มักเปิดช่องให้ AI ด้นสดมากเกินไป เมื่อข้อจำกัดมีไม่พอ โมเดลจะเติมช่องว่างด้วยการเดาอย่างมั่นใจ บางครั้งมันช่วยได้ แต่บางครั้งก็สร้างความเสียหายแบบเงียบ ๆ ที่เพิ่งมาโผล่ทีหลัง ตอนที่ต้นทุนในการแก้แพงกว่าเดิมแล้ว
TypeScript ไม่ได้ทำให้ความผิดพลาดหายไปทั้งหมด แต่มันช่วยบีบขอบเขตการค้นหาให้แคบลง มันให้เส้นขอบกับโมเดล ช่วยให้แก้ได้เร็วขึ้น และทำให้ระบบที่กำลังถูกแก้ไขอ่านได้เหมือนแผนที่ที่ชัดเจนกว่าเดิมมาก
การส่งมอบสำคัญกว่าการทำเดโม
ถ้าเป้าหมายคือการทำ prototype เร็ว ๆ ภาษาเกือบอะไรก็ใช้ได้ แต่ถ้าเป้าหมายคือการส่งมอบต่อเนื่อง การ refactor ที่สะอาดขึ้น และความพังแบบซ่อนเร้นที่น้อยลง ข้อจำกัดเชิงรูปแบบที่แข็งแรงกว่าจะกลายเป็นข้อได้เปรียบเชิงปฏิบัติทันที
นั่นคือเหตุผลที่ผมยังกลับมาหา TypeScript อยู่เรื่อย ๆ ในงานพัฒนาที่มี AI ช่วย ไม่ใช่เพราะคลั่งภาษา แต่มันคือเรื่องของการควบคุมได้มากกว่า เดาน้อยลง พังเงียบ ๆ น้อยลง และได้ความเร็วทางวิศวกรรมที่เชื่อถือได้มากขึ้น