Saya sedang membaca artikel Wikipedia tentang Douglas McIlroy dan menemukan kutipan yang menyebutkan
"Pahlawan pemrograman sebenarnya adalah orang yang menulis kode negatif."
Apa artinya?
Saya sedang membaca artikel Wikipedia tentang Douglas McIlroy dan menemukan kutipan yang menyebutkan
"Pahlawan pemrograman sebenarnya adalah orang yang menulis kode negatif."
Apa artinya?
Jawaban:
Ini berarti mengurangi baris kode, dengan menghapus redundansi atau menggunakan konstruksi yang lebih ringkas.
Lihat misalnya anekdot terkenal ini dari tim pengembang Apple Lisa asli:
Ketika tim Lisa berusaha menyelesaikan perangkat lunak mereka pada tahun 1982, manajer proyek mulai meminta pemrogram untuk menyerahkan formulir mingguan yang melaporkan jumlah baris kode yang telah mereka tulis. Bill Atkinson menganggap itu konyol. Untuk minggu di mana ia telah menulis ulang rutinitas penghitungan wilayah QuickDraw menjadi enam kali lebih cepat dan 2000 baris lebih pendek, ia meletakkan "-2000" pada formulir. Setelah beberapa minggu, manajer berhenti memintanya untuk mengisi formulir, dan ia dengan senang hati menurutinya.
Ada kutipan Bill Gates di sepanjang garis mengukur produktivitas pemrogram dengan garis kode seperti mengukur kemajuan pembangunan pesawat terbang berdasarkan beratnya.
Saya ingin menambahkan bahwa metrik LOC telah mendorong penggunaan bahasa yang terlalu bertele-tele dan sengaja menciptakan kembali roda untuk memenuhi kuota.
Ketika saya masih di sekolah menengah - dan ya, kami memiliki komputer di tahun 70-an, meskipun kami harus membuatnya dari kulit binatang menggunakan pisau batu - salah satu guru matematika mengadakan kontes pemrograman. Aturannya adalah bahwa program yang menang akan menjadi yang menghasilkan output yang benar, dan yang memiliki produk terkecil dari garis waktu kode waktu berjalan. Yaitu, jika program Anda mengambil, katakan 100 baris kode dan berlari selama 5 detik, skor Anda adalah 500. Jika orang lain menulis 90 baris kode dan berlari selama 6 detik, skornya adalah 540. Skor rendah menang, seperti golf.
Itu mengejutkan saya sebagai sistem penilaian yang brilian, memberi penghargaan baik atas keringkasan maupun kinerja.
Tetapi entri yang secara teknis memenuhi kriteria pemenang didiskualifikasi. Masalahnya adalah untuk mencetak daftar semua bilangan prima kurang dari 100. Entri yang didiskualifikasi terjadi seperti ini (sebagian besar siswa menggunakan BASIC saat itu):
100 print "2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61,"
110 print "67, 71, 73, 79, 83, 87, 89, 91, 97"
Siswa yang menulis entri itu menunjukkan bahwa tidak hanya pendek dan sangat efisien, tetapi algoritme harus jelas bagi siapa pun yang memiliki pengetahuan pemrograman minimal, membuat program ini sangat dapat dipertahankan.
Ini lidah-di-pipi. Jika biaya Anda $ N per baris kode rata-rata, maka pengkodean "garis negatif" pasti pemenang.
Ini berarti, sebagai saran praktis, bahwa kode kecil yang menyelesaikan pekerjaan, jauh lebih baik daripada kode besar yang melakukan hal yang sama, semua hal lain dianggap sama.
Menulis program yang sama dalam kode yang lebih sedikit adalah tujuan untuk semua orang.
Jika suatu program mengambil 200 LOC ke kode, dan saya menulisnya dalam 150, saya menulis -50 LOC. Jadi saya menulis kode negatif.
Jawaban Thilo mungkin paling akurat secara historis, tetapi metafora "kode negatif" juga dapat mencakup kinerja dan penggunaan memori - upaya penghargaan untuk menunda eksekusi atau alokasi sesuatu sampai benar-benar diperlukan.
Mentalitas "menunda-nunda" ini menghasilkan aksioma-aksioma seperti berkata, "Tidak melakukan apa-apa selalu lebih cepat daripada melakukan sesuatu", "Kode tercepat adalah kode yang tidak pernah dijalankan", dan "Jika Anda bisa menundanya cukup lama, Anda mungkin tidak perlu melakukannya "(merujuk pada penangguhan operasi mahal sampai benar-benar diperlukan)
Salah satu teknik untuk mewujudkan kode negatif adalah dengan menantang asumsi awal dan definisi masalah. Jika Anda dapat mendefinisikan kembali domain masalah / input sehingga "masalah lengket # 3" secara kategoris tidak mungkin, maka Anda tidak perlu menghabiskan waktu atau kode berurusan dengan masalah lengket # 3. Anda telah menghilangkan kode dengan mengoptimalkan desain.