Evolusi dalam standar pengkodean, bagaimana Anda menghadapinya?

12

Bagaimana Anda menangani evolusi dalam panduan standar / gaya pengkodean dalam proyek untuk basis kode yang ada? Katakanlah seseorang di tim Anda menemukan cara yang lebih baik untuk instance objek dalam bahasa pemrograman. Bukannya cara lama itu buruk atau bermasalah, hanya saja cara baru kurang verbose dan terasa jauh lebih elegan. Dan semua anggota tim sangat menyukainya. Apakah Anda mengubah semua kode yang ada?

Katakanlah basis kode Anda adalah sekitar 500.000+ baris kode. Apakah Anda masih ingin mengubah semua kode yang ada? Atau apakah Anda hanya akan membiarkan kode baru mematuhi standar baru? Pada dasarnya kehilangan konsistensi?

Bagaimana Anda menghadapi evolusi dalam standar pengkodean pada proyek Anda?

Ward Bekker
sumber

Jawaban:

16

Ada standar pengkodean untuk membuat tim lebih produktif. Secara teori, mereka membuat kode lebih mudah untuk dipahami, diubah, dan diuji. Dalam praktiknya, mereka dapat menciptakan sejumlah meta-kerja yang berbahaya; tim menulis ulang kode yang sudah ada berulang kali untuk mendapatkan solusi yang paling benar dan elegan. Sayangnya, masalah meta-work tampaknya lebih buruk pada tim-tim di mana setiap orang terlibat, bersemangat, dan terobsesi untuk melakukan hal yang benar.

Sebagai konsultan yang berpindah dari satu proyek ke proyek lainnya, saya telah menemukan bahwa disiplin yang sangat baik dengan standar pengkodean yang kaku memberikan kontribusi yang jauh lebih sedikit bagi keberhasilan proyek daripada pengembang yang hebat yang tertarik pada hasil. Gaya pengkodean yang tidak konsisten merupakan gangguan kecil bagi pengembang yang luar biasa. Mereka produktif dengan atau tanpa konsistensi. Memang, jika mereka menemukan kode yang tidak konsisten mereka akan bertanya tentang saat inistandar dan tetap dengan itu. Mereka tidak akan, bagaimanapun, bersikeras memperbarui setiap baris kode dalam proyek ke standar saat ini. Mereka tidak bersikeras karena mereka telah melihat praktik terbaik datang dan pergi. Cara yang benar untuk melakukan sesuatu hari ini tidak sama dengan cara yang benar untuk melakukan sesuatu besok. Jika ya, standar pengkodean Anda tidak akan berkembang. Jadi, jika cara yang benar dalam melakukan sesuatu berubah seiring waktu, mungkin definisi kita tentang "benar" rusak.

Itu tidak berarti standar tidak penting. Perlu diingat bahwa tujuan standar adalah produktivitas. Jika Anda tidak dapat menjamin penulisan ulang ke standar baru akan membayar untuk dirinya sendiri dalam jangka panjang, maka jangan buang waktu untuk itu. Jauh lebih mudah untuk membenarkan standar baru dalam kode baru atau refactored. Keanggunan memang keren tapi hasilnya tidak sama.

Corbin March
sumber
6

Apa yang kami lakukan adalah evolusi (bukan revolusi) untuk basis kode juga, kami akan menggunakan standar yang diperbarui ketika;

  • kode baru ditulis
  • kode di refactored
  • bug diperbaiki
  • porsi baru ditambahkan ke kelas yang ada

Adalah penting bahwa basis kode Anda konsisten, jadi jika perubahan membuka kemungkinan kebingungan antara kode gaya "lama" dan "baru", mungkin lebih baik untuk menyimpan pembaruan standar pengkodean Anda ke proyek berikutnya.

rsp
sumber
3

Pertama-tama, saya tidak akan memasukkan "praktik terbaik" seperti itu di (bagian wajib dari) pedoman pengkodean. Mereka mungkin disebutkan, misalnya dalam lampiran, sebagai contoh bagaimana Anda bisa melakukan sesuatu, tetapi tidak bahwa itu harus dilakukan seperti itu.

