Haruskah saya mengikuti gaya pengkodean yang buruk hanya untuk mengikuti konvensi yang ada di tempat kerja saya?

102

Saya telah bekerja di pekerjaan saya selama sekitar satu tahun. Saya terutama bekerja di antarmuka GUI kami yang menggunakan metode dari backend C, tapi saya biasanya tidak harus berurusan dengan mereka kecuali untuk nilai kembali. GUI kami terstruktur dengan cukup masuk akal, mengingat keterbatasan kami.

Saya telah ditugaskan untuk menambahkan fungsi ke bagian baris perintah dari program. Sebagian besar fungsi-fungsi ini seperti 300 baris panjang dan sulit digunakan. Saya mencoba mengumpulkan potongan-potongan itu untuk mendapatkan informasi alarm tertentu, dan saya kesulitan mengaturnya. Saya tahu bahwa saya membuat pengujian saya lebih rumit dengan melakukannya dalam satu fungsi panjang.

Haruskah saya menyimpan semuanya dalam fungsi besar sesuai gaya fungsi yang ada, atau haruskah saya merangkum alarm dalam fungsinya sendiri?

Saya tidak yakin apakah itu tepat untuk menentang konvensi pengkodean saat ini atau apakah saya harus menggigit peluru dan membuat kode sedikit lebih membingungkan bagi saya untuk menulis.

Singkatnya, saya membandingkan

showAlarms(){
    // tons of code
}

melawan

showAlarms(){
   alarm1();
   alarm2();
   return;
}

alarm1(){
    ...
    printf(...);
    return;
}

EDIT: Terima kasih atas saran semua orang, saya memutuskan bahwa saya akan mendesain kode saya diperhitungkan, dan kemudian bertanya apa yang mereka inginkan, dan jika mereka menginginkan semuanya dalam satu saya hanya dapat memotong dari kode faktor saya dan mengubahnya kembali menjadi 1 fungsi besar. Ini harus memungkinkan saya untuk menulis dan mengujinya lebih mudah bahkan jika mereka menginginkan semua kode dalam satu definisi.

PEMBARUAN: Mereka akhirnya senang dengan kode yang diperhitungkan dan lebih dari satu orang berterima kasih kepada saya karena telah menetapkan preseden ini.

Justin
sumber
117
Sangat diragukan bahwa perusahaan tempat Anda bekerja mengambil posisi bahwa fungsi Anda harus sepanjang 300 baris karena "itulah cara kami selalu melakukannya." Itu bukan "konvensi gaya pengkodean;" itu hanya gaya yang buruk.
Robert Harvey
64
Ini adalah jenis hal yang harus Anda diskusikan dengan anggota tim Anda yang lain, untuk mencari tahu praktik apa yang Anda lihat adalah konvensi yang mereka anggap penting untuk diikuti semua orang, dan hal-hal apa saja yang dilakukan seseorang hanya sekali dan Anda tidak perlu ditiru. Tidak diragukan lagi ada sejumlah keduanya.
Servy
17
@ beginnerBinx Itu hanya sampai pada bagaimana Anda mengucapkannya. Jangan ungkapan itu sebagai, "X melakukan sesuatu yang benar-benar bodoh, apakah saya juga harus melakukan hal bodoh itu." tetapi lebih sebagai sesuatu seperti, "Saya perhatikan bahwa X melakukan satu hal ini, apakah ada alasan tertentu yang dilakukannya seperti itu; apakah akan menjadi masalah jika saya tidak melakukan hal yang sama ketika menulis Y?" Itu kemudian menjadi keputusan mereka apakah akan menampar kode lama, atau menjelaskan mengapa mereka harus melakukannya dengan cara itu (apakah dengan enggan atau antusias).
Servy
11
Gaya baik atau buruk sering diperdebatkan dan jarang disepakati. Pengajaran universitas adalah bahwa fungsi harus singkat tetapi jika ini mengaburkan maknanya, jangan lakukan itu. Tes harus jelas, daripada tanpa berpikir mengikuti seperangkat aturan.
cepat_now
9
Orang acak di internet tidak keberatan membaca teman satu tim Anda, jadi semua jawaban yang Anda dapatkan di sini hanyalah preferensi pribadi orang. Anda harus berbicara dengan tim Anda. Apakah fungsi lama merupakan prinsip desain yang disengaja? Apakah mereka ingin Anda melanjutkan gaya fungsi panjang atau mereka ingin Anda menulis apa yang Anda anggap paling bersih?
JacquesB

