Bagaimana menyeimbangkan kualitas kode vs kepribadian pengembang yang kuat

15

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?

Ivo
sumber
7
Bisakah Anda menambahkan contoh dari apa yang Anda anggap "pintar", supaya kita semua berada di halaman yang sama?
BlackJack
Apa hirarki orang yang terlibat dalam ini?
2
Apa solusi pintar? Saya tidak akan merasa nyaman memberi tahu Anda cara menolak solusi jika ada kemungkinan itu sebenarnya lebih unggul dari ide Anda sendiri.
jojo
Apakah kode 'pintar' dioptimalkan secara prematur, atau digeneralisasi secara prematur? Biasanya kode terpendek menang, untuk ukuran kependekan yang sesuai (KERING atau token, bukan karakter).
kevin cline
3
Tawarkan alternatif. Kalau tidak, Anda benar-benar hanya penghalang produktivitas. Sulit untuk memberikan "kontra-argumen" untuk kritik tanpa pendekatan alternatif. Ini seperti menaruh beban pembuktian pada terdakwa. Anda meminta mereka untuk mempertahankan diri dari semua skenario tandingan.
Nicole

Jawaban:

16

Saya suka kutipan ini:

"Debugging dua kali lebih keras daripada menulis kode di tempat pertama. Karena itu, jika kamu menulis kode itu dengan cerdik mungkin, kamu, menurut definisi, tidak cukup pintar untuk debug itu." - Brian W. Kernighan

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.

Javier
sumber
Hampir -1, debugging tidak sulit, kecuali jika kode Anda berantakan dan sangat rapuh. Satu-satunya masalah dengan debugging adalah bahwa banyak pengembang tidak tahu bagaimana cara menggunakan alat debugging. Menulis kode yang sangat ulet dan sadar kesalahan adalah BANYAK lebih sulit.
Coder
Saya pikir debugging tentu lebih sulit. Pikirkan seperti ini. Jika kode awalnya ditulis dengan benar, debugging menjadi masalah karena mengujinya (unit dan integrasi) tidak menemukan cacat.
tehnyit
10

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!)

gbjbaanb
sumber
4
Tes saya adalah "dapatkah seorang programmer gradutae (mungkin 1-2 tahun lagi) mempertahankannya?" .... Itu bisa pintar, tetapi juga harus jelas dan ringkas.
mattnz
1
@ mattnz - Jika saya menggunakan tes itu, setengah dari kode yang saya tulis selama bertahun-tahun (atau orang lain dalam hal ini) akan dianggap buruk. Programmer lulusan (1-2 tahun) tidak semua orang mengambilnya. Tidak mengatakan bahwa kita harus menulis kode yang buruk; Hanya saja "ujian" itu tidak masuk akal.
Benteng
6

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.

  • Ini seperti, Anda tahu, seperti misalnya saya menemukan file sumber 31K melebihi batas ukuran yang disarankan yaitu, 30K. Pilihan saya adalah menghabiskan beberapa menit / jam berjuang untuk memaksa pemilik file untuk entah bagaimana memeras kilobyte itu keluar atau menghabiskan satu atau dua hari berpikir dan menggali untuk mengetahui bahwa, katakanlah, ada beberapa API perpustakaan yang dapat digunakan sebagai pengganti semua kode dalam file itu (sehingga hanya bisa dihapus).

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. :)

agas
sumber
2

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:

Sam, aku terkesan dengan kecerdikanmu di sini, tapi aku khawatir itu mungkin terlalu pintar. Saya ingin Anda mengerjakan pengembangan baru setahun dari sekarang alih-alih mempertahankan ini, dan saya khawatir siapa pun yang harus memeliharanya mungkin tidak sepenuhnya memahami kedahsyatannya. Saya tahu Anda benci melakukannya, tetapi saya akan menghargai jika Anda kembali ke implementasi langsung yang kita bahas.

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.

Caleb
sumber
2

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?

  • Anda mengakui bahwa Anda peduli dengan apa yang dia tulis ,
  • Anda menunjukkan rasa hormat kepadanya dengan bertanya ,
  • dengan mengutip masalah memori / fokus, Anda menyusun dan memecahnya sebuah skenario di mana kode itu harus diubah dan tidak bisa saat dia masih bekerja untuk perusahaan atau tim

(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)

ZJR
sumber
1

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.

pengguna606723
sumber
0

Seperti banyak praktik lainnya, saya pikir jawabannya tergantung .

  • Jika itu cacat maka pasti perlu diperbaiki.
  • Jika kode ini berfungsi, Anda harus menyeimbangkan nilai dari bersikeras kode tersebut diubah vs biaya masa depan dari kode pintar. Meskipun ada aturan praktis mengenai rasio antara pekerjaan pengembangan dan pekerjaan pemeliharaan, mereka akan sangat bervariasi dari proyek ke proyek. Masuk akal.
  • Pertimbangkan mengapa Anda tidak dapat meyakinkan rekan setim Anda bahwa kode ini perlu disederhanakan?
  • Anda tidak selalu harus mendapatkan semuanya sempurna. Itu berarti ulasan kode dalam loop tak terbatas dan tidak ada yang diperiksa karena tidak ada (kecuali kode saya, haha) yang sempurna.
  • Pilihan pribadi saya adalah agar pembuat kode memiliki keputusan akhir. Jelas jika mereka terus melakukan pekerjaan yang sangat buruk maka beberapa tindakan lain harus diambil tetapi seperti yang Anda katakan nilai negatif memaksa pengembang untuk mengubah kode mungkin lebih tinggi daripada keuntungan yang diperoleh dengan memperbaikinya jika ini adalah situasi yang sangat langka .
Guy Sirton
sumber
0

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:

  1. 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.

  2. 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.

  3. 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),

  4. 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.

DXM
sumber
0

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.

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.

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.

DVK
sumber
0

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.

rwong
sumber