Di mana saya bekerja, pengembang selalu memberi tahu saya bahwa "Saya menambahkan ini untuk berjaga-jaga di masa depan" atau "Saya pikir ini ide yang baik untuk melakukan ini karena mereka mungkin akan menginginkannya suatu hari". Saya pikir itu hebat bahwa mereka proaktif dalam mencoba mengantisipasi perubahan di masa depan tetapi saya tidak dapat berpikir bahwa itu tidak perlu dan berisiko menulis kode yang mungkin tidak pernah diperlukan dan oleh karena itu tidak produktif (Saya juga berpikir bahwa beberapa pengembang hanya ingin mencoba sesuatu baru demi itu). Apakah argumen untuk pemeriksaan di masa mendatang tidak valid jika Anda hanya menulis kode terorganisir yang baik dan bersih?
productivity
programming-practices
John Shaft
sumber
sumber
Jawaban:
Nah pertama-tama, ada beberapa hal yang perlu diklarifikasi:
Ini berarti bahwa menulis kode "bukti masa depan", memastikan bahwa kode tersebut ditulis dalam cara yang longgar, cukup abstrak, tetapi juga kode yang tidak sepenuhnya menyembunyikan level abstraksi, sehingga selalu ada cara untuk menuju ke level abstraksi yang lebih rendah. jika diperlukan.
Menulis kode bukti masa depan adalah seni tersendiri dan sangat erat dengan praktik SOLID untuk versi komponen, pemisahan masalah, pelapisan dan abstrak fungsionalitas. Pemeriksaan kedepan tidak ada hubungannya dengan menambahkan fitur sebelumnya, tetapi dengan memastikan Anda dapat menambahkan fitur di masa depan dengan cara yang tidak melanggar , melalui desain kode / pustaka yang baik.
2c saya
sumber
Jangan menulis kode yang tidak akan digunakan untuk waktu yang lama. Ini akan sia-sia karena kemungkinan besar tidak akan sesuai dengan kebutuhan pada saat itu (yang menurut Anda belum tahu).
Jadikan kode tersebut tangguh terhadap situasi masalah yang tidak terduga yang memungkinkan pemulihan dengan cepat atau gagal, tetapi jangan menulis kode untuk kemungkinan penggunaan di masa mendatang.
Cara yang baik untuk memastikan itu adalah dengan menggunakan desain dan pengembangan yang digerakkan oleh tes. Kasus uji berasal dari spesifikasi dan kasus penggunaan. Semua kode harus lulus uji. Kode yang tidak dibutuhkan tidak boleh ditulis. Dengan melakukannya dengan cara ini, sangat mudah untuk menentukan apakah diperlukan atau tidak.
sumber
Adalah penting untuk menyadari bahwa membuat kode bukti masa depan , dan menulis kode jika diperlukan di masa depan adalah dua hal yang sangat berbeda. Yang pertama sangat penting untuk aplikasi yang baik, yang lebih rendah biasanya bukan praktik pengkodean yang baik.
Bagi saya, pembuktian kode di masa depan, adalah menulisnya sedemikian rupa sehingga akan dapat berinteraksi dengan teknologi yang berkembang. Ini melibatkan memodulasi kode Anda, sehingga setiap bagian dari aplikasi Anda dapat berinteraksi secara independen dari bahasa dan teknologi aplikasi secara keseluruhan. Contoh yang baik dari hal ini adalah menggunakan XML atau JSON untuk mengirimkan data antara berbagai bagian aplikasi. Namun teknologi berkembang, sangat mungkin bahwa ia akan selalu dapat membaca XML dan JSON.
Mirip dengan yang di atas, mengekspos bagian dari aplikasi Anda melalui SOAP atau REST API mencapai hal yang sama. Apa pun teknologi yang berkembang, Anda tidak perlu menulis ulang setiap bagian dari aplikasi karena teknologi baru masih dapat berkomunikasi dengan yang lama.
Pada titik penulisan kode seandainya diperlukan , saya pikir itu sangat berbahaya karena kodenya mungkin memiliki sedikit atau tidak ada pengujian.
Jadi, dengan segala cara, buat pembuktian masa depan kode (NASA masih mengirim pesawat ruang angkasa menggunakan Fortran), tetapi jangan menulis kode 'berjaga-jaga'.
sumber
Pikirkan berapa kali Anda telah mengaktifkan sepotong kode di lingkungan produksi dan berpikir, "Terima kasih Tuhan, saya menulisnya 2 tahun yang lalu!".
Kode harus dapat dimodifikasi / diperpanjang dengan mudah. Jangan menambahkan kode yang tidak perlu segera, karena ini memberikan rasa aman yang sangat keliru dan menyia-nyiakan sumber daya dev / test dalam dunia dengan persyaratan yang terus berubah.
sumber
Banyak jawaban lain membahas masalah desain yang lebih besar, atau agak abstrak. Jika Anda berpikir tentang apa yang akan terjadi di masa depan, Anda dapat mendefinisikan beberapa teknik yang jelas untuk membantu pembuktian kode di masa depan .
Terutama berpikir bahwa di masa depan seseorang akan mencoba menambahkan fitur ke kode, atau akan mencoba untuk menggunakan kembali kode Anda di tempat lain. Mereka juga dapat mencoba untuk memperbaiki fitur dalam kode. Tentunya hanya memiliki kode bersih yang baik adalah titik awal yang diperlukan, tetapi ada juga beberapa teknik khusus yang dapat dilakukan.
Pemrograman Defensif : Lakukan pengecekan input melebihi apa yang sebenarnya dibutuhkan oleh aplikasi Anda saat ini. Setiap kali Anda menelepon API, pastikan untuk memeriksa bahwa inputnya adalah sesuatu yang Anda harapkan. Di masa depan orang akan mencampur kode versi baru bersama-sama, sehingga cakupan kesalahan dan pengembalian API akan berubah dari apa yang sekarang.
Menghilangkan Perilaku Tidak Terdefinisi : Banyak kode memiliki perilaku yang hanya berevolusi entah dari mana. Kombinasi input tertentu mengarah ke output tertentu yang tidak diinginkan siapa pun, tetapi kebetulan saja. Sekarang pasti seseorang akan bergantung pada perilaku itu, tetapi tidak ada yang akan tahu tentang hal itu karena tidak didefinisikan. Siapa pun yang berusaha mengubah perilaku di masa depan akan secara tidak sengaja merusak sesuatu. Gunakan pemeriksaan keamanan sekarang dan cobalah untuk menghapus / memblokir semua penggunaan kode yang tidak ditentukan.
Suite Uji Otomatis : Saya yakin Anda dapat menemukan volume yang ditulis tentang perlunya tes unit. Mengacu pada pembuktian di masa depan namun ini adalah titik kritis dalam memungkinkan seseorang untuk memperbaiki kode. Refactoring sangat penting untuk menjaga kode bersih, tetapi jika tidak memiliki serangkaian tes yang baik Anda tidak dapat dengan aman melakukan refactor.
Isolasi dan Segregasi : Enkapsulasi dan modularisasi yang tepat adalah prinsip desain yang baik, tetapi Anda harus melampaui itu. Anda akan sering menemukan bahwa Anda perlu menggunakan perpustakaan, atau API, atau produk, yang mungkin memiliki masa depan yang dipertanyakan. Mungkin karena masalah kualitas, masalah perizinan, atau pengembangan berkelanjutan oleh penulis. Dalam kasus ini, luangkan waktu ekstra untuk meletakkan lapisan antara Anda dan kode ini. Potong API sesuai kebutuhan Anda sehingga kopling sangat rendah untuk memungkinkan penggantian yang lebih mudah di masa mendatang.
sumber
Kode yang baik, bersih, dan terorganisasi dengan baik adalah bukti masa depan dalam arti bahwa itu membuat perubahan dan penambahan lebih mudah untuk diterapkan dengan benar.
sumber
"Bukti Masa Depan" paling banter berarti "desain yang digabungkan secara longgar". 80% dari waktu orang berarti "fleksibel" ketika mereka mengatakan "bukti masa depan". Terkadang mereka mengatakan itu untuk mencoba dan terdengar keren. Tapi setidaknya mereka memberikan sesuatu tepat waktu yang berfungsi.
"Bukti Masa Depan" paling buruk tidak ada artinya. 20% dari waktu, itu adalah alasan untuk membuang-buang waktu meneliti teknologi alternatif alih-alih hanya memberikan sesuatu. Mereka tidak mengirimkan apa pun (atau apa yang mereka kirimkan terlalu rumit untuk masalah yang dihadapi.)
Ada dua kasus tepi.
Tinjauan ke masa depan yang gagal. Seseorang sebenarnya dapat memprediksi masa depan dengan akurat. Dalam hal ini, mohon terapkan tinjauan ke masa depan yang kuat ini untuk bukti kode di masa mendatang. Lebih baik, terapkan kejelian yang tak putus-putusnya untuk memprediksi tren pasar dan pensiun dini dan berhenti mengkode.
Salah satunya adalah "mengarahkan" masa depan. Artinya, seseorang memiliki beberapa teknologi baru yang siap untuk digunakan di masa depan yang akan membutuhkan penulisan ulang hal yang disampaikan sekarang. Aneh bahwa seseorang tidak menggunakan hal yang keren ini di masa depan.
Kita harus mengirimkan proyek "A", mengetahui bahwa proyek "B" akan mengarah pada penulisan ulang segera "A". Hanya dalam kasus ini, kita mungkin dapat bukti "A" di masa mendatang.
sumber
YAGNI = Anda Tidak Akan Membutuhkannya .
Insting Anda benar: kode mereka berlebihan, menambah beban pemeliharaan dan pengujian, dan membuang waktu untuk hal-hal yang tidak memiliki nilai bisnis yang konkret.
Lihat Juga: Pelapisan Emas .
sumber
Mengabaikan judul pertanyaan, dan menempelkan poin utama tentang "memasukkan barang karena seseorang mungkin menginginkannya suatu hari" ...
Jawabannya adalah tidak. Tak pernah. Jangan menulis tusuk kode yang tidak Anda butuhkan hari ini. Inilah alasannya:
Saya pikir poin pertama adalah yang paling penting. Jika Anda pernah bekerja dengan sistem yang penuh dengan kode generik untuk pelanggan yang berbeda, atau penuh dengan fitur-fitur yang tidak Anda perlukan, maka Anda tahu berapa banyak waktu dan upaya ekstra yang diperlukan untuk mempertahankan atau memperluas fungsionalitas karena bahwa. Jadi hindari bagaimanapun caranya.
sumber