Apakah ada orang lain yang memiliki masalah refactoring? [Tutup]

17

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?

Atomix
sumber
16
Anda perlu tenggat waktu yang lebih ketat :)
Apakah Anda berbicara di sini tentang kode yang Anda tulis untuk diri sendiri (proyek hobi) atau kode yang Anda tulis sebagai bagian dari pekerjaan Anda?
Carson63000
Ini berbunyi seperti duplikat programer.stackexchange.com/questions/8988/…
Huperniketes
1
Apakah Anda kebetulan sedikit anal di tempat lain dalam hidup? Saya tahu saya bisa sangat OCD dan menyempurnakan jika saya membiarkan diri saya ...
Humphrey Bogart
1
Sempurna adalah musuh yang cukup baik. Lakukan pekerjaan dengan baik. Selesaikan agar berhasil. Jangan mengunjungi kembali kecuali Anda dapat menunjukkan bukti empiris bahwa itu bermasalah atau memberi Anda masalah kinerja.
Blrfl

Jawaban:

18

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!

Chris
sumber
8

Berikut adalah beberapa aturan untuk membatasi kegiatan ini dan membuatnya lebih produktif:

  • ketikkan waktu, mis. set timer ke 25 menit
  • lakukan itu hanya ketika Anda memiliki cakupan tes yang layak.
  • coba buat refactoring Anda berguna untuk pengembangan beberapa fitur selanjutnya
azheglov
sumber
1
Saya setuju dengan Anda, tetapi pada (3) ... Saya akan memikirkan beberapa fitur berikutnya hanya jika saya yakin fitur-fitur tersebut harus dimasukkan dalam versi berikutnya, karena jika tidak Anda bisa jatuh ke YAGNI (You Ain ' t Akan Membutuhkannya). Saya sarankan membaca buku Martin Fowler dan Kent Beck "Refactoring: Meningkatkan Desain Kode yang Ada".
Oscar Mederos
1
@Oscar: setuju. Yang saya maksudkan adalah menghindari refactoring untuk kepentingannya sendiri dan menciptakan YAGNI.
azheglov
7

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

bigtang
sumber
3

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.

Tabel Bobby
sumber
2

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.

Kevin Hsu
sumber
1

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.

Tim Murphy
sumber
1

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.

Kevin
sumber
1

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.

Wayne Molina
sumber