Apakah ada cara untuk mendukung gaya pengkodean yang berbeda dalam tim pengembangan

13

Masalahnya: Dua pengembang => tiga pendapat tentang indensi, kawat gigi pada baris baru atau tidak, dll.

Kami biasanya bekerja dengan tiga atau empat orang di proyek kami dan masing-masing memiliki gaya kode sendiri. Saya tahu, solusi umum adalah menyetujui gaya kode, semua orang harus menggunakan, tetapi saya tidak ingin memaksa programmer kreatif dalam setelan yang tidak cocok untuk mereka.

Jadi pertanyaannya adalah: Apakah ada cara untuk membiarkan setiap programmer menjalani gayanya sendiri, tetapi memiliki basis kode umum di dalam repositori? Saya memikirkan beberapa plugin git / svn / apa pun, yang mengubah gaya pribadi dan umum saat checkout dan commit. Tampak bagi saya, bahwa bagian yang sulit dalam pendekatan ini adalah untuk mendukung perbedaan yang tepat antara versi file

Kai
sumber
1
Ada pemformat kode otomatis yang tersedia untuk sebagian besar bahasa, tetapi untuk beberapa (misalnya C ++) sangat sulit untuk membuatnya sepenuhnya dapat diandalkan karena kompleksitas parsing bahasa.
Joris Timmermans
5
Ide yang sangat buruk. Minta tim Anda untuk membuat standar konsensus, lalu buat mereka menerapkannya. Jika anggur, minta mereka untuk tumbuh sedikit.
Clement Herreman
8
Mungkin komentar yang sangat umum lainnya perlu dibuat di sini: apakah ada masalah aktual dengan perbedaan dalam gaya kode? Jangan memperbaiki sesuatu yang tidak rusak!
Joris Timmermans
5
"tapi saya tidak ingin memaksa programmer kreatif dalam setelan yang tidak cocok untuk mereka" - jika programmer Anda tidak dapat beradaptasi dengan hal-hal sederhana seperti perubahan indentasi atau perubahan gaya penyangga, Anda perlu mempekerjakan pengembang yang lebih baik. Setelah Anda menggunakan gaya baru selama satu atau dua minggu, Anda melupakannya.
Mike Weller
4
@ MikeWeller Tidak bisakah sebaliknya diperdebatkan? Konvensi penamaan adalah satu-satunya hal yang saya anggap penting karena membuatnya lebih mudah untuk mengidentifikasi tujuan sesuatu di luar konteks definisi. Selama seseorang semi-konsisten styling untuk kejelasan di mana blok bersarang, mulai dan berakhir, saya tidak pernah mengerti mengapa itu harus menjadi masalah besar.
Erik Reppen

Jawaban:

20

Tidak, Anda harus membuat standar. Jika Anda memiliki anggota B perubahan (baik dengan alat IDE otomatis, atau secara manual) seluruh tim anggota kode A ditulis, itu akan dilakukan dan ditampilkan sebagai perubahan.

Ini adalah sesuatu yang hampir setiap tim hadapi dan standar "dipaksa" karena alasan ini. Saya sarankan Anda mengikuti standar otoritas bahasa sebagai dasar dan mengadopsinya sesuai dengan tim Anda.

Memiliki gaya pengkodean yang konsisten juga akan membantu dalam pemeliharaan proyek dan mengurangi hambatan masuk bagi orang baru yang bekerja pada kode.

Sam
sumber
11

Tidak, Anda perlu mendefinisikan standar pengkodean (lebih disukai yang sudah ada) dan meminta pengembang Anda untuk mematuhinya. Menjadi seorang programmer profesional berarti Anda dapat beradaptasi dengan standar pengkodean apa pun yang digunakan dalam proyek yang sedang Anda kerjakan.

JesperE
sumber
2
+1. Biarkan mereka memilih satu, tetapi buat mereka menerapkannya.
Clement Herreman
Saya berharap pemformatan adalah bagian dari standar bahasa pemrograman, sehingga program tidak hanya "valid" atau "tidak valid", tetapi memiliki status ketiga juga, "valid dan diformat dengan baik".
JesperE
4
itu (kurang lebih) kasus dalam python, di mana lekukan adalah semantik bahasa.
Clement Herreman
2
Go tidak sepenuhnya menegakkan itu, tetapi dilengkapi dengan pemformat kode sumber bawaan go fmt,. Lihat golangtutorials.blogspot.fr/2011/06/...
Clement Herreman
1
@JesperE Itu adalah diimplementasikan di Python dengan PEP8 dan alat yang sesuai, inventively bernama PEP8 .
phihag
8

