Kami memiliki tim pengembang kecil (hanya 3 pengembang) dan kami baru saja mendapat anggota tim baru. Walaupun dia adalah seorang pembuat kode yang cerdas, gaya pengkodeannya benar-benar berbeda dari kita. Basis kode kami yang ada sebagian besar berisi kode yang dapat dibaca, bersih, dan dapat dipelihara, tetapi anggota tim baru dengan cepat mengubah banyak file, memperkenalkan peretasan dan pintasan yang jelek, menggunakan definisi di semua tempat, menambahkan fungsi di tempat yang salah, dll.
Pertanyaan saya adalah apakah orang lain pernah mengalami situasi seperti itu sebelumnya, dan jika ada yang punya tips tentang cara berbicara dengannya.
coding-style
coding-standards
pengguna3287
sumber
sumber
Jawaban:
Saya bekerja dengan tim yang tumbuh dari 2 pengembang menjadi 10 dalam waktu kurang dari setahun. Saya nomor 3, dan yang pertama mengangkat masalah standar pengkodean. Dua pengembang asli telah bekerja berdampingan selama beberapa tahun dan mereka telah mengadopsi standar umum yang tampak asing bagi saya. Kami memiliki masalah yang sama persis dengan yang Anda gambarkan.
Apa yang kami lakukan adalah:
Meneliti standar pengkodean
Kami menghabiskan beberapa hari memeriksa proyek sumber terbuka yang sudah mapan. Kami tahu tim akan berkembang pesat dan kami mencari solusi nyata berdasarkan proyek nyata bukan beberapa pedoman umum. Kami juga tidak peduli dengan standar pengkodean yang optimal, tetapi untuk seperangkat aturan dan pedoman yang masuk akal dan tidak menyerukan refactoring semua basis kode kami. Kami mencari peretasan standar pengkodean jika Anda mau.
Kami bertiga memutuskan bahwa standar pengkodean terbaik di luar sana untuk proyek PHP yang mapan adalah yang diikuti oleh Zend Framework. Untungnya orang-orang Zend Framework menyediakan dokumen standar pengkodean yang sangat komprehensif .
Menciptakan standar pengkodean kita sendiri
Tentu saja menerapkan standar pengkodean proyek lain pada proyek kami karena tidak masuk akal. Kami menggunakan dokumen Zend Framework sebagai templat:
Jadi kami memiliki dokumen yang cukup besar di tangan kami, disimpan di wiki mewah kami , itu adalah bacaan yang bagus, disetujui oleh kita semua. Dan sama sekali tidak berguna dengan sendirinya.
Tetap setia pada janji kami
Basis kode kami pada saat itu adalah sekitar 1 * 10 ^ 6 sloc. Kami tahu bahwa karena kami mengadopsi standar pengkodean formal, kami harus mulai refactoring kode kami, tetapi pada saat itu kami ditekan dengan masalah lain. Jadi kami memutuskan untuk hanya memperbaiki perpustakaan inti kami, hanya 5 * 10 ^ 3 sloc.
Kami menugaskan salah satu dari kami untuk menjadi master standar pengkodean (kami menggunakan kata-kata kotor lokal sebagai pengganti master ) dengan tanggung jawab memeriksa dan menegakkan standar. Kami mendaur ulang peran setiap beberapa sprint. Saya yang pertama, dan itu banyak pekerjaan, karena saya harus memantau hampir setiap komitmen.
Kami memiliki beberapa diskusi baru dan tambahan kecil pada dokumen asli selama masa jabatan saya, dan akhirnya kami memiliki dokumen yang agak stabil. Kami mengubahnya setiap sekarang dan kemudian tetapi sebagian besar dari perubahan ini adalah pada fitur baru dari bahasa, karena PHP 5.3 adalah rilis utama di semua kecuali nama.
Berurusan dengan pria baru
Ketika orang baru berikutnya tiba, saatnya menguji standar pengkodean kami. Setelah pengantar kecil untuk basis kode kami, kami memintanya untuk mengevaluasi dokumen standar pengkodean kami. Dia hampir menangis. Tampaknya dia melakukan segalanya secara berbeda.
Karena saya adalah master standar pengkodean pada saat itu, terserah saya untuk mengevaluasi masukannya dan merevisi dokumen yang sesuai. Usulannya adalah:
Untuk beberapa minggu ke depan dia diberi tugas sederhana: Membawa beberapa bagian basis kode kami dengan standar terkini. Saya harus hati-hati memilih bagian-bagian itu berdasarkan beberapa aturan:
Saya memantau prosesnya dan dia melakukan pekerjaan dengan baik. Kami mengidentifikasi beberapa bagian kode yang tidak sesuai dengan dokumen kami dan direvisi sesuai (kode dan / atau standar, mana yang lebih masuk akal)
Dan kemudian seorang pria baru tiba. Kami mengulangi prosesnya (master berbeda kali ini), dan itu berhasil lagi. Dan lagi.
Kesimpulannya
Pada titik tertentu dalam proses itu disarankan agar kami menggunakan kait pra-komit untuk mengotomatiskan pengecekan standar. Kami memutuskan untuk tidak melakukannya karena berbagai alasan, ada beberapa diskusi menarik tentang StackOverflow tentang masalah ini:
Beberapa khusus PHP, tetapi jawaban berlaku untuk semua platform.
sumber
Ya, saya pernah mengalaminya sebelumnya. Saat bekerja dalam tim, anggota tim harus menyetujui aturan dan konvensi tertentu, dan itu termasuk gayanya.
Anda harus meminta tim Anda duduk bersama dan menyusun seperangkat aturan, standar pengkodean , yang harus Anda patuhi setiap bagian dari kode yang diperiksa.
Kemungkinan besar, dasar untuk set aturan Anda, setidaknya gaya, akan menjadi kode yang ada. Setelah selesai, semua orang harus patuh, dan itu harus diperiksa sebagai bagian dari tinjauan kode . Kode yang tidak mematuhi standar tidak boleh diizinkan masuk.
Ngomong-ngomong, itu tidak harus menjadi pemungutan suara yang demokratis, itu adalah salah satu hal di mana pemimpin tim dapat benar-benar menjalankan wewenang. Tetapi setelah mengatakan itu, saya tidak berpikir bahwa Anda dapat memaksakan standar yang ditolak oleh sebagian besar tim. Anda dapat menerapkan standar yang ditolak oleh satu orang, terutama yang baru.
Mengenai cara berbicara dengannya ... Setiap programmer yang berpengalaman tahu bahwa setiap tempat dan tim memiliki konvensi dan gaya sendiri, yang harus diikuti. Anda dapat memberi tahu dia bahwa dia lebih dari menyambut untuk menyarankan perbaikan, tetapi dia harus mematuhi aturan yang dimiliki tim, dan dia tidak boleh mengubah gaya kode yang ada tetapi menggunakan gaya yang sama saat menambahkan kode baru.
Juga, Anda dapat memberi tahu (jika Anda adalah manajer, atau berbicara dengan manajer Anda tentang hal itu) kepada orang itu untuk tidak melakukan hal-hal tertentu yang Anda anggap tidak pantas (yang Anda sebutkan mendefinisikan, memesan, meretas dan pintasan, dan semacamnya).
sumber
Buat catatan dalam proses perekrutan Anda, bahwa mengikuti gaya pengkodean yang diterima adalah persyaratan untuk pekerjaan. Sekarang apa yang Anda lakukan terhadap mereka yang tidak mengikuti aturan? Mulailah dengan menghapus akses mereka ke kode langsung sampai mereka mendapatkan dengan program ini.
.
sumber
Inilah yang bisa dilakukan:
Inilah yang harus dihindari:
sumber
Basis kode kami yang ada sebagian besar berisi kode yang mudah dibaca, bersih, dan dapat dikelola
Satu hal yang saya pelajari selama bertahun-tahun adalah keterbacaan ada di mata yang melihatnya. Saya telah melihat banyak kasus di mana gaya pengkodean chickenscratch seseorang dibenarkan sebagai "dapat dibaca", dan saya telah melihat orang yang sangat masuk akal berdebat tentang gaya pengkodean mana yang paling "dapat dibaca". Mungkin orang ini tidak menganggap gaya Anda mudah dibaca?
Yang mengatakan, pria baru harus sesuai dengan standar Anda, bukan sebaliknya.
sumber
Pertimbangkan untuk menggunakan permintaan tarik untuk kode baru ke dalam repositori. Ini memberikan tempat yang nyaman untuk melakukan tinjauan kode. Kode yang gagal tinjauan kode tidak digabungkan ke dalam repositori hingga bentuknya sesuai.
Berhati-hatilah untuk tidak membuat permintaan tarikan terlalu besar. Dalam pengalaman saya mereka tidak boleh lebih besar dari antara setengah hari hingga maksimal dua hari atau Anda akan memiliki terlalu banyak konflik gabungan.
Sistem vcs online seperti bitbucket atau github mendukung fungsi ini. Jika Anda lebih memilih pendekatan on-premise, simpanan sepertinya merupakan taruhan terbaik saat ini.
sumber
Ada aturan sederhana yang dapat Anda ikuti: Jika Anda memodifikasi file dengan kode, Anda menggunakan standar pengkodean yang digunakan dalam file itu. Jika Anda membuat file baru, Anda menggunakan standar pengkodean yang bagus. (Plus: Jika kompiler Anda dapat memberikan peringatan, Anda mengaktifkan semua peringatan yang masuk akal, aktifkan peringatan = kesalahan jika memungkinkan, dan jangan izinkan kode apa pun dengan peringatan. Plus: Jika Anda menggunakan alat yang membuat perubahan grosir dalam file, seperti mengubah tab ke spasi atau sejenisnya, JANGAN menggunakannya).
Alasan mengapa ada argumen besar tentang standar pengkodean adalah bahwa satu standar tidak lebih baik atau lebih buruk daripada yang lain (biasanya) tetapi hanya berbeda. Satu-satunya yang benar-benar buruk hal yang adalah mencampur gaya pengkodean.
Jelas saya berharap bahwa setiap programmer yang layak dapat menulis kode mengikuti standar pengkodean, apakah mereka lebih suka standar tertentu atau tidak.
Dan di sisi lain, ada standar kualitas. Jangan pernah menerima kode yang tidak memenuhi standar kualitas Anda.
sumber