Setelah menulis kode, mengapa saya merasa bahwa "saya akan menulis lebih baik" setelah beberapa waktu? [Tutup]

12

Saya telah mengerjakan proyek hobi saya di C ++ selama lebih dari 2 tahun. Setiap kali saya menulis modul / fungsi, saya kode itu dengan banyak pemikiran. Sekarang lihat masalahnya,

do {
  --> write the code in module 'X' and test it
  --> ... forget for sometime ...
  --> revisit the same piece of code (due to some requirement)
  --> feel that "This isn't written nicely; could have been better"
} while(true);

Berikut 'X'adalah modul apa saja (baik itu kecil / besar / sedang). Saya mengamati bahwa, ini terjadi tidak peduli berapa banyak usaha yang saya lakukan saat coding. Jadi kebanyakan, saya menahan diri dari melihat kode yang berfungsi. :)

Apakah ini perasaan yang umum bagi banyak orang? Apakah ini fenomena khusus bahasa? (Karena dalam C ++ seseorang dapat menulis hal yang sama dengan cara yang berbeda).

Apa yang harus saya lakukan, jika saya mendapatkan perasaan re-factoring ini untuk kode produksi dunia nyata, di mana mengubah kode kerja tidak akan memberi saya banyak penghargaan tetapi justru dapat mengundang masalah jika gagal.

iammilind
sumber
14
Saya akan lebih khawatir jika saya tidak pernah menemukan masalah dengan kode lama saya. Ini menunjukkan bahwa keahlian Anda berkembang.
Darren Young
1
Jika Anda melihat kode lama Anda dan jangan tidak berpikir "sialan, kenapa aku tidak melakukannya ini jalan kembali kemudian ?!", maka Anda belum belajar cukup karena Anda menulis kode.
sbi

Jawaban:

17

Fenomena ini sangat umum dan tidak spesifik untuk programmer. Setiap kali Anda melakukan tugas intelektual, Anda akan melihat puluhan tempat di mana Anda bisa meningkatkan - setelah Anda agak jauh. Tanyakan kepada orang bijak mana pun yang pernah menulis tesis, dan mereka akan memberi tahu Anda satu hal: "Jangan melihatnya. Anda akan menemukan kesalahan pada pandangan pertama."

Pada dasarnya ada dua hal untuk menghindari loop refactoring:

  1. Saat menulis dan mendesain, cobalah untuk mendapatkan perspektif jauh sedini mungkin. Mintalah seorang kolega melihat desain / kode Anda. Lihat lagi setelah akhir pekan. Lihatlah saat mabuk atau tinggi (tapi waspadalah: jangan mengubah apa pun sampai mabuk).
  2. Hiduplah dengan ketidaksempurnaan. Jika itu tidak cantik, tetapi bekerja dengan baik (baca: melakukan pekerjaan dengan baik dalam memenuhi semua persyaratan, termasuk ekstensibilitas dan keterbacaan), biarkan itu berdiri dan puas dengan pekerjaan baik yang Anda lakukan, bukan berjuang untuk pekerjaan yang sempurna.
thiton
sumber
Baca ini. en.wikipedia.org/wiki/Buyer's_remorse Sangat membantu.
S.Lott
3

Refactoring berkelanjutan adalah cara yang harus dilakukan. Mengubah kode kerja tidak akan menimbulkan masalah dan harus didorong jika dilakukan dengan benar. Jika kode Anda sepenuhnya diuji unit, Anda dapat memberi faktor ulang pada kode Anda dengan percaya diri.

Satu-satunya hal yang dapat Anda prediksi tentang kode produksi dunia nyata adalah, yaitu AKAN berubah. Jangan mencoba menebak bagaimana itu akan berubah, teknik baru apa yang akan Anda pelajari besok. Singkatnya, jangan mencoba membuat kode Anda "sempurna". Jadikan itu sebaik mungkin dengan pengetahuan Anda saat ini. Juga, pastikan kode Anda diuji secara menyeluruh dan dapat dikembangkan.

Saya menghabiskan 20% -30% dari waktu saya refactoring kode yang ada. Saya bekerja di perusahaan teknologi dan "manajemen" tidak pernah mengeluh tentang mengubah kode yang ada. Namun, saya menyadari bahwa ini dapat menjadi masalah di beberapa perusahaan. Martin Fowler bahkan memiliki bagian di dalamnya dalam buku refactoring- nya .

Singkatnya, itu adalah perasaan yang umum dalam pengalaman saya, tetapi itu bukan perasaan negatif.

Chip
sumber
2