YA, itu bisa bekerja selama semua style masuk akal dan orang tidak berkeliling mengubah kode orang lain untuk mencocokkan preferensi mereka dan / atau mencampur gaya dalam satu file kode.
Ini tidak ideal, tetapi tidak berbeda dengan mewarisi kode lama yang dibuat untuk "standar" yang berbeda dari Anda sendiri dan harus mengintegrasikannya dengan basis kode Anda.
Jadi, jika Anda harus melakukannya, beberapa pedoman:

  • tidak ada perubahan kode gaya berbeda untuk mencocokkan preferensi Anda, itu memerlukan waktu dan memperkenalkan bug
  • tetap konsisten dalam setiap file tunggal. Jadi jika gaya A awalnya digunakan untuk menulisnya, semua orang akan menggunakan gaya A saat memodifikasinya
  • lakukan membuat standar umum untuk antarmuka publik Anda, jadi untuk semua yang terpapar ke luar (dan ya, subkomponen lain dari suatu sistem adalah luar).
jwenting
sumber
2
Saya akan menambahkan bahwa pengembang profesional sering cenderung menggabungkan gaya masing-masing. Mereka akan melakukan diskusi informal singkat tentang beberapa hal dan mencapai kesepakatan.
Joris Timmermans
Bekerja dengan baik, dengan peringatan bahwa penggunaan pemformatan ulang kode otomatis harus dijaga agar tetap minimum (jika tidak langsung dilarang).
grahamparks
2
"tidak ada perubahan kode dengan gaya berbeda yang sesuai dengan preferensi Anda, itu menghabiskan waktu dan menimbulkan bug" - sangat berlawanan - mencocokkan standar yang tidak terotomatisasi dengan tangan sangat menyia-nyiakan waktu, menjalankan pemformat kode, melakukan perubahan sebagai 'diformat dengan opsi - apa pun "maka membuat perubahan fungsional jauh lebih cepat.
Pete Kirkham
Saya pikir jawaban ini mungkin telah melewatkan bagian "pemformatan otomatis" dari pertanyaan?
Joris Timmermans
Berbagai gaya antara file jauh lebih sulit untuk ditangani daripada hanya memiliki gaya yang konsisten.
Andy
4

Jawaban singkatnya adalah Tidak.

Sementara pendapat harus dinilai dalam pekerjaan terutama dalam pekerjaan berbasis pengetahuan seperti Pengembangan Perangkat Lunak, pengembang harus menyadari bahwa pendapat hanyalah pendapat dan bahwa mereka ada di sana untuk menulis perangkat lunak tidak berdebat tentang standar lekukan garis mana yang terbaik.

