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:
- Pertama, kami menghapus semua yang tidak berlaku untuk proyek kami
- Kemudian kami mengubah semua yang kami anggap sebagai masalah gaya menjadi gaya kami
- Dan akhirnya kami menulis semuanya
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:
- Hal-hal dari gaya pribadi (disingkirkan)
- Standar yang masuk akal untuk latar belakang Java-nya tetapi tidak begitu banyak dengan PHP (diberhentikan)
- Konvensi yang dia bawa dari paparan singkatnya dengan PHP (beberapa ditolak, tetapi banyak yang terbukti sebagai konvensi populer yang tidak pernah kita pikirkan atau temukan dalam penelitian awal kami)
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:
- Kode harus relatif mudah bagi seseorang yang tidak terbiasa dengan basis kode kami (dan PHP pada umumnya)
- Kode harus pada apa yang disewa untuk dilakukan
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
- Buat dokumen standar pengkodean, tetapi pastikan bahwa standar Anda tidak hanya milik Anda sendiri tetapi mencerminkan standar umum di komunitas yang lebih luas dari platform Anda.
- Tetapkan peran yang mirip dengan master standar pengodean kami. Seseorang untuk memantau setidaknya kode baru, dan terutama kode baru dari anggota baru. Daur ulang peran, karena sangat membosankan.
- Selalu evaluasi input dari anggota baru. Selalu revisi standar Anda jika itu masuk akal. Dokumen standar pengkodean Anda harus berevolusi, tetapi lambat. Anda tidak ingin memperbarui kembali basis kode Anda di setiap iterasi.
- Berikan waktu bagi setiap anggota baru untuk belajar dan beradaptasi dengan standar dan konvensi Anda. Belajarlah dengan melakukan yang terbaik dalam situasi ini.
- Wiki mengerjakan keajaiban untuk dokumen-dokumen semacam itu.
- Ulasan kode berfungsi dengan sangat baik untuk situasi apa pun!
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.