Bagaimana Anda mengatasi bias coding Anda sendiri ketika menyerahkan kode lawas? [Tutup]

22

Sebagai programmer, kita sering bangga akan keterampilan kita dan memiliki pendapat yang sangat kuat tentang apa itu kode 'baik' dan kode 'buruk'.

Pada suatu titik tertentu dalam karier kita, kita mungkin memiliki sistem warisan yang jatuh di pangkuan kita, dan berpikir, "Ya Tuhan, kode ini payah!" karena itu tidak sesuai dengan pendapat kami tentang kode apa yang seharusnya, terlepas dari kenyataan bahwa itu mungkin berfungsi dengan baik, kode dapat dipelihara.

Bagaimana Anda mempersiapkan diri Anda secara mental ketika mencoba untuk mendapatkan pekerjaan kepala programmer lain?

Bryan M.
sumber
2
wow ... pertanyaan ini sangat relevan bagi saya saat ini.
WalterJ89
1
Jika tidak rusak, jangan memperbaikinya. :-)
richard
Hal-hal yang Tidak Seharusnya Anda Lakukan dan Big Ball Of Mud harus menjadi bacaan wajib tentang topik ini untuk semua programmer.
Jan Hudec
kemungkinan duplikat dari Mengerjakan kode orang lain
agas

Jawaban:

31

Untuk setiap basis kode lama, cara yang benar untuk mempersiapkan diri Anda secara mental untuk menghadapinya adalah mulai dengan menulis tes unit untuknya .

Apakah itu menyebalkan atau tidak, Anda harus terlebih dahulu memiliki kepercayaan diri untuk dapat mengubahnya tanpa merusak barang!

Jeff Atwood
sumber
6
+1. Program lain sering bergantung pada bug dalam kode yang ada, apalagi cara anehnya dalam melakukan sesuatu. Sebelum Anda mengoceh, pahami!
Alex Feinman
Saya pernah mengalami masalah ini. Saya memperbaiki bug di perpustakaan internal kami, tetapi ternyata banyak kode penting bergantung pada perilaku yang salah itu. Astaga.
Jonathan Sterling
Terkadang menulis tes itu bisa sangat sulit. Tapi kemudian, kadang-kadang Anda dapat menemukan untaian longgar di suatu tempat , tes unit itu, dan kemudian menyebarkan infeksi tes lebih lanjut. Jadi, Anda mungkin harus melakukan refactor-menguji beberapa hal sebelum Anda mendapatkan bagian yang benar-benar ingin Anda ubah.
Frank Shearar
5
Itu mengasumsikan perusahaan Anda menggunakan, atau bahkan memahami, pengujian unit. Sebagian besar waktu tidak ada tes untuk kode, tidak ada dokumentasi dan tenggat waktu yang ketat untuk mengintegrasikan / memperbaiki / memodifikasinya sehingga Anda tidak bisa hanya "mulai menulis tes unit" untuk itu.
Wayne Molina
2
Untuk basis kode lawas, seringkali lebih mudah untuk memulai dengan tes regresi otomatis. Tes unit mengasumsikan ada unit yang terisolasi dalam kode yang dapat diuji secara independen - Anda harus sangat beruntung menemukan kode warisan semacam itu.
Doc Brown
30

Saya tidak bisa memberi tahu Anda berapa kali saya mengatakan "Oh, ini benar-benar salah", menulis ulang, dan kemudian menemukan cara yang sulit mengapa kode itu ditulis seperti itu. Biasanya, ini merupakan persyaratan tidak tertulis / tidak jelas yang tidak jelas. Setidaknya, itu benar dalam kode lawas yang saat ini saya kerjakan.

Frank Shearar
sumber
3
Terjadi pada saya beberapa kali. Terkadang lebih baik membiarkannya saja
TheLQ
4
Dan jika Anda mengetahuinya, berbaik hatilah kepada orang berikutnya dan menulis komentar!
Frank Shearar
11

Anda menunggu sampai Anda sudah cukup lama untuk menemukan kode warisan jelek Anda sendiri. Itu adalah pengalaman yang merendahkan hati dan bagian dari proses pembelajaran. Saya merindukan saat ketika saya tahu segalanya.

Saya pikir Fosco memiliki poin bagus untuk dapat memasukkannya ke dalam konteks pembatasan waktu & fungsionalitas potensial. Terkadang Anda dipaksa untuk membuat sesuatu berfungsi.

Dan terakhir, pahami bahwa inilah sebabnya Anda memiliki pekerjaan.

