บรรยายรางวัล Turing Award ที่มีชื่อเสียงของ Edsger Dijkstra ในปี 1972 เรื่อง The Humble Programmer ยังคงจุดประกายการถกเถียงอย่างเข้มข้นในหมู่นักพัฒนา โดยหลายคนพบว่าคำเตือนของเขาเกี่ยวกับความซับซ้อนของการเขียนโปรแกรมมีความเกี่ยวข้องอย่างน่าประหลาดใจกับความท้าทายในการพัฒนาซอฟต์แวร์ในปัจจุบัน ข้อสังเกตของนักวิทยาศาสตร์คอมพิวเตอร์ในตำนานเกี่ยวกับความซับซ้อนของฮาร์ดแวร์ การออกแบบภาษา และระเบียบวินัยทางวิชาชีพดูเหมือนจะทำนายการต่อสู้หลายอย่างที่โปรแกรมเมอร์สมัยใหม่เผชิญอยู่ทุกวัน
ความซับซ้อนของฮาร์ดแวร์สร้างปัญหาใหม่แทนที่จะแก้ปัญหาเก่า
ข้อสังเกตของ Dijkstra ที่ว่าอุตสาหกรรมอิเล็กทรอนิกส์ไม่ได้แก้ปัญหาใดเลย แต่กลับสร้างปัญหาขึ้นมาเท่านั้น สะท้อนอย่างแรงกับนักพัฒนาในปัจจุบัน ชุมชนชี้ไปที่ลำดับชั้นของหน่วยความจำสมัยใหม่เป็นตัวอย่างที่สมบูรณ์แบบ - ในขณะที่เรามี L1 cache ที่เร็วอย่างไม่น่าเชื่อทำงานด้วยความเร็วระดับนาโนวินาที เราก็ต้องจัดการกับ cold storage ที่อาจใช้เวลาทั้งวันในการเข้าถึง ความแตกต่างของ latency ที่รุนแรงนี้ทำให้การปรับปรุงประสิทธิภาพมีความสำคัญมากกว่าที่เคย
การปฏิวัติ multi-core ได้เพิ่มความซับซ้อนอีกชั้นหนึ่งที่ Dijkstra ไม่สามารถคาดการณ์ได้อย่างเต็มที่ นักพัฒนาสมัยใหม่ต้องคิดถึง thread contention และ memory locality อย่างต่อเนื่องเพื่อให้ได้ประสิทธิภาพที่ดี นักพัฒนาบางคนสนับสนุนให้คำนึงถึงอุณหภูมิเฉลี่ยของ L1 cache อยู่ตลอดเวลา โดยโต้แย้งว่าหากคุณสามารถรักษา working set ให้อบอุ่นใน L1 cache ได้ ความกังวลด้านประสิทธิภาพอื่นๆ ส่วนใหญ่จะกลายเป็นสิ่งรองลงไป
ช่วงเวลาแฝง (Latency) ของลำดับชั้นหน่วยความจำ (ระบบสมัยใหม่)
- L1 Cache : เวลาการเข้าถึงในระดับนาโนวินาที
- Cold Storage/Tapes : เวลาการเข้าถึงสูงสุดถึง 24 ชั่วโมง
- ช่วงความแตกต่างของเวลาแฝงสูงสุด: มากกว่า 6 หลักเลข
การออกแบบภาษาโปรแกรมยังคงต่อสู้กับความซับซ้อนแบบ Baroque
การวิพากษ์วิจารณ์ของ Dijkstra เกี่ยวกับภาษาโปรแกรมที่ซับซ้อนเกินไปอย่าง PL/I ซึ่งเขาเปรียบเทียบกับการบินเครื่องบินที่มีปุ่ม สวิตช์ และมือจับ 700 ตัว พบเป้าหมายใหม่ในภูมิทัศน์การพัฒนาปัจจุบัน การถกเถียงในชุมชนเผยให้เห็นความหงุดหงิดที่คล้ายคลึงกันกับภาษาสมัยใหม่ที่เพิ่มฟีเจอร์ต่อไปเรื่อยๆ แทนที่จะมุ่งเน้นไปที่ความเรียบง่ายและความชัดเจน
การถกเถียงขยายไปถึงภาษายอดนิยมอย่าง Java และ C++ โดยนักพัฒนาสังเกตว่าภาษาเหล่านี้ยังคงสะสมฟีเจอร์และเครื่องมือใหม่ๆ สร้างสิ่งที่บางคนเรียกว่า baroque monstrosities สิ่งนี้สะท้อนความกังวลของ Dijkstra เกี่ยวกับภาษาที่ให้ความสำคัญกับความสมบูรณ์ของฟีเจอร์มากกว่าการจัดการทางปัญญา
ภาษาโปรแกรมที่กล่าวถึงในบริบททางประวัติศาสตร์
- FORTRAN: ถูกวิพากษ์วิจารณ์ว่าเป็นเครื่องมือแห่งความคิดที่ล้าสมัย (1972)
- LISP: "วิธีที่ชาญฉลาดที่สุดในการใช้คอมพิวเตอร์ผิดวัตถุประสงค์"
- ALGOL 60: ได้รับการยกย่องสำหรับคำจำกัดความที่เป็นอิสระจากการใช้งาน
- PL/I: ถูกวิพากษ์วิจารณ์ว่าซับซ้อนเกินไปเป็น "สิ่งประดิษฐ์แบบบาร็อกที่น่าเกลียด"
Formal Methods และการพัฒนาแบบ Proof-Driven ได้รับความเกี่ยวข้องใหม่
หนึ่งในแนวคิดที่ก้าวหน้าที่สุดของ Dijkstra คือการเรียกร้องให้โปรแกรมเมอร์พิสูจน์ว่าลูปของพวกเขาสิ้นสุดลงและรักษา invariants ที่เหมาะสม แม้ว่าสิ่งนี้จะดูไม่สามารถทำได้ในปี 1972 แต่เครื่องมือสมัยใหม่อย่าง Coq และ Dafny ทำให้การตรวจสอบอย่างเป็นทางการดังกล่าวเป็นไปได้ในระดับคอมไพเลอร์
ชุมชนเห็นศักยภาพสำหรับการฟื้นฟู formal methods โดยเฉพาะกับความช่วยเหลือของ AI ที่ทำให้ต้นทุนของการทำให้เป็นทางการและการพิสูจน์ต่ำลงมาก นักพัฒนาบางคนเชื่อว่าคุณภาพโค้ดที่พิสูจน์ได้อาจกลายเป็นจุดแตกต่างสำคัญเมื่อโค้ดที่สร้างโดย AI กลายเป็นเรื่องธรรมดามากขึ้น ทำให้โปรแกรมที่ตรวจสอบอย่างเป็นทางการโดดเด่นในทะเลของซอฟต์แวร์ที่สร้างโดยอัตโนมัติ
เครื่องมือ Formal Verification สมัยใหม่
- Coq : บังคับให้มีการพิสูจน์การสิ้นสุดของลูป
- Dafny : ตรวจสอบ invariant ในระดับคอมไพเลอร์
- ทั้งสองเครื่องมือเสียสละความสมบูรณ์แบบ Turing เพื่อแลกกับความถูกต้องที่พิสูจน์ได้
การต่อสู้นิรันดร์ระหว่างเทคนิคฉลาดและโค้ดที่ชัดเจน
Dijkstra เตือนเกี่ยวกับโปรแกรมเมอร์ที่มีใจรักปริศนาและชอบเทคนิคฉลาดมาก แทนที่จะสนับสนุนโค้ดที่ชัดเจนและเข้าใจได้ ความตึงเครียดนี้ยังคงมีอยู่ในปัจจุบัน โดยเฉพาะกับคอมไพเลอร์ Just-In-Time (JIT) ที่สามารถปรับปรุงโค้ดที่ซับซ้อนได้ในขณะทำงาน
แต่พวกเขาไม่สามารถอธิบายได้ว่าทำไมเพื่อนร่วมงานที่น่าสงสารซึ่งต้องอ่านและดูแลโค้ดไม่สมควรได้รับการพิจารณาเช่นเดียวกับเครื่องจักร!
ในขณะที่การปรับปรุง JIT ช่วยให้นักพัฒนาเขียนโค้ดที่เรียบง่ายกว่าได้โดยไม่ต้องเสียสละประสิทธิภาพ โปรแกรมเมอร์บางคนใช้สิ่งนี้เป็นข้ออ้างในการเขียนโค้ดที่ซับซ้อนโดยไม่จำเป็น โดยสมมติว่าคอมไพเลอร์จะแก้ไขความไม่มีประสิทธิภาพของพวกเขา
ระเบียบวินัยทางวิชาชีพยังคงมีความสำคัญเช่นเดิม
บางทีสิ่งที่น่าทึ่งที่สุดคือการเรียกร้องของ Dijkstra ให้การเขียนโปรแกรมกลายเป็นอาชีพที่มีระเบียบวินัยมากขึ้นยังคงสะท้อนใจ ข้อสังเกตของเขาที่ว่าสังคมกำลังไม่พอใจกับประสิทธิภาพของโปรแกรมเมอร์และผลิตภัณฑ์ของพวกเขาในทศวรรษ 1960 ฟังดูคุ้นเคยสำหรับใครก็ตามที่ติดตามการถกเถียงปัจจุบันเกี่ยวกับคุณภาพและความน่าเชื่อถือของซอฟต์แวร์
ชุมชนสังเกตว่าแม้จะมีความก้าวหน้ามาหลายทศวรรษ ทีมงานหลายทีมยังคงไล่ตามผลลัพธ์ที่รวดเร็วมากกว่าการออกแบบที่สะอาด เพียงเพื่อจะไปชนกำแพงในภายหลังของการพัฒนา สิ่งนี้แสดงให้เห็นว่าข้อความพื้นฐานของ Dijkstra เกี่ยวกับความจำเป็นของระเบียบวินัยทางปัญญาในการเขียนโปรแกรมยังคงมีความเกี่ยวข้องในปัจจุบันเช่นเดียวกับเมื่อ 50 ปีที่แล้ว
บรรยายของ Dijkstra ทำหน้าที่เป็นทั้งเอกสารทางประวัติศาสตร์และความเห็นที่น่าประหลาดใจเกี่ยวกับความท้าทายที่เผชิญการพัฒนาซอฟต์แวร์สมัยใหม่ การเน้นของเขาเกี่ยวกับความถ่อมตน ระเบียบวินัย และการคิดที่ชัดเจนมากกว่าเทคนิคฉลาดยังคงให้คำแนะนำที่มีค่าสำหรับโปรแกรมเมอร์ในปัจจุบันที่กำลังนำทางในภูมิทัศน์เทคโนโลยีที่ซับซ้อนมากขึ้น
อ้างอิง: The Humble Programmer