Yang mengatakan, ada dua kasus yang perlu dipertimbangkan untuk perubahan ke standar pengkodean:

  1. Perubahan yang tidak memengaruhi keterbacaan, bahkan jika kode lama dan baru dicampur tanpa memperbarui kode lama.
    Perubahan ini dapat ditambahkan ke standar pengkodean segera dan harus dipertimbangkan berlaku untuk semua kode baru dan yang dimodifikasi. Kode lama harus diadaptasi secara bertahap jika waktu memungkinkan dan perubahan di area tersebut sedang dibuat.
    Contoh perubahan semacam ini, yang sebenarnya saya temui, adalah perubahan dalam pernyataan hak cipta di awal setiap file.
  2. Perubahan yang menurunkan keterbacaan jika kode lama dan baru dicampur.
    Perubahan-perubahan ini harus diterapkan ke seluruh basis kode dalam satu langkah, atau harus dipertimbangkan kembali jika benar-benar diperlukan.
    Contoh dari perubahan semacam ini adalah perubahan indentasi atau penempatan brace.
Bart van Ingen Schenau
sumber
2

Ini benar-benar harus bergantung pada jenis produk yang Anda buat:

  • Untuk aplikasi komersial yang ditulis sendiri dan Anda disebarkan kepada pelanggan, tujuan utama Anda adalah pendapatan. Selama kode lama tidak bermasalah maka tidak masalah bahwa standar pengkodean baru telah berkembang, Anda harus berkonsentrasi dalam menambahkan fitur baru ke produk Anda dan menghasilkan pendapatan. Dengan segala cara, sesuaikan standar pengkodean baru untuk kode baru, tetapi mengubah semua kode yang ada akan membuang-buang waktu.
  • Jika Anda mengembangkan produk sumber terbuka, atau produk di mana banyak perusahaan (bahkan mungkin klien Anda) akan melihat dan bekerja pada sumbernya, maka pembacaan kode menjadi jauh lebih penting dan dalam hal ini, keputusan yang masuk akal harus dibuat tergantung pada tepatnya berapa banyak kode yang perlu diubah dan apa manfaatnya dalam jangka panjang. Meskipun kita semua menyukai kode cantik, kenyataannya adalah bahwa untuk perusahaan komersial yang berurusan dengan sumber tertutup, terus-menerus mengadaptasi standar baru akan berarti bahwa Anda akan kehilangan pendapatan dalam jangka panjang.
mrwooster
sumber
1
Saya akan menambahkan bahwa itu juga tergantung pada cakupan tes Anda. Saya telah memfaktorkan ulang beberapa 10.000 lebih baris yang cukup besar dengan banyak kepercayaan diri karena fungsionalitas kritis dicakup oleh integrasi dan tes unit.
Martijn Verburg
@ Martijn - Poin bagus, ini juga sangat benar.
mrwooster
0

Secara pribadi, saya akan memilih untuk menjaga kode lama seperti itu, dan mengikuti standar baru dari apa pun yang Anda lakukan baru. Lebih khusus lagi, saya tidak akan menggunakan standar ganda di old.c. Tetapi jika saya akan membuat new.c, itu bisa menggunakan sintaks yang lebih baru, lebih halus :)

Barun
sumber
Bisakah Anda menjelaskan alasan di balik pilihan itu?
Ward Bekker
Uh ... bisa dibilang, ini intuisi. Berdasarkan apa yang dikatakan mrwooster di atas, jika ini adalah aplikasi komersial, saya tidak akan membuang waktu saya hanya untuk melakukan beberapa perubahan kosmetik. (Ingat, fungsi tetap sama). Selain itu, katakanlah, perubahan tidak hanya bagaimana Anda membuat instance objek. Tetapi juga, katakanlah, bagaimana Anda mengakses metode itu. Maka banyak kode yang perlu diperbaiki, dengan peluang besar untuk memperkenalkan bug. Jadi, lebih baik biarkan orang tua itu tetap di sana.
Barun