Saya adalah bagian dari tim konsultan yang menerapkan solusi baru untuk pelanggan. Saya bertanggung jawab atas sebagian besar ulasan kode pada basis kode sisi klien (Bereaksi dan javascript).
Saya telah memperhatikan bahwa beberapa anggota tim menggunakan pola pengkodean yang unik sampai-sampai saya dapat memilih file secara acak untuk mengetahui siapa penulis dari style itu sendiri.
Contoh 1 (fungsi inline satu kali)
React.createClass({
render: function () {
var someFunc = function () {
...
return someValue;
};
return <div>{someFunc()}</div>
}
});
Penulis berpendapat bahwa dengan menetapkan nama yang bermakna untuk someFunc kode akan lebih mudah dibaca. Saya percaya bahwa dengan menyelaraskan fungsi dan menambahkan komentar, efek yang sama dapat dicapai.
Contoh 2 (fungsi tidak terikat)
function renderSomePart(props, state) {
return (
<div>
<p>{props.myProp}</p>
<p>{state.myState}</p>
</div>
);
}
React.createClass({
render: function () {
return <div>{renderSomePart(this.props, this.state)}</div>;
}
});
Inilah yang biasanya kita lakukan (menghindari keharusan untuk lulus dan alat peraga):
React.createClass({
renderSomePart: function () {
return (
<div>
<p>{this.props.myProp}</p>
<p>{this.state.myState}</p>
</div>
);
},
render: function () {
return <div>{this.renderSomePart()}</div>;
}
});
Walaupun pola pengkodean ini benar secara teknis, mereka tidak konsisten dengan bagian basis kode lainnya atau dengan gaya dan pola yang diisyaratkan Facebook (penulis React) dalam tutorial dan contoh.
Kami harus menjaga kecepatan agar bisa tepat waktu dan saya tidak ingin membebani tim secara tidak perlu. Pada saat yang sama kita harus berada pada tingkat kualitas yang masuk akal.
Saya mencoba membayangkan diri saya sebagai pengembang pemeliharaan pelanggan dihadapkan dengan ketidakkonsistenan seperti ini (setiap komponen mungkin mengharuskan Anda untuk memahami cara lain untuk melakukan hal yang sama).
Pertanyaan:
Apa nilai yang dirasakan oleh pelanggan dan pengembang pemeliharaan basis kode yang konsisten vs. memungkinkan inkonsistensi seperti ini tetap ada dan berpotensi menyebar?
sumber
Jawaban:
Keuntungan Transfer Kode
Pola-pola berikut yang disediakan oleh perpustakaan,
React
dalam kasus Anda, berarti bahwa produk yang Anda kirimkan akan dengan mudah diambil dan dipelihara oleh pengembang lain yang juga akrab dengan React.Potensi Masalah Kompatibilitas Mundur
Beberapa perpustakaan akan mengeluarkan versi utama baru, dan kompatibilitas ke belakang mungkin terganggu jika pola Anda berbeda secara signifikan, sehingga memperlambat / menghentikan peningkatan di masa mendatang. Saya tidak yakin bagaimana
React
menangani rilis baru, tetapi saya telah melihat ini terjadi sebelumnya.Anggota Baru di Tim Mulai Menjadi Produktif Lebih Cepat
Jika Anda mengikuti apa yang disediakan oleh penulis, Anda cenderung merekrut pengembang berbakat menggunakan kerangka kerja Anda dan memulainya dengan lebih cepat dengan sistem Anda daripada mengajarkan pola baru.
Potensi Masalah yang Belum Ditemukan
Mungkin ada masalah di masa depan yang belum Anda temukan dengan pendekatan Anda, yang diselesaikan dengan pendekatan penulis.
Yang sedang berkata, inovasi selalu risiko, jika Anda merasa bahwa pendekatan Anda lebih baik dan bekerja untuk tim Anda, lakukanlah!
sumber
"rather than teaching new patterns"
- pelatihan prosedural adalah tenggang waktu yang sangat besar dengan karyawan baru. Selalu berusaha untuk meminimalkan biaya waktu dengan membonceng polaKetidakkonsistenan membuat Anda berhenti dan berpikir mengapa , di mana dan di mana :
Ketika Anda membaca bagian dari kode dan melihat bahwa ia menggunakan gaya yang berbeda dari kode yang lain, itu membuat Anda bertanya-tanya - mengapa bagian khusus ini berbeda? Apakah ada alasan khusus yang perlu saya waspadai? Ini berbahaya, karena jika memang ada alasan untuk bagian itu berbeda, Anda perlu menyadarinya atau Anda mungkin membuat beberapa bug jahat. Jadi alih-alih memikirkan masalah asli yang membuat Anda menyentuh kode itu, Anda sekarang membuang waktu untuk memikirkan mengapa itu berbeda, dan Anda tidak bisa mengetahuinya sehingga Anda pergi ke penulis asli untuk bertanya kepada mereka, membuang-buang waktu mereka juga, dan lebih buruk lagi - dalam proses Anda berdua kehilangan model mental dari masalah yang sedang Anda kerjakan.
Lipat gandakan oleh setiap pengembang lain dalam tim yang perlu menyentuh / membaca kode itu.
Saat Anda perlu menambahkan kode yang menggunakan banyak gaya, Anda harus berhenti dan memutuskan gaya mana yang akan digunakan untuk penambahan Anda. Anda harus membuat keputusan yang cukup yang penting - buang-buang waktu untuk berpikir tentang keputusan yang tidak penting.
Ketika gaya konsisten, mudah untuk menavigasi kode, karena konsistensi membantu Anda dengan cepat menemukan di mana barang berada. Dengan gaya yang tidak konsisten, bahkan grepping menjadi lebih sulit karena Anda tidak tahu gaya apa yang sedang Anda gunakan.
sumber
Kode mungkin ditulis dengan baik tetapi tidak sepenuhnya konsisten, sehingga beberapa klien tidak akan peduli. Ketika segalanya mulai memburuk, apakah Anda ingin memberi mereka ketukan lagi terhadap Anda? Jika saya menyewa perusahaan untuk mengerjakan proyek multi-pengembang dan mereka tidak menunjukkan kepada saya bahwa mereka memiliki standar pengkodean dan mengikutinya, saya akan skeptis.
Selama standar pengkodean tidak terlalu gila, seharusnya tidak sulit bagi semua orang untuk bergabung. Proyek terhenti karena orang tidak tahu kode apa yang harus ditulis atau tidak ditulis dan bukan karena mengetik dan memformat. Anda akan tahu bahwa Anda telah pergi jauh ketika membutuhkan waktu yang tidak proporsional untuk dipatuhi. Semoga ini bukan rodeo pertamamu.
Lakukan tes Anda sendiri Yang perlu Anda lakukan adalah mengalihkan tugas di tengah-tengah dari satu dev ke dev lainnya dan meminta mereka menyelesaikan file orang lain. Apakah mereka menghabiskan waktu sepenuhnya memformat ulang hal ke versi mereka? Apakah terlalu sulit untuk diikuti? Ini akan menjadi lebih buruk bagi tim pemeliharaan klien Anda.
sumber
Saya beruntung dapat memperlakukan gaya kode sama seperti saya memperlakukan gaya penulisan dalam bahasa Inggris alami. Ada banyak gaya dari bahasa Inggris percakapan, yang meniru cara kita berbicara dalam percakapan sehari-hari, ke bahasa Inggris formal, yang sering kali berat dan kaku dengan maknanya yang selalu tepat dalam artinya.
Pertimbangkan seperti apa produk akhir yang Anda inginkan dalam arti itu. Beberapa situasi sangat mendukung penggunaan struktur apa pun yang terbaik pada saat itu. Lainnya memerlukan irama dan struktur yang seragam. Ini terutama benar jika produk Anda yang terbaik seolah-olah itu ditulis dalam bahasa Inggris formal. Bahasa sehari-hari mungkin membantu dalam kasus itu, tetapi mereka mengoyak rasa produk yang menyeluruh.
Secara umum, semakin konsisten standar pengkodean Anda, semakin sedikit usaha yang harus dilakukan pengembang untuk meminta perhatian mereka pada sesuatu yang menarik. Jika Anda mendukung keragaman besar dalam standar pengkodean, pengembang harus lebih keras ketika mengumumkan bahwa mereka melakukan sesuatu yang tidak biasa atau unik. Upaya untuk mengungkapkan apa yang dianggap penting oleh pengembang sering kali dapat menaungi kisaran dinamis kode itu sendiri. Ketika ini terjadi, sangat mudah untuk membuat bug masuk karena terlalu sulit untuk melihatnya.
Di sisi lain dari argumen itu, semakin longgar standar pengkodean Anda, semakin banyak kebebasan pengembang harus menyesuaikan sintaks mereka dengan masalah. Berbeda sekali dengan argumen standar pro-coding, terlalu banyak standardisasi dapat menyebabkan struktur kode yang kaku, yang juga dapat memudahkan bug masuk.
Apa yang Anda cari adalah media bahagia tim Anda sendiri.
sumber
Seperti yang beberapa orang lain tunjukkan, ketika pengembang pemeliharaan harus pergi di belakang Anda, bagian kode dengan gaya yang berbeda akan menyebabkan mereka berhenti dan mencoba mencari tahu apa yang istimewa tentang bagian itu. Ada juga risiko yang sangat nyata dari gaya yang tidak konsisten disebarkan ke bagian lain, menghasilkan kekacauan besar nanti.
Saya mendapat kesan bahwa, jauh di lubuk hati, Anda sudah tahu jawaban untuk pertanyaan ini, dan Anda bahkan tidak akan menghadapinya jika bukan karena ini:
Ini sepertinya selalu menjadi trade-off universal ... melakukannya dengan cepat vs melakukannya dengan benar. Hanya Anda yang dapat mengevaluasi konsekuensi dari mengorbankan praktik pengkodean yang baik pada perubahan tenggat waktu pelanggan. Namun, saya harus setuju dengan JeffO ketika dia mengamati bahwa mengikuti gaya pengkodean (mungkin tidak biasa atau kontra-intuitif) tidak boleh memperlambat tim Anda secara drastis sehingga tenggat waktu tergelincir secara signifikan.
Meskipun saya sudah tahu tentang konsep ini selama bertahun-tahun, saya baru saja belajar istilah " utang teknis ." Anda benar-benar perlu mempertimbangkan utang teknis yang pada akhirnya harus dibayar jika Anda tidak mengikuti gaya disiplin sekarang.
Sayangnya, seperti yang dinyatakan eBusiness, kecuali pelanggan Anda sangat mengerti secara teknis atau akan mempertahankan kode itu sendiri sesudahnya, sulit bagi mereka untuk menghargai nilai standar pengkodean yang konsisten. Namun, setiap pengusaha yang masuk akal harus dapat memahami konsep bahwa "sedikit pemeliharaan pencegahan sekarang" (dalam bentuk pengkodean yang baik) "akan membantu menghindari biaya perbaikan yang signifikan nanti" (dalam bentuk waktu pengembang yang terbuang kemudian membersihkan kekacauan).
sumber
Jawaban yang dipilih di sini mengulangi praktik terbaik teoretis yang mudah disetujui yang merinci bagaimana kita semua menginginkan basis kode kita. Tetapi kode sebenarnya tidak pernah terlihat seperti itu. Jika Anda mencoba membuat basis kode yang sempurna, Anda pasti akan gagal. Itu bukan untuk mengatakan bahwa kita tidak boleh mencoba untuk melakukan yang lebih baik, tetapi harus ada batasan untuk seberapa jauh dari yang secara realistis dapat dicapai kita menetapkan tujuan kita.
Terlalu banyak fokus pada hal-hal kecil memiliki risiko kehilangan fokus pada masalah yang lebih penting, seperti bagaimana menyelesaikan pekerjaan dengan cara yang paling efisien secara keseluruhan.
Saya tidak akan merujuk Anda contoh pertama sebagai gaya, gaya adalah pilihan di mana tidak ada benar atau salah jelas, dalam hal ini fungsi tambahan adalah kode mengasapi tanpa terbalik. Ini hanya 2 baris tambahan, masih mudah dibaca, dan mudah diperbaiki, jadi contoh ini sendiri bukan masalah besar.
Masalah yang jauh lebih besar adalah kode mengasapi yang berbelit-belit. Fungsi wrapper, hierarki kelas, dan segala macam konstruksi lainnya, di mana kode di sekitarnya cukup kompleks sehingga tidak jelas bahwa mereka tidak melayani tujuan nyata. Jika ada kode yang jelas dalam kode, mungkin ada lebih banyak kode yang tidak jelas. Jauh lebih sulit untuk melakukan sesuatu, dan lebih sulit dikenali, tetapi juga masalah yang jauh lebih besar.
Tentang pelanggan
Pelanggan cenderung fokus untuk mendapatkan produk yang berfungsi yang memenuhi kebutuhan mereka. Bahkan jika Anda memiliki salah satu dari sedikit pelanggan yang khawatir tentang kualitas kode, itu akan menjadi prioritas sekunder, dan gagasan mereka tentang kualitas kode mungkin tidak sepenuhnya konsisten dengan Anda. Perusahaan pelanggan mungkin memiliki programmer sendiri, tetapi masih manajemen yang akan memutuskan apakah Anda melakukan pekerjaan dengan baik, dan manajemen kemungkinan besar bahkan tidak tahu apa arti kualitas kode.
sumber
Ini sangat banyak tentang keterbacaan diff. Jika gaya kode meronta-ronta, diffs menyembunyikan perubahan tanpa makna semantik pada program, dan dapat membuat penggabungan menjadi sulit atau tidak mungkin.
sumber