Jawaban:

102

Ini benar-benar antara Anda dan rekan tim Anda. Tidak ada orang lain yang bisa memberi Anda jawaban yang benar. Namun, jika saya berani membaca yang tersirat, fakta bahwa Anda menyebut gaya ini "buruk" memberikan beberapa informasi yang menunjukkan bahwa lebih baik melakukannya lambat. Sangat sedikit gaya pengkodean yang sebenarnya "buruk." Ada yang tidak akan saya gunakan, sendiri, tetapi mereka selalu memiliki sajak atau alasan untuk mereka. Bagi saya, ini menunjukkan bahwa ada lebih banyak cerita daripada yang Anda lihat sejauh ini. Bertanya sekitar akan menjadi panggilan yang sangat bijaksana. Seseorang mungkin tahu sesuatu yang tidak Anda ketahui.

Saya mengalami ini, secara pribadi, pada perampokan pertama saya ke pengkodean misi kritis waktu-nyata. Saya melihat kode seperti ini:

lockMutex(&mutex);
int rval;
if (...)
{
    ...
    rval = foo();
}
else
{
    ...
    rval = bar();
}
unlockMutex(&mutex);
return rval;

Menjadi pengembang OO C ++ yang cerah dan mengkilap, saya segera memanggil mereka dengan risiko bug yang mereka miliki dengan mengunci dan membuka kunci mutex secara manual, daripada menggunakan RAII . Saya bersikeras bahwa ini lebih baik:

MutexLocker lock(mutex);
if (...)
{
    ...
    return foo();
}
else
{
    ...
    return bar();
}

Jauh lebih sederhana dan lebih aman, bukan ?! Mengapa mengharuskan pengembang untuk mengingat untuk membuka kunci mutex mereka di semua jalur aliran kontrol ketika kompilator dapat melakukannya untuk Anda!

Nah, apa yang saya temukan kemudian adalah bahwa ada alasan prosedural untuk ini. Kami harus mengkonfirmasi bahwa, ya memang, perangkat lunak bekerja dengan benar, dan ada daftar alat yang terbatas yang diizinkan untuk kami gunakan. Pendekatan saya mungkin lebih baik di lingkungan yang berbeda, tetapi di lingkungan tempat saya bekerja, pendekatan saya akan dengan mudah mengalikan jumlah pekerjaan yang terlibat dalam memverifikasi algoritma sepuluh kali lipat karena saya baru saja membawa konsep C ++ RAII ke dalam bagian kode yang dipegang oleh standar yang benar-benar lebih bisa menerima pemikiran gaya-C.

Jadi apa yang tampak seperti gaya pengkodean yang buruk, benar-benar berbahaya bagi saya sebenarnya dipikirkan dengan baik dan solusi "baik" saya sebenarnya yang berbahaya yang akan menyebabkan masalah di jalan.

Jadi tanyakan di sekitar. Pasti ada pengembang senior yang dapat bekerja dengan Anda untuk memahami mengapa mereka melakukannya dengan cara ini. Atau, ada pengembang senior yang dapat membantu Anda memahami biaya dan manfaat refactor di bagian kode ini. Either way, tanyakan sekitar!

