Sepertinya setelah saya telah menulis sejumlah besar kode saya merasa cemas seperti saya belum melakukannya dengan cara terbaik, dan akhirnya saya terus menerus refactoring dan menghabiskan terlalu banyak waktu pada proyek, atau tidak pernah mendapatkan itu kadang-kadang dilakukan. Apakah ini pernah terjadi pada orang lain, dan bagaimana Anda menangani ini?
code-quality
refactoring
Atomix
sumber
sumber
Jawaban:
Saya menikmati saat-saat ini ketika itu terjadi pada saya.
Alasannya: jika saya tidak melihat ke belakang pada pekerjaan saya dan berpikir ada sesuatu yang bisa saya lakukan lebih baik daripada saya tidak akan maju sebagai pengembang. Karena itu, ketika saat-saat pencerahan ini terjadi, rangkullah dan catat apa yang Anda pelajari. Pertimbangkan jadwal Anda untuk proyek saat ini dan jika mungkin refactor kode, jika tidak mungkin ambil pelajaran dan gunakan dalam implementasi proyek di masa depan.
Either way, belajar dari kesalahan Anda sendiri adalah hal yang hebat!
sumber
Berikut adalah beberapa aturan untuk membatasi kegiatan ini dan membuatnya lebih produktif:
sumber
Sepertinya Anda selalu bisa refactor, bukan? Saya mencoba membatasi refactoring hanya ketika mencoba menyelesaikan masalah lain. Misalnya, refactor ketika Anda memiliki masalah kinerja dan refactoring dengan membantu Anda menyelesaikannya - refactor ketika Anda perlu menambahkan fungsionalitas baru dan refactoring akan membantu Anda menyelesaikannya
sumber
Sejujurnya, saya akan lebih khawatir jika Anda cranking rim kode besar dan berpikir itu semua sempurna dan tidak perlu refactoring ...
Ketika saya masih muda dan tidak berpengalaman, saya sangat sombong tentang kemampuan pemrograman saya, dan selalu cenderung membayangkan bahwa itu mungkin untuk merancang dan merencanakan dengan sangat baik - dan bahwa begitu saya sampai pada tahap implementasi saya hanya akan menghentikannya dan itu ' semuanya akan sempurna.
Realitas hampir kebalikannya. Beberapa bahkan mengatakan bahwa segera setelah Anda memulai pengkodean Anda harus dalam mode Pemeliharaan. Idenya di sini adalah bahwa tahap "Implementasi" dari SDLC tidak benar-benar ada, karena Anda tidak boleh mengesampingkan perbaikan bug atau refactoring dan berpura-pura bahwa kode yang Anda hasilkan adalah "segar" dan sempurna.
Semua yang mengatakan, saya kira itu IS mungkin untuk mendapatkan terlalu obsesif tentang refactoring. Aku belum melihatnya. Dan semakin banyak pengalaman yang saya miliki, semakin saya pikir itu akan menjadi hal yang baik jika lebih banyak tim perangkat lunak menolak untuk bekerja dengan tenggat waktu yang ketat dan masuk ke hutang teknis. Bagaimanapun, ini adalah alasan paling umum mengapa refactoring dikesampingkan di dunia nyata.
sumber
Saya sarankan untuk tidak bergantung sepenuhnya pada perasaan atau kode bau.
Sebutkan dengan jelas apa yang salah dengan kode dan apa solusinya. Serius, tuliskan, karena Anda akan ingin meninjau seberapa efektif refactor Anda melawan ini.
Identifikasi cara untuk memecah refactor menjadi potongan yang dapat dicapai, dan prioritaskan mereka. Mintalah disiplin untuk fokus hanya pada ruang lingkup setiap potongan, menghindari garis singgung yang dapat merusak tugas Anda.
Juga, identifikasi unit tes apa yang dapat Anda tulis terhadap kode yang ada sebelum melanjutkan. Jika sudah ada tes ekstensif, itu hal yang hebat. Kurangnya unit test merupakan peluang besar untuk melakukan beberapa.
sumber
Tidak ada keraguan saya jatuh ke dalam perangkap ini tetapi beberapa refactoring penting untuk dukungan / debugging di masa depan.
Saat menulis sepotong kode utama, menjadi sangat mudah untuk tetap menggunakan baris kode ke dalam metode yang saat ini sedang ditulis. Ketika saya telah menyelesaikan bagian utama dari kode saya menempatkan todo: komentar ulasan kode . Kemudian beberapa hari kemudian saya akan melakukan review kode dan refactor sesuai. Jika saya kesulitan membacanya beberapa hari kemudian, apa yang akan terjadi dalam beberapa bulan atau bahkan bertahun-tahun.
sumber
Saya jatuh ke dalam perangkap ini ketika saya pertama kali belajar bahasa atau teknologi. Sebagai contoh, ketika Anda pertama kali belajar java, bayangkan Anda menulis aplikasi web dengan servlet, berpikir itu adalah cara yang benar. Kemudian Anda menyadari ada jsp dan Anda berpikir oh itu baru itu mungkin benar. Kemudian setelah Anda mendapatkan setengah jalan bahwa Anda menemukan Struts dan mungkin beberapa hal EJB, setelah itu Anda menemukan pegas (berbasis xml) setelah itu Anda menemukan penjelasan @MVC keren, setelah itu Anda merasa semuanya terlalu bertele-tele dan Anda dimanjakan oleh pilihan antara groovy / grails dan scala / lift! Ini sangat baik untuk proyek-proyek pribadi karena intinya biasanya untuk belajar dan tidak harus mencapai batas waktu.
Saya dulu juga menjadi uber-refactorer di tempat kerja. Tetapi karena saya mendapatkan lebih banyak pengalaman, saya menjadi lebih selektif tentang apa yang akan saya refactor. Ternyata ketika Anda meninggalkan perusahaan Anda tidak membawa kode, dan biasanya insinyur lain dapat memecahkan kode hampir lebih cepat daripada yang dapat Anda perbaiki.
sumber
Aturan praktis yang saya ikuti adalah ini: Saya refactor sampai seoptimal mungkin pada waktu itu dan kemudian saya tidak refactor lagi kecuali situasi berubah, atau lebih jarang jika saya memiliki inspirasi tentang beberapa cara baru dan lebih baik untuk melakukan sesuatu (misalnya menggunakan fitur bahasa baru).
Misalnya, saya pernah harus menulis modul kode baru untuk aplikasi yang ada. Saya menulisnya dengan cara tertentu, dan hari berikutnya saya memikirkannya lebih lanjut dan berpikir saya bisa memperbaiki itu dan membuatnya lebih abstrak karena kami cukup yakin itu perlu diperluas di jalan untuk keperluan lain. Jadi saya refactored kode keluar. Kemudian, saya memutuskan itu agak terlalu generik dan saya menggabungkan beberapa kelas dan antarmuka yang pada dasarnya melakukan hal yang sama, menggunakan Generics (C #) untuk mendapatkan fungsi yang sama. Pada titik ini saya mungkin bisalanjut refactor untuk membuatnya lebih baik, tetapi "cukup baik" - kode ditulis dengan baik, mengikuti pola desain yang tepat dan konsep teknik, dan dapat diperluas. Saya hanya akan menolaknya lagi jika persyaratan memaksa saya untuk mengevaluasi kembali kode, atau jika ada fitur bahasa yang dapat membuat kode lebih jelas dan / atau lebih mudah dibaca.
sumber