Apa nilai aktual dari gaya kode yang konsisten

47

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?

Andreas Warberg
sumber
50
Apa nilai ortografi yang konsisten? Percepatan permanen dan konstan dalam membaca dan menulis teks. Apa nilai gaya kode yang konsisten? Mempercepat konsisten dan konsisten dalam membaca dan menulis kode. apa lagi yang kamu inginkan?
Kilian Foth
9
Ketika Anda membaca hal-hal yang Anda terbiasa dengan pola dalam apa yang Anda baca, dan datang untuk mengantisipasi bagaimana membaca hal-hal di masa depan. Jika tidak ada konsistensi seseorang tidak dapat mengantisipasi pola dan lebih banyak interpretasi kode perlu dilakukan, memperlambat pembaca.
Canadian Coder
1
Joel punya beberapa ide bagus tentang topik itu. Singkatnya, standar pengkodean yang baik membuat bug mudah dilihat. joelonsoftware.com/articles/Wrong.html
13
Saya ingin menambahkan bahwa fungsi bernama hampir selalu lebih disukai daripada fungsi anonim di JavaScript. Ketika men-debug ini membantu satu ton untuk menentukan di mana Anda berada di tumpukan.
Mike McMahon
1
@ yoniLavi Anda harus menanyakan itu pada meta.
RubberDuck

Jawaban:

48

Keuntungan Transfer Kode

Pola-pola berikut yang disediakan oleh perpustakaan, Reactdalam 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 Reactmenangani 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!

Alexus
sumber
Terima kasih atas poin luar biasa ini. Kami biasanya mengikuti pola yang disediakan oleh perpustakaan. Contoh-contoh yang saya berikan (ditemukan dalam ulasan kode) menyimpang. Saya khawatir pelanggan mungkin menolak dan meminta kami mengulangi bagian dari pengiriman kami karena itu tidak "terlihat dan terasa seperti Bereaksi". Sekarang saya tahu mengapa mereka melakukan itu.
Andreas Warberg
2
+1 "rather than teaching new patterns"- pelatihan prosedural adalah tenggang waktu yang sangat besar dengan karyawan baru. Selalu berusaha untuk meminimalkan biaya waktu dengan membonceng pola
Gusdor
1
@Alexus: Mengenai kompatibilitas ke belakang, React masih belum di versi 1.0. Versi saat ini, 0,13, tidak memecah kompatibilitas dalam beberapa cara yang cukup drastis, meskipun apakah kegagalan ini akan terjadi tergantung pada mekanisme apa yang digunakan untuk memanggil komponen Bereaksi. Memiliki aturan yang sangat konsisten untuk cara menelepon Bereaksi tidak dapat mencegah React upgrade dari melanggar kode, tetapi memperbaiki kode yang konsisten lebih mudah, lebih cepat, dan lebih dapat diandalkan. Kekhawatiran Anda tentang masalah kompatibilitas ke belakang jelas dibenarkan dalam kasus React. Misalnya, lihat komentar saya di stackoverflow.com/a/20913637/18192
Brian
53

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

Idan Arye
sumber
6
Wawasan fanstastik yang luar biasa. Mengapa beberapa pengembang tampaknya hanya 'mendapatkan' ini, dan yang lain berjuang melawannya?
Dogweather
2
Dugaan karena gaya konsisten yang diusulkan sekarang sangat tidak konsisten dengan apa yang telah mereka kerjakan dalam proyek sebelumnya. Terutama bagi mereka yang memiliki banyak pengalaman di lingkungan yang berbeda.
Kickstart
4

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.

Kami harus menjaga kecepatan agar bisa tepat waktu dan saya tidak ingin membebani tim secara tidak perlu.

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.

JeffO
sumber
2

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.

Cort Ammon
sumber
2

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:

Kami harus menjaga kecepatan agar bisa tepat waktu dan saya tidak ingin membebani tim secara tidak perlu.

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

Michael C
sumber
Pelanggan secara teknis cerdas dan kemungkinan besar akan mengambil alih pemeliharaan dan pengembangan lebih lanjut dari solusi di beberapa titik. Upaya Tanya Jawab sejauh ini berfokus pada tata letak visual dan tidak begitu banyak pada fungsionalitasnya. Setelah bug fungsionalitas mulai masuk, kami akan merasakan seperti apa pemeliharaannya. Saya pikir review kode akan lebih cepat dengan lebih konsisten (mengurangi cara baru yang mengejutkan untuk melakukan hal yang sama). Pelanggan jelas menginginkan konsistensi maksimum (tetapi mungkin tidak membayar ekstra untuk itu).
Andreas Warberg
2

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.

aaaaaaaaaaaa
sumber
Saat mengulas kode, saya mencari beberapa hal yang saya yakini sangat penting seperti manipulasi DOM langsung, string yang menghadap pengguna yang tidak dilokalkan, peluang untuk digunakan kembali (komponen yang ada, pembantu, perpustakaan pihak ketiga yang sudah dimuat, dll.), Perubahan yang tidak kompatibel atau tidak tepat untuk kode bersama, penyimpangan dari konvensi pelanggan dan tim. Nilai konsistensi gaya dan pola pengkodean tidak jelas bagi saya jadi saya tidak yakin bagaimana menanggapi orang-orang dalam ulasan kode.
Andreas Warberg
0

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.

rampok
sumber