Cort Ammon
sumber
60
Arguably bagian yang lebih berbahaya dari contoh mutex adalah kurangnya komentar kode yang menjelaskan mengapa ia tidak bisa menggunakan RAII. Memang, jika kunci / buka kunci eksplisit ini ada di seluruh basis kode, mungkin sulit untuk menambahkan komentar untuk setiap instance. Dalam hal ini mungkin dokumen primer harus ditulis yang perlu diketahui oleh para dev baru.
Kelvin
10
Tentu, berbicara dengan senior selalu baik, dan refactoring harus dilakukan dengan hati-hati (dan dengan pengujian). Dan tentu saja, konkurensi / mutex adalah binatang buas tersendiri. Tetapi ketika melihat fungsi dengan> 300 baris, saya tidak akan menginvestasikan terlalu banyak waktu untuk mencari "alasan teknis tersembunyi" mengapa fungsi ini terlalu besar. Alasan mengapa fungsi menjadi terlalu panjang selalu sama, dan mereka tidak teknis.
Doc Brown
8
@DocBrown Hanya karena mereka tidak teknis bukan berarti mereka bukan alasan. Penting bagi pengembang untuk mengingat bahwa mereka adalah bagian dari mesin yang lebih besar. (Saya tidak dapat menghitung berapa kali saya harus mempelajari kembali pelajaran itu)
Cort Ammon
4
@DocBrown Either way, itu adalah pengembang senior yang harus diajak bicara. Saya memilih contoh yang saya lakukan karena mudah untuk menemukan argumen yang tak terhitung jumlahnya mengapa kode bodoh itu bodoh. Menemukan argumen mengapa kode yang terlihat bodoh sebenarnya tidak bodoh lebih sulit.
Cort Ammon
3
@DocBrown Dari komentar dan jawaban Anda, saya pikir saya dapat mengatakan bahwa perbedaan pendapat kami adalah bahwa Anda mulai dari asumsi bahwa kode sudah "buruk," berdasarkan bukti apa yang telah Anda berikan, sementara saya lebih suka ambil jalur yang mengeksplorasi apakah kode itu "buruk" terlebih dahulu.
Cort Ammon
84

Jujur, apakah Anda percaya memiliki fungsi yang sulit digunakan, dengan 300 baris, hanya masalah gaya? Jadi mengikuti contoh buruk dapat membuat keseluruhan program dalam keadaan yang lebih baik karena konsistensi? Saya kira Anda tidak percaya, jika tidak, Anda tidak akan menanyakan pertanyaan ini di sini.

Dugaan saya adalah fungsi-fungsi ini sangat panjang karena dalam bisnis kami ada banyak programmer yang biasa-biasa saja yang hanya menumpuk fitur di atas fitur, tanpa memperhatikan keterbacaan, kualitas kode, penamaan yang tepat, uji unit, refactoring, dan mereka tidak pernah belajar membuat abstraksi yang tepat . Anda harus memutuskan sendiri apakah Anda ingin mengikuti kawanan itu, atau jika Anda ingin menjadi programmer yang lebih baik.

Tambahan, karena komentar: "300 baris" dan "sulit digunakan" adalah indikasi kuat IMHO untuk kode buruk. Menurut pengalaman saya, sangat tidak mungkin ada "alasan teknis tersembunyi" mengapa kode semacam itu tidak dapat diimplementasikan dengan cara yang lebih mudah dibaca, sebanding dengan contoh jawaban Cort Ammon. Namun, saya setuju dengan Cort Anda harus mendiskusikan hal ini dengan orang-orang yang bertanggung jawab dalam tim - bukan untuk menemukan alasan yang tidak jelas mengapa kode atau "jenis gaya" ini tidak dapat diubah, tetapi untuk mengetahui bagaimana kode dapat di refactored dengan aman tanpa merusak barang-barang .

