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.
sumber
Jawaban:
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:
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:
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!
sumber
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 .
sumber
Tidak.
Dalam buku Pragmatic Programmer , penulis berbicara tentang Teori Jendela Rusak .
Teori ini menyatakan:
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.
sumber
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,
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!
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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:
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.
sumber
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.
sumber