JeffO
sumber
4
Terjadi sepanjang waktu untuk saya. Saya terus-menerus melihat kembali kode lama dan berpikir pada diri saya sendiri: "Siapa yang menulis omong kosong ini? Oh ya .. saya lakukan." Saya pikir ini menunjukkan bahwa Anda tumbuh sebagai programmer jika Anda dapat mengakui bahwa beberapa kode yang Anda tulis di masa lalu adalah buruk. Jika Anda melihat kembali dan mengatakan "Ya, terlihat bagus untuk saya", entah itu kode yang sangat bagus, atau Anda tidak mengalami kemajuan. : P
Jasarien
7

Tertawalah, berusaha keras untuk tidak menghakimi terlalu banyak, dan lewati saja. Tidak baik menjadi kode-nazi nyata ... Pasti ada yang namanya 'cukup baik' atau bahkan 'cukup baik pada saat itu.' Ada banyak kali di mana sesuatu dikembangkan atau dibalut untuk memperbaiki krisis, kemudian tidak pernah ditinjau kembali.

Jika benar-benar buruk, lihat apakah Anda dapat membuat kasus untuk menulis ulang .. jika itu tidak penting, cukup masuk dan keluar.

Fosco
sumber
7

Pilih pertempuran Anda. Ketahui perbedaan antara "Saya tidak akan menulis seperti ini" dan "ini menciptakan pemeliharaan yang serius atau tantangan dukungan"

ASHelly
sumber
Saya akan mencuri jawaban ini. :-)
ngeri
4

Seringkali saya merasa berguna untuk merasakan apa yang dianggap baik oleh para pengembang asli.

Cari pola dan tema untuk apa yang mereka lakukan dan sering kali Anda menemukan bahwa ada alasan untuk beberapa keputusan aneh di tempat pertama.

Kadang-kadang Anda menemukan bahwa pengembang asli sebenarnya buruk, tetapi Anda memiliki gagasan tentang jenis buruk apa yang mereka jual saat itu.

Bagaimanapun, setelah melakukan ini, Anda harus memiliki gambaran yang lebih baik tentang di mana Anda bisa memulai menulis ulang atau seperti apa perbaikan cepat tanpa harus memperbaiki semuanya.

Yang terpenting, jangan langsung berasumsi bahwa hanya karena jelek itu buruk. Tidak ada yang membuat Anda terlihat lebih bodoh karena menghabiskan waktu memodernisasi sesuatu hanya untuk mengetahui itu kurang mampu daripada yang asli.

Tagihan
sumber
3

Jika saya punya waktu saya serang dan membunuh kode yang ditulis dengan buruk.

Ini perang.


sumber
3

Saya selalu beralasan bahwa kode jelek adalah kode yang telah melihat banyak debugging, dengan banyak seluk-beluk yang tidak tampak dengan inspeksi sepintas. Jika saya menggantinya, atau mendesain ulangnya secara mendalam, saya perlu memastikan bahwa saya benar-benar memahami setiap aspek dari apa yang kode lakukan. Jika saya tidak punya waktu untuk sampai ke dasar, saya harus mengambil pendekatan risiko minimal, membuat perubahan sekecil mungkin untuk mencapai tujuan saya.

Biasanya saya akan melakukan perbaikan / perubahan kecil, dan mengusulkan fitur untuk pengembangan nanti yang akan memaafkan sampai ke dasar hal-hal dan refactoring semuanya. Lalu saya melakukan yang terbaik untuk mengabaikan kode sampai fitur tersebut berakhir pada peta jalan.

Joeri Sebrechts
sumber
3

Ketika kode lama lebih dari beberapa tahun, mungkin telah ditulis seperti itu karena keterbatasan dalam bahasa atau sistem operasi dll. Yang ada pada saat kode itu ditulis. Hei itu terlihat buruk sekarang, tetapi apakah itu buruk? Saya mencoba berasumsi bahwa pengembang memiliki alasan atas apa yang dia lakukan. Alasan itu mungkin tidak lagi berlaku tetapi dengan asumsi ada satu alih-alih hanya ketidakmampuan umum (programmer muda akan memikirkan hal yang sama tentang kode Anda dalam 5 tahun bahkan mungkin kurang) membuat Anda kurang marah tentang hal itu. Jika berhasil dan tidak ada masalah yang terkait dengannya, hargai kode warisan itu, tidak peduli seberapa jeleknya, karena itu akan membuat Anda menyelesaikan masalah yang lebih menarik.

HLGEM
sumber
Ah, pertanyaan lama WHY ...
1

Di masa lalu ketika saya tidak punya waktu untuk mengencingi kode orang lain dan mengalahkannya menjadi gaya "saya", saya harus menggunakan cara yang sangat didorong oleh tugas:

Apa yang saya coba tambahkan ke kode ini / fix / make work?

Apakah yang saya lakukan sedang berusaha mencapai tujuan itu? Jika tidak, berhentilah melakukannya, dan kembalilah ke saat terakhir saya membuat perubahan berorientasi tugas.