Doc Brown
sumber
127
Bahkan programmer yang kompeten melakukan kejahatan ini ketika berada di bawah tenggat waktu yang ketat.
gardenhead
13
@ardenhead, saya bisa mengerti tidak refactoring fungsi 300-line untuk menghemat waktu, tetapi tidak ada cara yang memungkinkan menulis fungsi 300-line akan menghemat waktu Anda.
Dangph
39
@ardenarden: ketika saya pergi ke dokter bedah karena saya butuh bantuan segera, saya masih berharap dia meluangkan waktu untuk mencuci tangannya sebelum dia mulai melakukan pada saya. Ini adalah sesuatu yang harus dipelajari banyak orang dalam bisnis kami untuk mencapai kompetensi nyata : selalu meninggalkan kode dalam keadaan yang lebih baik daripada sebelumnya, dan ini juga akan meningkatkan kemampuan untuk memenuhi tenggat waktu. 300 garis fungsi biasanya tumbuh hari demi hari, oleh orang yang tidak peduli, dan mereka akan selalu menggunakan "tenggat waktu" sebagai alasan.
Doc Brown
17
@Dangph menghemat waktu saat Anda hanya menambahkan 5 baris ke fungsi alih-alih refactoring. Itu biasanya tumbuh ketika fungsi awal panjang (30+ baris) dan programmer berikutnya berpikir "ini bukan kode saya, saya tidak akan refactor untuk tidak merusaknya, cukup tambahkan beberapa baris di sana-sini".
Džuris
7
@ Yuris, seperti yang saya mengerti, pertanyaannya adalah tentang membuat fungsi baru, bukan refactoring yang sudah ada. Jika Anda menulis fungsi baru, Anda tidak akan menghemat waktu dengan membuatnya menjadi fungsi monster tunggal.
Dangph
42

Tidak.

Dalam buku Pragmatic Programmer , penulis berbicara tentang Teori Jendela Rusak .

Teori ini menyatakan:

Pertimbangkan sebuah bangunan dengan beberapa jendela yang pecah. Jika windows tidak diperbaiki, kecenderungannya adalah perusak untuk merusak beberapa jendela lagi. Akhirnya, mereka bahkan bisa masuk ke dalam gedung, dan jika tidak dihuni, mungkin menjadi penghuni liar atau cahaya di dalam.

Atau pertimbangkan trotoar. Beberapa sampah menumpuk. Segera, lebih banyak sampah menumpuk. Akhirnya, orang-orang bahkan mulai meninggalkan kantong sampah dari restoran take-out di sana atau bahkan masuk ke mobil.

Dalam buku itu penulis menulis paralel antara teori dan kode ini. Setelah Anda menemukan kode seperti ini, Anda berhenti dan bertanya pada diri sendiri pertanyaan yang sama.

Dan jawabannya adalah tidak.

Setelah Anda meninggalkan jendela yang rusak ini - dalam kasus kami, kode yang buruk - ini akan menciptakan efek bahwa semua orang akan meninggalkan jendela yang rusak.

Dan suatu hari kode akan runtuh.

Berikan salinan kode bersih dan kode bersih ke semua orang.

Dan saat Anda berada di subjek, salinan TDD juga bagus.

linuxunil
sumber
6
Bagaimana jika basis kode adalah rumah kaca dengan hanya jendela yang rusak?
Alan Shutko
8
@AlanShutko Lalu pastikan resume Anda terbaru? Temukan perusahaan yang berbeda sekarang .
David Montgomery
12
Kode jarang "runtuh". Semakin sulit dan semakin sulit untuk menambahkan fitur baru, membutuhkan lebih banyak waktu, dan perkiraan untuk membersihkan kode akan meningkat - yang berarti semakin sulit untuk mendapatkan anggaran waktu untuk pembersihan yang diperlukan.
Doc Brown
8
Wow, analogi sewenang-wenang tentang teori "jendela pecah" tampaknya.
Samthere
4
TDD tidak ada hubungannya dengan itu. Apakah Anda akan pergi Bisnis / Domain / Uji / ketiadaan driver desain yang tidak mengubah apa pun tentang mengikuti dasar-dasar kode bersih. Maaf tapi sangat melelahkan melihat 'TDD' dikutip di mana-mana bahkan tidak dalam subjek
Walfrat
25

Ya, lakukanlah. Struktur! = Gaya

Anda berbicara tentang struktur, bukan gaya. Pedoman gaya tidak (biasanya) menentukan struktur, karena struktur umumnya dipilih untuk kesesuaiannya untuk masalah tertentu, bukan kesesuaian dengan suatu organisasi.

