-
Memahami efek Makefile
- Efek Makefile mengacu pada fenomena ketika alat yang rumit atau tidak familier tidak ditulis dari nol, melainkan dimulai dengan menyalin contoh yang sebelumnya bekerja dengan baik lalu memodifikasinya.
- Efek ini sering muncul ketika berbagai insinyur menggunakan alat seperti Make.
- Jika pekerjaan serupa pernah dilakukan sebelumnya, insinyur akan menyalin Makefile lama dan menyesuaikannya dengan situasi baru.
-
Masalah dan dampaknya
- Masalah pada tahap perancangan: alat terlalu rumit atau merepotkan untuk digunakan dari nol.
- Konfigurasi CI/CD: sering kali konfigurasi YAML di GitHub Actions atau GitLab CI/CD disalin lalu dimodifikasi.
- Konfigurasi linter dan formatter: sekumpulan aturan dasar disalin antarproyek lalu diperketat atau dilonggarkan sesuai kebutuhan.
- Sistem build: segala sesuatu yang tidak sepele akhirnya menyerupai sistem build sebelumnya.
-
Mengapa fenomena ini penting
- Kurangnya dukungan diagnosis dan debugging: alat harus dijalankan berulang kali, tetapi informasi yang diberikan minim.
- Menghambat pembelajaran: hanya sebagian pakar yang benar-benar memahami alat tersebut, sementara yang lain menyalin dan memodifikasi dengan pengetahuan seminimal mungkin.
- Masalah keamanan: pekerjaan keamanan membutuhkan pengetahuan yang mendalam, dan sistem yang terkena efek Makefile dapat menimbulkan kebingungan antara kode dan data.
-
Hal yang perlu dipertimbangkan saat merancang alat
- Apakah alat perlu dapat dikonfigurasi.
- Apakah perlu sintaks khusus.
- Apakah sintaks yang sudah ada atau idiom yang ada bisa digunakan kembali.
- Apakah salin-tempel sering terjadi.
-
Fenomena yang mirip dengan efek Makefile
- Mirip dengan cargo culting atau normalisasi penyimpangan, tetapi efek Makefile berkaitan dengan hasil dari desain tertentu.
- Efek Makefile pada dasarnya bukan sesuatu yang tidak efisien atau buruk. Ini adalah hal yang perlu disadari saat merancang alat dan sistem.
1 komentar
Komentar Hacker News
Sistem yang kompleks sering kali berkembang dari sistem yang sederhana. Sistem yang dirancang kompleks sejak awal biasanya tidak bekerja dengan baik, dan sebaiknya dimulai dari sistem yang sederhana
Make dan Makefile sangat sederhana jika tidak dibuat otomatis oleh autoconf. Jika dihasilkan oleh autoconf, jangan diubah, dan kalau bisa lebih baik tidak menggunakan autoconf. Tulis atau salin sedikit kode untuk dipakai di proyek, lalu tingkatkan sesuai kebutuhan. Setelah itu, salin kode tersebut ke proyek lain dan ubah seperlunya, lalu terapkan kembali perubahan itu ke proyek asal. Melalui beberapa proyek, kode itu bisa diekstrak menjadi library dan dirilis sebagai open source
Sekitar 10% developer punya kemampuan untuk memulai sesuatu dari nol. 40% bekerja dengan copy-paste kode, dan 50% tidak terlalu paham selain puzzle LeetCode. Banyak Makefile tersusun dari hasil copy-paste
Cargo Cult Development berarti pendekatan pengembangan yang meniru hal-hal permukaan tanpa memahami prinsip teknologinya. Caranya adalah menyalin, menempel, mencoba, dan menyesuaikan sambil berharap hasilnya akan bekerja
Makefile mungkin merupakan analogi yang kurang tepat. Banyak kode disalin dari web dan memiliki banyak bagian yang tidak digunakan. Menghapus bagian yang tidak perlu adalah kebiasaan yang baik
Alat atau sistem yang harus digunakan developer dipandang tidak cukup bernilai untuk dipelajari secara rutin. Pengaturan seperti CI dianggap sebagai sesuatu yang "sekali setel lalu dilupakan", dan bagian yang rumit ditangani tim lain. Perlu disediakan alat dan dokumentasi yang tepat agar developer bisa mengaksesnya dengan mudah
Alat seperti LaTeX sering jarang dipakai sehingga banyak orang memulainya dengan copy-paste. Alat yang jarang digunakan sulit diingat
Make memiliki dokumentasi yang baik, dan pengguna bisa memahaminya dengan mudah jika membaca dokumentasinya. Namun, banyak alat lain kurang terdokumentasi sehingga pengguna sulit memahaminya
Alat yang kompleks memang diperlukan, tetapi jika efek Makefile muncul pada aplikasi sederhana, itu berarti alatnya terlalu kompleks. Untuk proyek kecil, Makefile bisa jadi cocok
"Copy-Pasta Driven Development" menyoroti masalah yang timbul akibat copy-paste kode. Alat seperti Copilot dapat memperburuk masalah ini