Apakah saya selesai dengan tugas ini? Jika demikian, berhentilah mengutak-atik kode, meskipun sepertinya kode itu ditulis oleh cetakan Mars yang non-sentient.

Alex Feinman
sumber
1

Kecuali Anda siap untuk memiliki kode dan perbaikan yang diperlukan di masa mendatang, jangan menyentuhnya. Anda akan mengatasi kecenderungan ingin memperbaiki sesuatu ketika Anda memecahkan sesuatu yang tidak Anda tulis karena Anda tidak mempelajarinya dengan cukup baik sebelum Anda menyelam, dan Anda butuh 2 hari dan latihan api untuk membuatnya bekerja lagi .

Jangan salah paham ... ada alasan sah untuk memperbaiki kode, tetapi jika sebuah bisnis menuntut agar kode itu bekerja, dan Anda "memperbaikinya" tanpa mengetahui konsekuensinya sebelum melompat, Anda meminta dunia yang terluka .

CokoBWare
sumber
1

Refactoring sedikit demi sedikit bisa bermanfaat, tetapi berhati-hatilah dalam mengubah aspek kecil apa pun dari bagaimana kode itu benar-benar berperilaku kecuali Anda mengerti mengapa perilaku itu ada dan apa pengaruhnya. Sayangnya, kode yang paling membutuhkannya kadang-kadang paling sulit untuk diubah tanpa menyentuh perilakunya, meskipun Anda biasanya dapat meluruskan bagian-bagiannya, atau setidaknya berkomentar.

David Thornley
sumber
0

Saya bekerja hampir secara eksklusif pada kode warisan hari ini dan saya selalu berpikir, "Oh, tidak, apa yang mereka pikirkan?" . Lalu saya mulai menulis tes unit untuk kode dan itulah titik di mana saya benar-benar harus menganalisis aliran kontrol dan dependensi.

Terkadang tidak mungkin untuk dengan mudah menulis unit test. Tetapi ketika saya mencoba, saya mendapatkan informasi tentang kode dan akan mengerti mengapa ditulis seperti itu. Kadang-kadang itu akan membuktikan bahwa kode itu benar-benar berantakan, kadang-kadang saya bisa memahami proses pemikiran pengembang asli dan dapat menambahkan dokumentasi yang berguna atau menulis ulang sepotong kode ketika saya ingin menambahkan fungsionalitas baru.

Bagi saya itu membantu untuk berpikir bahwa kode saya akan terlihat sama untuk saya sendiri ketika saya kembali ke sana dalam 12 bulan .

ngeri
sumber
0

Dengan pengalaman muncul penilaian untuk mengetahui kapan kode benar-benar buruk, dan kapan kode itu ditulis dengan gaya yang berbeda. Jika ini berfungsi dengan baik dan mudah dirawat dan ada cakupan tes otomatis yang baik , maka itu tidak buruk dan Anda hanya perlu membuka pikiran Anda. Anda mungkin akan belajar sesuatu. Kode yang buruk tidak berfungsi dan dapat dikelola.

Berikut ini beberapa penanda kode yang benar-benar buruk:

  • Blok logika besar telah digandakan alih-alih dihidupkan kembali.
  • Ketergantungan melingkar antara kelas atau paket
  • Kopling tinggi; kohesi rendah
  • Variabel yang tidak digunakan, menulis ke variabel yang tidak pernah dibaca, kode yang tidak terjangkau.
  • Implementasi ulang fungsi perpustakaan standar, misalnya pemformatan tanggal.
  • Logika kompleks yang tidak perlu; yaitu 50 baris kode di mana 10 akan melakukannya dengan baik.
  • Tidak ada komentar yang menjelaskan tujuan kelas atau metode.
  • Komentar yang menyesatkan.

Kurangnya tes otomatis tidak berarti kode itu buruk, tetapi itu berarti proyek itu buruk.

Ini bukan masalah selera; praktik-praktik ini membuat pemeliharaan program jauh lebih mahal.

Bagaimana Anda mempersiapkan diri?

Terima kenyataan bahwa perlu beberapa saat untuk dapat berhasil bekerja pada basis kode baru. Jika "dipelihara dengan sempurna" dan ada cakupan tes yang tinggi, itu membutuhkan waktu lebih sedikit tetapi itu masih tidak akan terjadi segera. Jika kode itu buruk, maka hal pertama yang saya lakukan adalah memperingatkan para pemangku kepentingan bahwa itu dalam kondisi yang buruk dan kemajuan awal akan lambat. Jika mereka skeptis, maka saya mendukung klaim saya dengan menunjukkan kepada mereka contoh masalah dalam kode aktual dan menjelaskan perbedaannya dari praktik terbaik industri.

kevin cline
sumber