Hati-hati

Terkutuklah yakin Anda tidak menyebabkan konsekuensi negatif di area lain yang mungkin tidak terjadi pada Anda. Sebagai contoh,

  • Pastikan Anda tidak menyulitkan diff atau penggabungan kode karena Anda telah menghilangkan kemiripan dengan kode yang ada.
  • Pastikan aliran pengecualian muncul dengan benar dan tumpukan jejak tidak tercemar dengan tumpukan omong kosong yang tak terbaca.
  • Pastikan Anda tidak secara tidak sengaja memaparkan titik masuk publik yang akan menyebabkan masalah jika dipanggil langsung (jangan taruh di peta dan / atau jangan diekspor).
  • Jangan mengacaukan namespace global, misalnya jika fungsi Anda yang lebih kecil semuanya memerlukan semacam konteks global yang sebelumnya dinyatakan dalam lingkup fungsi-lokal.
  • Pastikan untuk melihat log apa pun, dan tanyakan pada diri Anda apakah Anda berada di tim dukungan apakah log yang dihasilkan oleh kode Anda akan membingungkan ketika terlihat terjalin dengan log dari kode apa pun yang tidak Anda sentuh.
  • Pastikan Anda tidak mematuhi gaya yang ada, misalnya bahkan jika mereka menggunakan tua-sekolah notasi Hungaria dan itu membuat mata Anda berdarah, tetap konsisten dengan basis kode umum. Satu-satunya hal yang lebih menyakitkan daripada membaca notasi Hongaria adalah membaca kode yang menggunakan selusin jenis notasi berbeda tergantung pada siapa yang menulis apa.

Bersikaplah lembut

Ingatlah bahwa Anda adalah bagian dari sebuah tim, dan meskipun kode yang baik itu penting, juga sangat penting bagi anggota tim Anda untuk menjaga hal-hal yang Anda tulis ketika Anda pergi berlibur. Cobalah untuk tetap pada aliran yang masuk akal bagi orang-orang yang terbiasa dengan gaya lama. Hanya karena Anda adalah pria paling cerdas di ruangan itu tidak berarti Anda harus berbicara di atas kepala semua orang!

John Wu
sumber
"Cobalah untuk tetap pada aliran yang akan masuk akal bagi orang-orang yang terbiasa dengan gaya lama." - jadi, apakah saran Anda untuk memprogram dengan cara yang sama seperti apa pun yang dilakukan badut tidak kompeten sebelumnya? Menambahkan fungsi 300 baris tidak akan membuatnya mudah.
BЈовић
11
Saya tidak mengatakan untuk tetap pada aliran yang serupa. Saya mengatakan tetap pada aliran yang akan mereka pahami.
John Wu
2
Saran yang bagus. Ketika saya refactored satu perintah menjadi 5 fungsi dalam jawaban ini, saya secara halus mengubah semantik dengan nilai pra-komputasi di dalam ekspresi logis yang awalnya hanya dihitung secara kondisional. Para pengulas menangkapnya ;-). Nasihat serius adalah untuk meninjau dan menguji secara menyeluruh. Setiap perubahan dapat menyebabkan kesalahan, dan itu mungkin menjadi alasan utama tidak ada yang melakukan kesalahan.
Peter A. Schneider
6

Saya tidak melihat ini sebagai konvensi kode. Saya melihat ini sebagai seseorang yang tidak mengerti bagaimana menulis kode yang bisa dipelihara yang mudah dimengerti. Saya akan memecah kode Anda menjadi fungsi yang berbeda saat Anda menyarankan dan mendidik tim Anda tentang manfaat melakukan ini sambil mencoba memahami mengapa mereka merasa fungsi 300-line dapat diterima. Saya akan sangat tertarik mendengar alasan mereka.

Bernard
sumber
1
" Tidak ada alasan, itu hanya kebijakan kami. "
5

Jawabannya ada dalam ulasan kode.