Setiap modul / fungsi lahir dan berkembang dalam dunia prioritas. Setelah cukup untuk melayani tujuan dunia luar, seringkali dibiarkan mandek. Itu semua akhirnya perancah dalam pelayanan untuk tujuan yang lebih tinggi. Ya, kita harus terobsesi dengan kode, dan ya itu bisa menyebabkan kita mandek juga. Mungkin itu akan menjadi langkah yang baik bagi Anda untuk sedikit mengalihkan fokus Anda dari kode itu sendiri, dan merenungkan lebih lanjut tentang proses yang terjadi di dalam diri Anda, penghasil kode.

Menandai
sumber
2

Apakah ini perasaan yang umum bagi banyak orang? Apakah ini fenomena khusus bahasa?

Itu berarti Anda memperluas pengetahuan dan pandangan Anda.

Jika Anda tidak memiliki tugas dengan prioritas lebih tinggi, Anda harus selalu kembali dan meningkatkan kode Anda.

BЈовић
sumber
"... kembali dan tingkatkan kodemu." - siapa yang akan membayarmu untuk melakukan ini? Setelah kode Anda berfungsi, lanjutkan. Ketika Anda belajar dan tumbuh sebagai seorang programmer, Anda akan SELALU menemukan cara yang lebih baik untuk melakukan sesuatu, dan merasa bahwa upaya Anda sebelumnya dapat ditingkatkan. Tahan keinginan untuk melakukan sesuatu tentang itu - kembali dan memperbaiki kode lama Anda sebagian besar merupakan pemborosan waktu.
Dawood mengatakan mengembalikan Monica
1
@ David Wallace - Jika tidak ada yang harus kembali ke kode lama, kami tidak akan membuat keributan tentang hal itu.
JeffO
1
"Begitu kode Anda berfungsi, lanjutkan" - Anda tidak akan percaya bug seperti apa yang saya lihat dalam kode produksi, karena kode itu bekerja;)
BЈовић
@ Jeff O - itu sangat benar. Jika saya akan mempertahankan kode lama, saya akan mempertimbangkan untuk memperbaikinya, apakah itu kode saya atau milik orang lain. Tetapi kecuali ada proyek dengan beberapa dolar di belakangnya yang memerlukan pemeliharaan kode itu, maka tidak ada cara untuk membenarkan waktu yang dihabiskan untuk merapikannya. Kecuali itu buggy, tentu saja.
Dawood mengatakan mengembalikan Monica
@ VJovic - jika ada bug dalam produksi, itu karena kode TIDAK berfungsi. Saya pikir OP sedang berbicara tentang kode yang berfungsi dengan benar, tetapi jelek.
Dawood mengatakan mengembalikan Monica
2

Saya selalu berpikir bahwa seseorang mengambil kelas matematika untuk memperkuat keterampilan mereka di kelas sebelumnya. Aljabar tampak sulit, sampai Anda mengambil Aljabar II; Maka keterampilan yang Anda pelajari dalam Aljabar menjadi berguna. Itu adalah hal yang sama dalam pemrograman, penulisan, pengerjaan kayu, atau apa pun.

Ketika mengambil kursus pemrograman, Anda belajar tentang If-then-else, yang melakukan banyak hal sampai Anda belajar tentang sakelar. Ketika Anda mempelajari sesuatu yang baru, Anda melewati perkembangan ini, semua orang melakukannya.

mhoran_psprep
sumber
2

Saya mendapatkan perasaan yang sama setiap kali saya membaca sebagian besar kode yang saya tulis sendiri di masa lalu. Ini adalah hal yang baik, itu berarti bahwa pengetahuan dan gaya pengkodean Anda telah meningkat selama bertahun-tahun.

Sedangkan untuk mengubah kode produksi yang berfungsi, itu adalah no-no besar kecuali Anda telah melihat bug yang jelas. Bukan hanya karena itu mungkin buang-buang waktu, tetapi yang lebih penting karena sebagian besar bug perangkat lunak yang dibuat adalah jenis yang diperkenalkan ketika perubahan dibuat untuk program yang dirilis. Secara statistik kemungkinan Anda akan memperkenalkan bug yang tidak terduga. Jika tidak rusak jangan memperbaikinya.


sumber
1

Mengembangkan aplikasi berarti meningkatkannya dan membuatnya lebih baik; ini adalah proses yang berkelanjutan sehingga saat Anda memprogram Anda mendapatkan lebih banyak pengalaman dan pengetahuan. Ini juga berarti Anda sedang mengembangkan juga, jadi ketika Anda melihat kembali kode lama Anda, Anda mungkin tahu itu dapat ditingkatkan.

Jika Anda tidak memiliki perasaan ini, itu berarti salah satu dari dua hal:

  1. Anda masih pada tingkat keterampilan yang sama.
  2. Kode Anda sudah sempurna (tidak mungkin).
CVist
sumber