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:
sumber
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.
sumber
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):
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.
sumber
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.
sumber
X
baris. Kemudian, melalui beberapa iterasi, mengurangi produk akhir denganY
garis. Jadi,(X-Y)
baris yang tersisa tampaknya sangat mahal karena pembantaian refactoring telah memotong semua cruft.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.
sumber
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.
sumber