Tujuan dari suatu dokumen standar harus untuk menegakkan / menyarankan seperangkat standar / konvensi standar pengkodean yang membahas

  1. Item Tata Letak seperti tabbing, indentation, penggunaan {, (,
  2. Variabel, Objek dan nama Fungsi yaitu CamelCase, notasi Hongaria
  3. Penanganan Pengecualian bagaimana / kapan / di mana itu dilakukan
  4. Komentar kode. Apakah Anda selalu merujuk dokumen desain, nomor bug, dll

Dokumen standar membantu memastikan bahwa kode mudah dibaca, dipelihara, dan konsisten dalam konvensi.

Ini sangat berharga ketika meninjau kode sebelum checkin, men-debug kode orang lain atau memodifikasi kode beberapa tahun setelah pengembang asli meninggalkan perusahaan.

Biasanya ketika membuat dokumen Standar Pengkodean, saya meninjau standar industri untuk bahasa yang saya gunakan (C, C #, SQL), menggunakan standar yang paling tepat, mengedarkan ke pengembang yang paling senior / berpengaruh untuk memberikan komentar, memasukkan komentar yang sesuai dan kemudian lepaskan dokumen.

armitage
sumber
1
Dalam praktik yang sebenarnya, banyak toko memiliki satu pengembang yang biasanya Old Hand atau PrimaDonna yang tampaknya senang menciptakan Formatting Holy Wars untuk semua orang yang berurusan. Profesional == Apapun yang saya katakan. Apapun yang kalian katakan == Non profesional. Dan kemudian berubah. Saya telah melihat standar pengkodean yang memerintahkan hal-hal kotor seperti "Gunakan banyak variabel global, jangan pernah membuat kelas baru, hindari pemrograman berorientasi objek dengan segala cara, dan jangan ubah apa pun, selamanya". Sayangnya tidak ada batasan untuk apa yang orang coba menjejalkan ke dalam lingkup sesuatu yang disebut "standar pengkodean".
Warren P
4

Memformat ulang kode secara otomatis sebelum dilakukan ke sistem kontrol versi Anda dimungkinkan secara teori.

Namun , ada satu masalah besar: alat pemformatan kode otomatis tidak dapat diandalkan 100%. Dengan demikian, Anda sebenarnya bisa memperkenalkan masalah dalam kode Anda dengan sistem ini. Dalam benak saya, itu membunuh ide. Itu selalu lebih penting untuk memiliki kode fungsional daripada kode gaya yang benar!

Jika proyek ini dikotak-kotakkan, dan sebagian besar kode cenderung "dimiliki" oleh masing-masing programmer, maka boleh saja membiarkan mereka menggunakan gaya mereka sendiri (sesuai alasan). Namun, jika beberapa orang sering mengerjakan potongan kode yang sama, mungkin perlu untuk menerapkan gaya.

Berikut ini adalah diskusi serupa tentang Stack Overflow .

Komunitas
sumber
2
Perhatikan jawaban yang diterima pada diskusi tertaut juga!
Joris Timmermans
1

Satu arah secara otomatis memformat ulang kode dapat menjadi solusi yang bisa diterapkan jika Anda:

  1. Temukan autoformatter yang benar-benar berfungsi untuk konvensi yang ingin Anda terapkan dan bahasa pemrograman Anda.
  2. Dapat melakukannya dengan pra-komit sehingga format ulang tidak muncul di log perubahan dicampur dengan dan tidak dapat dibedakan dari perubahan fungsional yang sebenarnya.
  3. Kelola agar tim Anda menyetujui konvensi mana yang harus diterapkan (karena secara umum tidak ada "jalan kembali" pada saat check-out ke preferensi pribadi pengembang, setidaknya tidak seperti yang saya ketahui).

Tidak ada yang benar-benar mudah dilakukan dalam banyak kasus, jadi pertimbangkan memilih pertempuran Anda di sini! Saya telah melihat tim melakukan ini dengan sukses untuk proyek C # /. NET di mana pemformatan ulang telah terjadi pada PC pengembang, sehingga dimungkinkan dalam beberapa keadaan.

Joris Timmermans
sumber
1

tentu saja kamu bisa. Ini semua tentang tidak berkeringat hal-hal kecil.

Satu-satunya standar yang penting adalah "menjaga perubahan Anda dengan gaya yang sama dengan kode yang ada". Selama Anda dapat menyesuaikan diri dengan gaya pengkodean yang bukan pilihan Anda, maka Anda dapat bekerja dengan gaya pengkodean apa pun.

Jadi apa masalahnya dengan bekerja dalam 3 gaya berbeda di perusahaan yang sama. Pengembang Anda perlu memahami ini, bahwa menulis kode dengan cara yang mereka sukai adalah menemukan kode mereka, tetapi begitu mereka membuat perubahan pada file yang berbeda yang menggunakan gaya yang berbeda, mereka harus mempertahankan gaya itu (atau itu akan benar-benar terlihat buruk) . Pemformatan ulang tidak diizinkan (atau mereka hanya akan memformat ulang secara terus-menerus dan scm diff tidak akan berguna) (dan jika Anda melakukan ini, maka format otomatis harus digunakan).

Kemungkinannya, begitu mereka menyelesaikannya, mereka akan mencapai beberapa konsensus tentang gaya mana yang akan digunakan atau sebagian besar gaya mereka akan melayang bersama. Jika mereka akan kekanak-kanakan tentang hal itu dan akan memformat ulang kode satu sama lain setiap saat, maka sudah saatnya untuk mengunduh standar dari internet dan meminta mereka menggunakannya. Anda mungkin ingin melakukan ini, hanya untuk melambaikannya di wajah mereka sebagai kartu "bermain bagus atau yang lain".

gbjbaanb
sumber