Pertanyaan sebenarnya adalah jika Anda menyerahkan kode yang diperhitungkan dengan baik, apakah Anda akan menjadi satu-satunya yang mau bekerja dengannya?

Saya, seperti kebanyakan orang di sini, percaya 300 fungsi garis adalah kekejian. Namun, membawa Windex ke TPA tidak akan banyak membantu. Masalahnya bukan kode, itu coders.

Menjadi benar tidak cukup. Anda perlu menjual orang dengan gaya ini. Setidaknya saat membacanya. Jika Anda tidak berakhir seperti pria malang ini: dipecat karena keahlian Anda terlalu jauh di atas rekan kerja Anda

Mulai dari yang kecil. Tanyakan sekitar dan cari tahu apakah ada orang lain yang menyukai fungsi yang lebih kecil. Lebih baik lagi mengintai di sekitar basis kode dan melihat apakah Anda dapat mengetahui siapa yang menulis yang terkecil (Anda mungkin menemukan bahwa kode paling jelek adalah kode tertua dan coders saat ini menulis kode yang lebih baik). Bicaralah dengan mereka tentang hal ini dan lihat apakah Anda memiliki sekutu. Tanyakan apakah mereka mengenal orang lain yang merasakan hal yang sama. Tanyakan apakah mereka mengenal seseorang yang membenci fungsi kecil.

Kumpulkan bersama kelompok kecil ini dan bicarakan tentang membuat perubahan. Tunjukkan pada mereka jenis kode yang ingin Anda tulis. Pastikan mereka bisa membacanya. Tanggapi keberatan dengan serius. Buat perubahan. Dapatkan kode Anda disetujui. Anda sekarang memiliki kekuatan rapat di belakang Anda. Beberapa lebih banyak dari ini dan Anda dapat menghasilkan dokumen satu halaman yang secara eksplisit menerima gaya baru yang Anda perkenalkan.

Mengejutkan adalah hal yang sangat kuat. Mereka dapat menghasilkan pengaruh. Clout adalah apa yang akan Anda gunakan untuk melawan mereka yang menentang gerakan ini. Dan itulah yang saat ini. Sebuah gerakan. Anda memperjuangkan hak untuk meningkatkan status quo. Orang takut akan perubahan. Anda perlu bicara manis, membujuk, dan mendorong. Tetapi dengan sedikit keberuntungan Anda akan berubah menjadi diterima.

