การพัฒนาคือการสร้างสรรค์สิ่งใหม่และมีประโยชน์ซ้ำๆ
เมื่อเรานึกถึงการพัฒนา มักจะนึกถึงการพัฒนาผลิตภัณฑ์ใหม่ ซึ่งแตกต่างจากการผลิตที่สร้างผลิตภัณฑ์แต่ละชิ้น แต่เป็นการสร้างข้อกำหนดการออกแบบหรือแม่พิมพ์สำหรับผลิตภัณฑ์เหล่านั้น
ดังนั้น แบบพิมพ์เขียวหรือแม่พิมพ์ที่สร้างขึ้นจากการพัฒนาผลิตภัณฑ์ใหม่จึงถูกนำไปใช้ซ้ำๆ ในโรงงานเพื่อผลิตผลิตภัณฑ์ที่เหมือนกันจำนวนมาก
นอกจากนี้ยังมีการใช้งานในลักษณะของการพัฒนาความสามารถส่วนบุคคล หรือการพัฒนาสังคมและประเทศ ซึ่งหมายถึงไม่ใช่แค่การเพิ่มสิ่งที่ตนมีอยู่เท่านั้น แต่ยังรวมถึงความสามารถในการใช้ประโยชน์จากความสามารถที่พัฒนาขึ้นมาซ้ำๆ ได้
แม้ว่าอำนาจทางเศรษฐกิจของบุคคลและสังคมอาจผันผวนตามสภาวะเศรษฐกิจ แต่ความสามารถที่ได้รับการพัฒนาขึ้นนั้นโดยพื้นฐานแล้วจะคงอยู่ถาวร
แม้ว่าจะลดลง ก็ถือเป็นการเสื่อมถอยมากกว่าการผันผวนขึ้นลงของความเจริญรุ่งเรืองทางเศรษฐกิจ
นอกเหนือจากนี้ ยังมีการพัฒนาเทคโนโลยีและความรู้ ซึ่งแตกต่างจากความสามารถของบุคคลหรือสังคมเฉพาะเจาะจงตรงที่มีลักษณะที่สามารถแบ่งปันได้ง่าย
และในบรรดาผลิตภัณฑ์ ความสามารถ ความรู้ และเทคโนโลยีที่เป็นผลลัพธ์ของการพัฒนาเหล่านี้ บางส่วนสามารถนำไปสู่การพัฒนาในลำดับถัดไปได้
ด้วยการพัฒนาผลลัพธ์ที่เป็นประโยชน์ดังกล่าว ขอบเขตของการพัฒนาก็จะกว้างขึ้น และประสิทธิภาพกับคุณภาพก็จะดีขึ้นด้วย
การพัฒนาซอฟต์แวร์ที่ขับเคลื่อนด้วย AI
โดยทั่วไปแล้ว การพัฒนาต้องใช้เวลาและความพยายามอย่างมาก โดยเฉพาะอย่างยิ่งเมื่อสังคมก้าวหน้าและสิ่งต่างๆ มีความซับซ้อนมากขึ้น การสร้างสิ่งใหม่ๆ ก็ยิ่งยากขึ้นไปอีก
อย่างไรก็ตาม ด้วยการถือกำเนิดของ AI เชิงสร้างสรรค์ สถานการณ์นี้กำลังเปลี่ยนแปลงไป ปัจจุบัน การพัฒนาซอฟต์แวร์กำลังเผชิญกับการเปลี่ยนแปลงครั้งใหญ่ ต้องขอบคุณความสามารถในการเขียนโปรแกรมระดับสูงของ AI เชิงสร้างสรรค์
ในสถานการณ์นี้ วิสัยทัศน์ในอนาคตที่ตัวแทนอัตโนมัติที่ใช้ AI เชิงสร้างสรรค์จะกลายเป็นศูนย์กลางของการพัฒนาซอฟต์แวร์ในฐานะวิศวกรซอฟต์แวร์ กำลังกลายเป็นความจริงแล้ว
ขณะนี้เราอยู่ในช่วงเปลี่ยนผ่าน แม้ว่าเราจะยังไม่สามารถมอบหมายการพัฒนาทั้งหมดให้ AI เชิงสร้างสรรค์ได้ แต่การใช้ AI เชิงสร้างสรรค์อย่างชาญฉลาดสามารถขับเคลื่อนการพัฒนาซอฟต์แวร์ได้อย่างมีประสิทธิภาพ
สิ่งนี้เรียกว่าการพัฒนาซอฟต์แวร์ที่ขับเคลื่อนด้วย AI
การพัฒนาแบบเน้นการพัฒนา
เมื่อ AI เชิงสร้างสรรค์ทำให้การพัฒนาซอฟต์แวร์มีประสิทธิภาพมากขึ้น มันไม่เพียงแต่ช่วยปรับปรุงการพัฒนาซอฟต์แวร์ที่เป็นเป้าหมายสุดท้ายเท่านั้น แต่ยังช่วยปรับปรุงการพัฒนาซอฟต์แวร์ที่ช่วยในการพัฒนาเองด้วย
ดังที่ได้กล่าวไปข้างต้น ผลลัพธ์ที่ช่วยอำนวยความสะดวกในการพัฒนาจะขยายขอบเขตของการพัฒนา และช่วยปรับปรุงประสิทธิภาพและคุณภาพ ยิ่งไปกว่านั้น หากสร้างขึ้นอย่างมีประสิทธิภาพ ก็สามารถนำกลับมาใช้ใหม่ในโครงการพัฒนาอื่นๆ ได้อีกด้วย
ดังนั้น ด้วยการพัฒนาซอฟต์แวร์ที่ช่วยในการพัฒนาระหว่างกระบวนการพัฒนาซอฟต์แวร์ ประสิทธิภาพโดยรวมสามารถเพิ่มขึ้นได้ และทรัพย์สินเหล่านี้สามารถนำไปใช้ประโยชน์สำหรับการพัฒนาในอนาคตได้
ตามปกติแล้ว การพัฒนาซอฟต์แวร์เสริมดังกล่าวเป็นเรื่องปกติ แต่ต้องใช้เวลาและความพยายามในการพัฒนาของตัวเอง ซึ่งต้องพิจารณาอย่างรอบคอบและดำเนินการอย่างมุ่งเน้น
ด้วยการใช้ AI เชิงสร้างสรรค์ เราสามารถสร้างซอฟต์แวร์อย่างง่ายได้อย่างรวดเร็วเพื่อทำให้งานเล็กๆ น้อยๆ ที่นึกขึ้นได้เป็นไปโดยอัตโนมัติ หากงานเกี่ยวข้องกับการประมวลผลที่ชัดเจน AI เชิงสร้างสรรค์สามารถสร้างโปรแกรมได้อย่างแม่นยำโดยแทบไม่มีข้อผิดพลาด
ด้วยเหตุนี้ การพัฒนาซอฟต์แวร์เพื่อช่วยในการพัฒนาระหว่างกระบวนการพัฒนาซอฟต์แวร์จึงง่ายกว่าเมื่อก่อน
และเมื่อพิจารณาอย่างลึกซึ้งถึงเรื่องนี้ รูปแบบการพัฒนาก็จะเกิดขึ้น ซึ่งเครื่องมือที่มีประโยชน์สำหรับการพัฒนาจะถูกสร้างขึ้นอย่างต่อเนื่องในระหว่างกระบวนการ ซึ่งเป็นการเปลี่ยนแปลงวิธีการพัฒนาเอง
เราจะเรียกสิ่งนี้ว่า "การพัฒนาแบบเน้นการพัฒนา"
ในการฝึกฝนการพัฒนาแบบเน้นการพัฒนา เราต้องมีนิสัยในการสังเกตการพัฒนาซอฟต์แวร์ของตนเองอย่างเป็นกลาง พิจารณาว่าส่วนใดที่สามารถจัดการได้โดยซอฟต์แวร์และส่วนใดที่มนุษย์เท่านั้นที่สามารถจัดการได้ พร้อมกับทักษะในการพัฒนาซอฟต์แวร์เสริมดังกล่าว
นอกจากนี้ AI เชิงสร้างสรรค์ยังสามารถนำไปรวมไว้ในเครื่องมือซอฟต์แวร์เหล่านี้ได้ ด้วยการฝังไว้ในซอฟต์แวร์ ซึ่งแตกต่างจากเอเจนต์ AI เชิงสร้างสรรค์ ขอบเขตของการประมวลผลสามารถจำกัดได้ในระดับหนึ่ง และสามารถกำหนดเส้นทางได้
ในขณะที่เอเจนต์ AI สามารถบรรลุผลลัพธ์ที่คล้ายกันผ่านพร้อมต์ ซอฟต์แวร์ที่มี AI เชิงสร้างสรรค์แบบฝังสามารถเพิ่มความแม่นยำได้ง่ายขึ้นโดยการรวมทั้งโปรแกรมและพร้อมต์เข้าด้วยกัน
หากสามารถฝึกฝนการพัฒนาแบบเน้นการพัฒนาได้ โครงการที่สองจะแสดงให้เห็นถึงการปรับปรุงทั้งคุณภาพและต้นทุนเมื่อเทียบกับโครงการแรก ยิ่งไปกว่านั้น ในแต่ละโครงการถัดไป—โครงการที่สาม สี่ และอื่นๆ—การปรับปรุงจะยังคงสะสมต่อไป
สิ่งนี้แตกต่างอย่างสิ้นเชิงจากการใช้ AI เชิงสร้างสรรค์เพื่อพัฒนาซอฟต์แวร์เท่านั้น ช่องว่างที่สำคัญจะเกิดขึ้นเมื่อเวลาผ่านไประหว่างทีมที่เพียงแค่เชี่ยวชาญเครื่องมือ AI เชิงสร้างสรรค์กับทีมที่ฝึกฝนการพัฒนาแบบเน้นการพัฒนา
การทดสอบที่ขับเคลื่อนด้วยการปรับโครงสร้างโค้ด (Refactoring-Driven Testing)
มีแนวคิดที่เรียกว่า Test-Driven Development (TDD) ซึ่งมีการออกแบบการทดสอบตามข้อกำหนดก่อน แล้วจึงพัฒนาซอฟต์แวร์ให้ผ่านการทดสอบเหล่านั้น
ในตอนแรก ผมก็คิดเช่นกันว่าด้วยการใช้ AI เชิงสร้างสรรค์ จะสามารถพัฒนาโปรแกรมทดสอบสำหรับการทดสอบอัตโนมัติได้อย่างง่ายดาย ทำให้ TDD เป็นไปได้
อย่างไรก็ตาม เมื่อผมเริ่มฝึกฝนการพัฒนาแบบเน้นการพัฒนา ผมก็เชื่อว่าการคิดเกี่ยวกับการทดสอบก่อนการนำไปใช้งานไม่ได้เป็นแนวทางที่เหมาะสมที่สุดเสมอไป
โดยเฉพาะอย่างยิ่งสำหรับซอฟต์แวร์เช่นเว็บแอปพลิเคชันที่เกี่ยวข้องกับแง่มุมส่วนตัว เช่น การใช้งานและการออกแบบภาพ ซึ่งผู้ใช้โต้ตอบโดยตรง ผมตระหนักว่าการรันและโต้ตอบกับซอฟต์แวร์จริงมีความสำคัญมากกว่าการทดสอบแบบละเอียด
นั่นเป็นเพราะว่าหากมีความไม่พอใจอย่างมากในระดับ UI/UX หลังจากโต้ตอบกับมันแล้ว ก็มีความเป็นไปได้ที่จะต้องการเปลี่ยนส่วนพื้นฐาน เช่น เฟรมเวิร์ก สถาปัตยกรรมพื้นฐาน โมเดลข้อมูล หรือกรณีการใช้งาน
ในโครงการพัฒนาซอฟต์แวร์ส่วนตัวปัจจุบันของผม ผมสังเกตเห็นปัญหาเกี่ยวกับความยืดหยุ่นของฟีเจอร์และประสิทธิภาพ และสุดท้ายก็เปลี่ยนเฟรมเวิร์กสองตัวไปใช้ตัวอื่น
ผมยังต้องทบทวนการประมวลผลบางส่วนทั้งหมดเนื่องจากการใช้หน่วยความจำที่ไม่มีประสิทธิภาพ
เป็นช่วงเวลาของการปรับโครงสร้างโค้ดนี่เองที่การทดสอบกลายเป็นสิ่งที่ต้องพิจารณาอย่างมีสติเป็นอันดับแรก
หากอยู่ในช่วงเริ่มต้นของการพัฒนา หรือหากฟังก์ชันและข้อกำหนดจะมีการเปลี่ยนแปลงอย่างมีนัยสำคัญอยู่แล้ว การทดสอบอาจไม่จำเป็น
อย่างไรก็ตาม หากการพัฒนาค่อนข้างก้าวหน้าแล้วและมีหลายรายการที่ต้องตรวจสอบ การทดสอบจะจำเป็นเพื่อยืนยันว่าการปรับโครงสร้างโค้ดไม่ได้นำข้อบกพร่องหรือข้อผิดพลาดทางฟังก์ชันมาด้วย
ดังนั้น แนวทางในการสร้างโปรแกรมทดสอบเมื่อการพัฒนาดำเนินไปในระดับหนึ่งและจำเป็นต้องมีการปรับโครงสร้างโค้ดจึงไม่ใช่ความคิดที่ไม่ดี
ณ จุดนี้ สิ่งสำคัญคือไม่ใช่การสร้างการทดสอบสำหรับโค้ดทั้งหมด แต่ให้เน้นที่การทดสอบส่วนที่สมบูรณ์แล้วซึ่งไม่น่าจะมีการเปลี่ยนแปลงมากนักในอนาคต ในขณะที่ปล่อยส่วนที่ยังคงมีการเปลี่ยนแปลงอยู่โดยไม่มีการทดสอบอัตโนมัติ
สิ่งนี้สามารถเรียกว่า Refactoring-Driven Testing
บทสรุป
Generative AI กำลังเปลี่ยนแปลงการพัฒนาซอฟต์แวร์อย่างมาก
ในบทความก่อนหน้านี้ ผมได้เขียนเกี่ยวกับความสำคัญของการมุ่งมั่นที่จะเป็น "วิศวกรรอบทิศ" ที่สามารถพัฒนาระบบที่รวมโดเมน โครงสร้างพื้นฐาน และสภาพแวดล้อมการทำงานต่างๆ เข้าด้วยกัน ซึ่งก้าวข้ามขีดจำกัดของวิศวกร Full-Stack แบบดั้งเดิม
ผมยังได้เขียนบทความที่ชี้ให้เห็นว่าเรากำลังเข้าสู่ยุคของ "การพัฒนาที่เน้นประสบการณ์และพฤติกรรม" ซึ่งไม่ใช่การมุ่งเน้นที่การทำให้ข้อกำหนดสอดคล้องกับการใช้งาน แต่เป็นการปรับปรุงประสบการณ์ผู้ใช้ผ่านพฤติกรรมของซอฟต์แวร์
การพัฒนาแบบเน้นการพัฒนาและการทดสอบที่ขับเคลื่อนด้วยการปรับโครงสร้างโค้ดคือสิ่งที่นำไปสู่ขอบฟ้าใหม่เหล่านี้ในการพัฒนาซอฟต์แวร์