Pada ulasan kode di tempat kerja saya telah melihat kode & pola yang saya anggap "pintar" meskipun tidak selalu menambah kualitas keseluruhan atau pemeliharaan basis kode. Saya menunjukkan ini pada tanggapan saya dan saya tidak yakin dengan argumen balasan. Saya sedikit khawatir ketika kode ini masuk ke dalam repo dan kemudian diproduksi.
Saya ingin mempertahankan tim yang kompak, jadi saya tidak ingin membuat ketegangan dengan menjadi terlalu vokal tentang reservasi saya. Saya juga ingin menciptakan produk yang hebat bagi pelanggan kami tanpa menjadi terlalu terhormat.
Secara tradisional, siapa yang memiliki kekuatan 'memveto' pada apa yang diperiksa dan bagaimana caranya?
Bagaimana kode yang berfungsi, tetapi terlalu terlibat / pandai dihapus tanpa menginjak kaki?
Jawaban:
Saya suka kutipan ini:
Di satu sisi, ini membuat Anda bosan dengan kode yang terlalu pintar, karena akan sulit untuk di-debug dan diperluas kemudian.
Di sisi lain, kode pintar yang berfungsi adalah cara yang bagus untuk belajar. Mungkin untuk seluruh tim. Bagaimana dengan mendorong penulis untuk memberikan ceramah informal kecil tentang kode kepada kolega mereka? Pastikan bahwa itu benar-benar berfungsi sebagaimana dimaksud dan itu masuk akal dalam proyek secara keseluruhan. Anda tidak ingin mengubahnya menjadi kompetisi tanpa arti!
Jika Anda tidak berpikir itu menambah nilai, maka ajukan counterchallenge bertanya: "Bagaimana Anda bisa memperbaiki bagian ini (Anda memiliki tes di tempat, kan?) Sehingga lebih mudah dibaca?" Pastikan untuk menunjukkan bahwa lebih sulit untuk membuat kode yang pintar dan mudah dibaca yang membuat nugget yang tidak dapat ditembus.
sumber
Saran saya adalah bermain bodoh, ketika waktunya untuk melakukan review kode merasa bebas untuk mengatakan Anda tidak memiliki petunjuk bagaimana cara kerjanya (jika ego Anda membutuhkan pijatan, Anda dapat mengatakan Anda tidak punya waktu untuk mencari tahu ) dan minta pengembang menjelaskannya. Setelah selesai, Anda dapat menyarankan agar ia menuliskan semua itu sebagai komentar untuk pemeliharaan di masa mendatang, dengan petunjuk yang tersirat bahwa terlalu rumit untuk dianggap sebagai kode 'baik'.
Jika kode yang bagus itu hanya sedikit terlalu rumit, kebanyakan orang akan mendapatkan petunjuk, tanpa mengatakan apa pun tentang kualitas kode atau keahlian pengembang.
PS. Jelas sebagian besar kode ini akan bersifat subyektif, jadi kode seseorang yang tidak mungkin pintar mungkin masuk akal dan bahkan mungkin algoritma standar industri untuk pengembang lain, sehingga Anda tidak dapat menuduh siapa pun secara langsung menulis kode yang buruk (kecuali jika itu jelas-jelas jelas) seperti kontraktor yang menyalin array byte ke daftar stl, meneruskannya ke rutin enkripsi dan kemudian mengubahnya kembali menjadi array byte!)
sumber
Aturan praktis saya adalah membengkokkan pedoman kualitas kode demi kepribadian pengembang yang kuat. Saya menggunakannya selalu ketika saya tidak punya waktu untuk menggali cukup dalam - penggalian seperti itu biasanya cukup sulit (lebih banyak tentang itu di bawah).
Aturan ini didasarkan pada pengalaman pribadi. Saya mulai (mungkin seperti orang baru) dengan fanatik mengikuti pedoman dan benar-benar berjuang setiap penyimpangan. Setelah beberapa waktu, saya memperoleh keterampilan yang cukup dan belajar cukup trik untuk memenangkan pertarungan semacam itu dengan relatif mudah - yang pada gilirannya memungkinkan untuk lebih fokus mempelajari dampak keseluruhan dari "kemenangan" saya. Dan dampaknya sejauh yang saya tahu agak negatif - orang-orang yang "kalah perang" menderita dan menjadi kurang produktif - dan, Anda tahu, fakta bahwa kode mereka 200% sesuai dengan pedoman kualitas tidak mengimbangi itu.
Penemuan ini membuat saya menghentikan sebagian besar pertempuran yang pada gilirannya menyebabkan lebih banyak waktu untuk menganalisis kasus-kasus yang bermasalah. Dan saya menemukan bahwa ketika saya menggali cukup dalam biasanya ada masalah desain yang menarik di suatu tempat di belakang, masalah halus (atau tidak terlalu halus) yang hanya bersembunyi di balik pertarungan kepribadian.
Penemuan seperti itu kadang-kadang mungkin tidak banyak berguna dari perspektif pengguna akhir (meskipun kadang-kadang memang bisa berdampak mendalam), tetapi harus mengakui kesenangan yang saya dapatkan ketika memecahkan kacang seperti itu membuatnya tetap layak untuk usaha ... dan sebagai icing pada pedoman kue deviasi juga hilang tanpa perlawanan. :)
sumber
Organisasi Anda harus memiliki pedoman pedoman / dokumen standar yang diperbarui secara berkala dengan masukan dari tim pengembangan. Dokumen itu dapat menjelaskan secara spesifik, seperti: cara memberi nama variabel, cara memformat kode, dan sebagainya. Dokumen tersebut juga harus menjelaskan nilai-nilai yang diharapkan organisasi untuk diadopsi oleh pemrogram dalam kode tertulis, termasuk kepentingan relatif hal-hal seperti keterbacaan, pemeliharaan, kebenaran, efisiensi, dan kepatuhan terhadap standar.
Tinjauan kode harus dilakukan menggunakan dokumen standar pengkodean itu. Jika standar pengkodean mengatakan bahwa programmer harus lebih memilih keterbacaan untuk singkat ketika keduanya dalam konflik, maka Anda akan memiliki beberapa dukungan dalam berdebat dengan kode "pintar". Jika standar tidak mengatakan itu dan Anda pikir mereka seharusnya, maka Anda dapat berdebat tentang hal itu secara abstrak pada pertemuan standar pengkodean alih-alih mencoba mencari tahu ketika ego seseorang ada di telepon.
Pada akhirnya, kadang-kadang datang ke panggilan penilaian, dan dalam kasus-kasus itu kata terakhir harus pergi ke orang yang pada akhirnya bertanggung jawab atas kode dan / atau produk. Itu biasanya seseorang seperti pengembang senior, pemimpin teknis, manajer proyek, atau direktur teknik. Jika Anda orang yang bertanggung jawab dan Anda merasa kode tertentu tidak cukup terpelihara, Anda tidak perlu takut untuk mengatakannya. Anda bisa diplomatis tentang itu:
Di sisi lain, jika Anda bukan orang yang bertanggung jawab, maka yang terbaik yang dapat Anda lakukan adalah menjelaskan posisi Anda dengan jelas dan mencoba meyakinkan anggota tim lainnya. Jika Anda tidak mendapatkan dukungan dari manajer, maka terimalah itu bukan panggilan Anda dan lanjutkan.
sumber
Di tempat Anda (dan saya, kadang-kadang, adalah salah satu dari orang pintar itu) saya tidak akan menghapusnya, tetapi meminta secara pribadi kepada penulis cerdas untuk mendokumentasikannya dengan sangat baik dalam komentar, dan jika mungkin, untuk memasukkan beberapa diskusi tentang alternatif dan tulisan-tulisan sederhana yang bisa dia gunakan, dengan contoh-contoh.
Saya akan menggarisbawahi ini untuk yang terbaik, karena bahkan dia mungkin tidak akan mengingat semua bit dan bobs yang ada, di baris itu, dalam waktu dua bulan.
Dia mungkin akan menjatuhkan kode pintar demi yang paling sederhana, begitu dia dipaksa untuk menulisnya, sebagai contoh.
Mengapa itu berhasil?
(tanpa singgungan terakhir permintaan semacam ini dapat diterima sebagai percobaan, di pihak perusahaan, untuk membuat komoditisasi pemrogram , membuatnya dapat dipertukarkan dengan monyet kode lain kapan saja)
sumber
Dalam pengalaman saya, biasanya sangat sulit untuk mendapatkan kode yang mencukupi semua persyaratan dari basis kode.
Namun, lain kali kode tersebut harus dipertahankan, Anda dapat dengan mudah berargumen penggantiannya sebagai langkah penghematan biaya di masa depan karena kode lama lebih sulit untuk dipelihara.
Sejauh kekuatan veto, manajemen jelas memilikinya.
Terkadang mereka adalah tim atau komite yang bertanggung jawab atas kualitas kode, dalam hal ini mereka akan memiliki kekuatan ini juga.
Ini juga akan sangat membantu jika Anda memberikan contoh pola 'pintar'. Mungkin Anda hanya bereaksi berlebihan ...
'pintar' hampir tidak pernah merupakan hal buruk dalam buku saya, tetapi saya dapat setuju bahwa akan ada kemiringan yang licin antara pintar dan berbelit-belit.
sumber
Seperti banyak praktik lainnya, saya pikir jawabannya tergantung .
sumber
Saya pasti bisa menghubungkannya dengan pertanyaan ini. Saya saat ini memimpin teknis untuk 2 tim dan itu tugas saya untuk memastikan kode yang kami hasilkan dapat dibaca dan dipelihara mungkin. Pada saat yang sama saya dikenal menghasilkan beberapa kode "pintar" dan saya tahu sebagian besar rekan satu tim saya akan sangat kesulitan mengikutinya.
Beberapa pengamatan yang bisa saya tawarkan:
Tim Anda membutuhkan satu pemimpin yang akan membuat keputusan akhir ketika ada perselisihan. Dalam rilis terakhir saya berada di tim tanpa kepemimpinan dan itu mengerikan. Semuanya menjadi argumen, dan jika Anda memiliki sedikit orang dengan kepribadian yang kuat, tidak satu pun dari mereka yang mau mengalah. Jika Anda benar-benar memiliki petunjuk, terlepas dari keputusan mana yang dipilih, semua orang di tim HARUS memahami bahwa apa yang dikatakan oleh pemimpin itu. Itu sebabnya manajemen menjadikannya pemimpin.
Membuat orang senang adalah hal yang sangat penting. Karena itu, alih-alih mendorong seluruh tim ke sudut pandang Anda, hanya mendorong mereka di sana. Jelaskan prinsip SOLID, jelaskan pentingnya kelas / metode / antarmuka kecil dan kohesif dan ulangi hal-hal ini setiap kali Anda melihat mereka dilanggar (yaitu dalam tinjauan kode). Pada saat yang sama, jangan membuat mereka menulis ulang setiap hal yang tidak Anda sukai. Pada akhirnya, Anda perlu keseimbangan antara ekspresi pribadi dan mengikuti standar grup. Semoga, keduanya akan bertemu ketika preferensi pribadi bergeser ke arah bagaimana kelompok secara umum beroperasi.
Saya percaya jauh lebih penting untuk memiliki antarmuka kelas yang bersih dan mudah dipahami, daripada tidak pernah memiliki kode "pintar". Sebagai contoh, kami memiliki kelas yang mengelola daftar entri yang mencari 3 cara berbeda. Saat ini ia hanya menggunakan pencarian linear untuk semua pencarian yang bekerja pada skala kecil, tetapi karena kelas ini berada pada level yang sangat rendah, saya melihatnya tidak scaling dengan sangat baik. Saya akan menggantinya dengan kelas yang berbeda, yang menggunakan wadah Boost Intrusive. Setiap elemen akan mendukung ditempatkan ke masing-masing indeks secara bersamaan dan semua pencarian akan dilakukan dalam O (sqrt (N)). Ya itu akan jauh lebih rumit di dalam dan banyak orang tidak suka Boost, tetapi di luar itu akan tetap 3 metode: Tambah, Hapus, Dapatkan. Intinya adalah bahwa orang dapat menulis kode apa pun yang mereka inginkan (dengan alasan),
Pertahankan gagasan kepemilikan kode. Meskipun kadang-kadang sulit untuk dicapai karena orang yang berbeda mungkin perlu menambah / memodifikasi beberapa kode. Ketika kode ditulis, pengembang asli adalah penjaga utama kode itu. Itu tidak berarti tidak ada orang lain yang bisa menyentuhnya. Jika orang lain memodifikasi kode mereka, itu bagus, tetapi pada akhirnya pengembang asli akan memeriksanya dan tetap bertanggung jawab atas apa pun yang terjadi di sana. Apakah kode itu sederhana atau pintar, itu adalah bayinya. Jika / ketika, seperti yang Anda prediksi, bug mulai menumpuk karena keputusan desain / pengkodean yang dibuat, alih-alih hanya memperbaiki bug saat masuk, duduklah bersama pengembang itu (yang seharusnya memperbaiki semua bug itu) dan renungkan keputusan-keputusan itu untuk melihat bagaimana keputusan itu dibuat secara berbeda.
sumber
Saya telah menghabiskan bertahun-tahun memimpin dan mengelola tim pengembangan. Secara alami, saya sedikit OCD dalam hal kode dan sangat hitam-putih. Saya telah belajar dari pengalaman bahwa memilih pertempuran Anda adalah salah satu keterampilan paling sulit untuk dipelajari sebagai pemimpin tim. Ya, standar itu penting. Ya, keterbacaan dan pemeliharaan sangat penting. Ya, kita semua harus berusaha untuk menulis kode yang seragam dan sesuai standar. Pengembang adalah manusia ... bukan alat pembuat kode. Kami memiliki kepribadian, pendapat, kami bosan, dan kami ingin belajar hal-hal baru.
OKE ... jadi mereka tidak menambahkan, tetapi apakah mereka mengurangi? Apakah kita berbicara hanya masalah preferensi pribadi dalam gaya pengkodean, atau apakah kode yang ditulis sama sekali tidak perlu (misalnya menggunakan pohon ekspresi dan refleksi hanya karena menyenangkan untuk menggunakan pohon ekspresi dan refleksi)? Jika yang pertama, biarkan saja. Bagian dari kesenangan menjadi pengembang adalah menghadirkan solusi kreatif untuk masalah. Mungkin (dan kebanyakan dari kita tidak suka mengakui hal ini), kita kadang merasa terintimidasi oleh pendekatan yang tidak kita pahami, dan entah tidak mau bertanya atau tidak memiliki energi tambahan untuk mempelajari pendekatan baru.
Sekarang, ketika kreativitas mengarah pada kode yang tidak perlu dan kompleksitas yang sama sekali tidak dapat dibenarkan, maka dengan segala cara bersikap vokal dan sampaikan pendapat Anda. Menjadi pemain tim itu penting, tetapi menjadi (dan meminta orang lain) bertanggung jawab. Ulasan kode adalah tentang akuntabilitas, serta jaminan kualitas dan pembelajaran. Anda akan menginjak beberapa langkah, tetapi jika Anda merasa memiliki argumen yang kuat mengapa usaha (uang) harus dihabiskan untuk menulis ulang kode kerja DAN ego harus diremukkan dalam proses DAN Anda ingin mengambil risiko tergencetnya antusiasme seseorang terhadap kerajinan mereka , maka Anda tidak harus menghindar untuk menaruhnya di atas meja. Jika Anda adalah pemimpin tim, ini adalah pekerjaan Anda. Waspadai dampaknya, dan lakukanlah. Jika Anda bukan pemimpin tim dan tidak memiliki wewenang, maka serahkan kepada tim untuk memutuskan.
Cara terbaik untuk menanamkan akuntabilitas dalam tim Anda adalah dengan mendorong orang lain agar Anda bertanggung jawab. Jika Anda tetap berpikiran terbuka dan tidak mematikan orang ketika mereka menyarankan perbaikan pada kode Anda, Anda mungkin menemukan mereka lebih mudah menerima saran Anda.
sumber
Dari pengalaman pribadi, ketika ini terjadi saya akan meminta izin untuk menjadi sukarelawan unit tester permusuhan untuk menulis tes untuk menyiksa implementasi yang tidak dikenal.
Saya akan berusaha sangat keras untuk benar-benar memahami cara kerja kode, dan juga mencoba menyelidikinya dengan berbagai cara.
Perhatikan bahwa ini adalah komitmen waktu. Mungkin jam, atau puluhan jam, atau bahkan bagian yang baik dalam seminggu. Apakah dibenarkan tergantung pada apakah kompleksitas kode tersebut sepadan dengan kompleksitas persyaratan.
Jika saya tidak menang, yaitu jika kode bertahan dari banyak tes, saya akan meyakinkan diri saya bahwa mungkin implementasinya benar-benar lebih tercerahkan daripada saya, dan saya akan mendukung inklusi ke dalam produk utama.
Bergantung pada metodologi kontrol sumber, kode mungkin harus secara sementara berkomitmen ke dalam sistem kontrol sumber (mungkin dalam cabang) sebelum fase pengujian ini dapat dimulai.
Jawaban saya diwarnai oleh pengalaman saya menggunakan OpenCV. Ada algoritma yang jauh lebih canggih daripada yang bisa diimplementasikan oleh programmer mana pun; bahkan bukan PhD - mungkin beberapa persen dari PhD. Jika kode ini yang baik, Anda harus percaya bahwa, bertindak melawan naluri Anda sendiri dan prasangka, bahkan jika Anda tidak memiliki sarana yang efektif untuk mengukur tingkat kepercayaan.
sumber