candied_orange
sumber
5
Jika diperlukan banyak sosialisasi dan beberapa pertemuan untuk meyakinkan pengembang bahwa metode 300 baris terlalu panjang, maka saya tidak berpikir bicara akan membantu. Masalah dengan pendekatan di atas adalah bahwa jika Anda meminta izin untuk menulis kode yang baik, Anda sedang defensif. Tetapi jika Anda hanya menulis kode yang baik dan meluangkan waktu untuk memperbaiki kode yang ada, maka siapa pun yang keberatan akan menjelaskan mengapa metode 300 baris bagus dan untuk membenarkan menghabiskan waktu mengembalikannya.
Brandon
3
Saya dapat memberi tahu Anda bahwa jika saya diundang ke serangkaian pertemuan untuk membahas jalur kode per batas fungsi, saya akan menemukan cara untuk lolos dari rapat tersebut. Tidak ada nomor yang benar dan Anda tidak akan pernah membuat orang setuju. Terkadang, orang perlu ditunjukkan cara yang lebih baik.
Brandon
Kadang-kadang, memisahkan fungsi yang sangat besar (dan memberi nama lebih baik serta menambahkan komentar dan dokumentasi saat saya mengetahuinya adalah langkah pertama yang diperlukan sebelum melakukan perubahan.
JDługosz
@Brandon Anda mungkin tidak bermaksud terdengar seperti ini, tetapi yang saya dengar adalah Anda benar dan semua orang bisa mengatasinya. Selama kode Anda berfungsi, tidak masalah jika anggota tim lainnya tidak memahaminya. Tentu saja tidak sepadan dengan waktu Anda untuk mengajari mereka sesuatu. Anda benar-benar senang melihat mereka terus membuat 300 fungsi garis saat Anda menulis kode dengan cara Anda sendiri.
candied_orange
1
@ CanandOrange Saya tentu saja tidak bermaksud melawan tim. Yang saya maksudkan adalah bahwa beberapa topik paling baik dipelajari dengan melihatnya beraksi, tetapi mencoba membuat tim untuk membuat keputusan demokratis tentang gaya tidak akan menjadi produktif. Saya telah melihat konsistensi yang digunakan sebagai alasan untuk menulis kode yang tidak dapat dibaca. Hasil? Lebih banyak kode yang tidak dapat dibaca. Saya bisa mengatur serangkaian pertemuan untuk membicarakannya, atau saya bisa memperbaikinya, dan kemudian menunjukkan hasilnya kepada orang lain.
Brandon
3

Terkadang Anda harus mengikuti arus.

Seperti yang Anda katakan, Anda telah ditugaskan untuk mengimplementasikan suatu fungsi dalam basis kode kerja yang ada.

Terlepas dari kekacauan, dan saya mengerti itu tergoda untuk membersihkannya. tetapi di dunia bisnis Anda tidak selalu memiliki kesempatan untuk memperbaiki kode.

Saya akan mengatakan lakukan saja apa yang diminta dan lakukan terus.

Jika Anda merasa perlu melakukan refactoring atau menulis ulang daripada yang perlu Anda bawa untuk diskusi dengan tim.

meda
sumber
2
Jika Anda meminta izin pada setiap refactoring kecil, Anda akan selamanya memiliki kode yang tidak dapat dipelihara, yang berbahaya bagi bisnis. Manajer hanya melihat biaya perubahan, tetapi jarang melihat biaya tidak berubah.
Brandon
5
OP telah diminta untuk menulis suatu fungsi yang tidak mengubah ratusan baris kode
meda
2
@ tepatnya! Saya berada dalam situasi yang sama. Saya sedang mengembangkan modul baru untuk intranet perusahaan dan saya menemukan apa yang dapat digambarkan sebagai "tahun kelalaian yang tidak dapat diperbaiki", dengan perangkat lunak server dan perpustakaan tidak diperbarui sama sekali sejak tahun 2006. Saya tidak seharusnya membersihkan kekacauan ini , tetapi saya butuh waktu lebih lama untuk kode karena keterbatasan. (Bayangkan MySQl 5.2, MySQL 5.0). Saya tidak dapat memperbarui apa pun karena mungkin kode yang ada tidak akan berjalan pada versi yang lebih baru karena kode usang.
roetnig
3
"Jika tidak rusak, jangan memperbaikinya." Saya punya mobil berumur 20 tahun yang sedikit bocoran minyak. Layak menghabiskan uang? Tidak Andal? Iya.
3

Sebelum membuat pernyataan bahwa praktiknya buruk, saya terlebih dahulu akan mengambil langkah untuk memahami alasan metode besar dan praktik lain yang mungkin dianggap buruk.

Kemudian, Anda perlu memastikan cakupan tes cukup tinggi atau sangat tinggi (sejauh yang Anda bisa lakukan tanpa refactoring besar). Jika tidak, saya akan berusaha membuat cakupan sangat tinggi meskipun Anda tidak menulis kode. Ini membantu membangun hubungan dan tim baru Anda akan memperlakukan Anda dengan lebih serius.

Setelah Anda memiliki pangkalan ini tertutup, tidak ada orang waras yang akan menantang Anda. Sebagai item bonus, lakukan pembandingan mikro dan itu akan menambah kasus Anda.

Seringkali, cara Anda mengucapkan kata-kata itu sangat berarti dalam mengubah budaya kode. Menurut contoh. Atau bahkan lebih baik, tunggu sepotong kode yang dapat Anda tulis - refactor dan uji unit keluar dan biola - Anda akan didengar.

gempal
sumber
Saya tidak refactoring kode saat ini, saya hanya menulis fungsi baru, tidak yakin apakah saya harus mengikuti 'konvensi' dan mengkodekannya dalam 300 + baris monstrositas atau memecahnya menjadi potongan-potongan logis seperti biasanya saya lakukan tetapi memiliki belum dilakukan di bagian basis kode ini.
Justin
1
apakah mereka memiliki aturan untuk memastikan Anda menulis metode baru di 300+ baris? jika tidak, saya akan menuliskannya dengan cara yang benar. tetapi saya benar-benar akan pergi keluar dari jalan saya untuk memastikan saya menguji mereka termasuk cabang. Saya telah melalui pengalaman serupa dan biasanya Anda berhasil memenangkannya. Triknya adalah melakukannya dari waktu ke waktu dan membangun hubungan.
cakap
3

Jenis pertanyaan ini pada dasarnya adalah " tolong baca-baca rekan tim saya ". Orang acak di internet tidak bisa melakukan itu, jadi semua jawaban yang Anda dapatkan hanyalah pendapat pribadi orang tentang gaya penulisan kode. Konsensus adalah metode yang lebih pendek lebih disukai, tetapi Anda tampaknya sudah memikirkannya sendiri, jadi tidak perlu menyatakan kembali itu.

Jadi, basis kode saat ini tampaknya menggunakan gaya pengkodean yang berbeda dari yang Anda sukai. Apa yang harus kamu lakukan Pertama, Anda perlu mencari tahu:

  1. Apakah ini keputusan desain yang disengaja didukung oleh tim Anda saat ini?
  2. Apakah mereka ingin Anda mengikuti gaya ini?

Hanya ada satu cara untuk mencari tahu. Meminta .

Mungkin ada beberapa alasan untuk memiliki fungsi yang panjang. Bisa jadi karena tim percaya fungsi panjang lebih baik daripada beberapa fungsi pendek. Bisa juga karena kode warisan, dan tim lebih suka kode baru mengikuti desain yang lebih bersih. Jadi baik pilihan bisa mendarat Anda dalam kesulitan sebagai pengembang, jika Anda tidak berbicara dengan tim dan memahami alasan mereka.

JacquesB
sumber
1
Saya sepenuhnya setuju dan menambahkan, "Apakah Anda bisa dipecat atau dalam kesulitan karena tidak mengikuti apa yang telah dilakukan orang lain?" Maka jawabannya adalah ya! Mengikuti setiap hal buruk yang perusahaan minta Anda lakukan dan atasi.
Rob
1

Ada berbagai tingkatan "gaya".

Pada satu tingkat, biasanya bagian dari konvensi pengkodean, ini berarti di mana harus meletakkan spasi putih, garis kosong, tanda kurung, dan cara memberi nama benda (case campuran, garis bawah, dll.).

Pada tingkat lain adalah model pemrograman, kadang-kadang hal-hal seperti menghindari statika, atau menggunakan antarmuka lebih dari kelas-kelas abstrak, cara mengekspos dependensi, bahkan mungkin menghindari beberapa fitur bahasa esoterik.

Lalu ada perpustakaan dan kerangka kerja yang digunakan oleh proyek.

Terkadang akan ada batas maksimum pada ukuran fungsi. Tetapi jarang ada batas minimum! Jadi, Anda harus mencari tahu di antara hal-hal ini kekuatan mana yang dianggap penting, dan coba hormati itu.

Anda perlu mencari tahu apakah tim tersebut bermasalah dengan refactoring kode yang ada, yang harus dilakukan secara independen dengan menambahkan kode baru bila memungkinkan.

Namun, bahkan jika mereka tidak ingin memperbaiki kode yang ada, Anda mungkin dapat memperkenalkan beberapa lapisan dalam abstraksi untuk kode baru yang Anda tambahkan, artinya seiring waktu Anda dapat mengembangkan basis kode yang lebih baik dan mungkin memigrasi kode lama sebagai pemeliharaannya membutuhkan.

Erik Eidt
sumber