Amaran Pengaturcaraan Dijkstra 1972 Terbukti Tepat Ketika Pembangun Moden Bergelut dengan Cabaran yang Sama

Pasukan Komuniti BigGo
Amaran Pengaturcaraan Dijkstra 1972 Terbukti Tepat Ketika Pembangun Moden Bergelut dengan Cabaran yang Sama

Syarahan Turing Award terkenal Edsger Dijkstra pada tahun 1972 bertajuk The Humble Programmer terus mencetuskan perbincangan hangat dalam kalangan pembangun, dengan ramai yang mendapati amarannya tentang kerumitan pengaturcaraan sangat relevan dengan cabaran pembangunan perisian hari ini. Pemerhatian saintis komputer lagenda ini tentang kerumitan perkakasan, reka bentuk bahasa, dan disiplin profesional seolah-olah telah meramalkan banyak perjuangan yang dihadapi pengaturcara moden setiap hari.

Kerumitan Perkakasan Mencipta Masalah Baru Bukannya Menyelesaikan Masalah Lama

Pemerhatian Dijkstra bahawa industri elektronik tidak menyelesaikan satu masalah pun, ia hanya menciptanya bergema kuat dengan pembangun hari ini. Komuniti menunjuk kepada hierarki memori moden sebagai contoh yang sempurna - walaupun kini kita mempunyai cache L1 yang sangat pantas berjalan pada kelajuan nanosaat, kita juga berurusan dengan storan sejuk yang boleh mengambil masa berhari-hari untuk diakses. Julat perbezaan latensi yang melampau ini menjadikan pengoptimuman lebih kritikal berbanding sebelumnya.

Revolusi multi-core telah menambah satu lagi lapisan kerumitan yang Dijkstra tidak dapat jangka sepenuhnya. Pembangun moden mesti sentiasa memikirkan tentang pertandingan thread dan lokaliti memori untuk mencapai prestasi yang baik. Sesetengah pembangun menyokong untuk sentiasa mengingati suhu purata cache L1, dengan hujah bahawa jika anda dapat mengekalkan set kerja anda hangat dalam cache L1, kebanyakan kebimbangan prestasi lain menjadi sekunder.

Julat Latensi Hierarki Memori (Sistem Moden)

  • Cache L1: Masa capaian dalam nanosaat
  • Storan Sejuk/Pita: Masa capaian sehingga 24 jam
  • Rentang perbezaan latensi melampau: 6+ tertib magnitud

Reka Bentuk Bahasa Pengaturcaraan Masih Bergelut dengan Kerumitan Baroque

Kritikan Dijkstra terhadap bahasa pengaturcaraan yang terlalu rumit seperti PL/I, yang beliau samakan dengan memandu kapal terbang dengan 700 butang, suis dan pemegang, menemui sasaran baru dalam landskap pembangunan hari ini. Perbincangan komuniti mendedahkan kekecewaan yang sama dengan bahasa moden yang terus menambah ciri bukannya memfokuskan kepada kesederhanaan dan kejelasan.

Perdebatan meluas kepada bahasa popular seperti Java dan C++, dengan pembangun menyatakan bagaimana bahasa-bahasa ini terus mengumpul ciri dan alat baru, mencipta apa yang dipanggil oleh sesetengah pihak sebagai raksasa baroque. Ini mencerminkan kebimbangan Dijkstra tentang bahasa yang mengutamakan kelengkapan ciri berbanding kebolehkendali intelektual.

Bahasa Pengaturcaraan yang Disebut dalam Konteks Sejarah

  • FORTRAN: Dikritik sebagai kenderaan pemikiran yang sudah lapuk (1972)
  • LISP: "Cara paling bijak untuk menyalahgunakan komputer"
  • ALGOL 60: Dipuji kerana definisi yang tidak bergantung kepada pelaksanaan
  • PL/I: Dikritik sebagai "raksasa baroque" yang terlalu kompleks

Kaedah Formal dan Pembangunan Berasaskan Bukti Memperoleh Relevan Baru

Salah satu idea Dijkstra yang paling berpandangan jauh ialah menghendaki pengaturcara membuktikan bahawa gelung mereka berakhir dan mengekalkan invarian yang betul. Walaupun ini kelihatan tidak praktikal pada tahun 1972, alat moden seperti Coq dan Dafny kini membolehkan pengesahan formal sedemikian pada peringkat pengkompil.

Komuniti melihat potensi untuk kebangkitan kaedah formal, terutamanya dengan bantuan AI yang menjadikan kos pemformalan dan pembuktian jauh lebih rendah. Sesetengah pembangun percaya bahawa kualiti kod yang boleh dibuktikan boleh menjadi pembeza utama apabila kod yang dijana AI menjadi lebih biasa, menjadikan program yang disahkan secara formal menonjol dalam lautan perisian yang dijana secara automatik.

Alat Pengesahan Formal Moden

  • Coq : Menguatkuasakan pembuktian penamatan gelung
  • Dafny : Pemeriksaan invarian di peringkat pengkompil
  • Kedua-duanya mengorbankan kelengkapan Turing untuk ketepatan yang boleh dibuktikan

Perjuangan Abadi Antara Helah Bijak dan Kod yang Jelas

Dijkstra memberi amaran terhadap pengaturcara yang berfikiran teka-teki dan sangat gemar dengan helah bijak, sebaliknya menyokong kod yang jelas dan mudah difahami. Ketegangan ini berterusan hari ini, terutamanya dengan pengkompil Just-In-Time (JIT) yang boleh mengoptimumkan kod kompleks pada masa runtime.

Tetapi mereka tidak dapat menjelaskan mengapa rakan sekerja mereka yang malang yang terpaksa membaca dan menyelenggara kod tidak layak mendapat pertimbangan yang sama seperti mesin!

Walaupun pengoptimuman JIT membolehkan pembangun menulis kod yang lebih mudah tanpa mengorbankan prestasi, sesetengah pengaturcara menggunakan ini sebagai alasan untuk menulis kod yang tidak perlu rumit, dengan andaian bahawa pengkompil akan membetulkan ketidakcekapan mereka.

Disiplin Profesional Kekal Sama Penting Seperti Dahulu

Mungkin yang paling menarik, seruan Dijkstra untuk pengaturcaraan menjadi profesion yang lebih berdisiplin terus bergema. Pemerhatiannya bahawa masyarakat mula tidak berpuas hati dengan prestasi pengaturcara dan produk mereka pada tahun 1960-an kedengaran biasa kepada sesiapa yang mengikuti perdebatan semasa tentang kualiti dan kebolehpercayaan perisian.

Komuniti menyatakan bahawa walaupun setelah beberapa dekad kemajuan, banyak pasukan masih mengejar output pantas berbanding reka bentuk yang bersih, hanya untuk menghadapi halangan kemudian dalam pembangunan. Ini menunjukkan bahawa mesej asas Dijkstra tentang keperluan disiplin intelektual dalam pengaturcaraan kekal relevan hari ini seperti lebih 50 tahun yang lalu.

Syarahan Dijkstra berfungsi sebagai dokumen sejarah dan ulasan yang mengejutkan semasa tentang cabaran yang dihadapi pembangunan perisian moden. Penekanannya pada kerendahan hati, disiplin, dan pemikiran yang jelas berbanding helah bijak terus menawarkan panduan berharga untuk pengaturcara hari ini yang menavigasi landskap teknologi yang semakin kompleks.

Rujukan: The Humble Programmer