Saya telah menulis banyak tentang hal ini di SoftwareEngineering.SE di masa lalu, dan berada dalam situasi yang sama sendiri. Karena itu, saya akan berusaha memberikan beberapa petunjuk dan menyoroti beberapa masalah yang saya catat ketika membaca pertanyaan Anda.
Tetapi pertama-tama, mari kita bicara tentang aspek penting: peran Anda dalam perusahaan.
Peranmu
Anda mungkin memiliki mandat eksplisit dari bos Anda untuk meningkatkan hal-hal, dan juga tempat dalam hierarki di mana pengembang lain harus mendengarkan pesanan Anda . Atau Anda mungkin berada di antara teman sebaya, memiliki peran dan otoritas yang sama, pilihan Anda hanya ... well ... pendapat .
Dalam kedua kasus, yang penting adalah tempat Anda lebih sedikit dalam hierarki, dan lebih banyak lagi:
Apa yang dipikirkan pengembang lain tentang Anda. Jika mereka memperlakukan Anda sebagai pria menyebalkan yang menanyakan hal-hal bodoh, Anda tidak akan jauh. Saya telah melihat banyak kasus di mana para pemimpin teknis dan manajer proyek sama sekali tidak berpengaruh pada tim, karena tim tahu (atau berpikir) bahwa "para pemimpin" itu tidak memiliki latar belakang teknis yang diperlukan untuk mengambil keputusan yang mereka ambil. Di sisi lain, saya telah melihat beberapa pengembang yang benar-benar didengarkan oleh rekan-rekan mereka, karena mereka tahu para pengembang itu terampil dan berpengalaman.
Seberapa solid tim Anda dan apa yang memotivasi mereka. Bayangkan sebuah perusahaan di mana setiap pengembang dibayar untuk KLOC / bulan. Apakah ada yang Anda katakan tentang gaya menjadi masalah bagi kolega Anda? Mungkin tidak, karena jarang ada orang yang ingin dibayar lebih rendah. Secara umum, jika ini bukan tim tetapi hanya sekelompok orang yang mengerjakan proyek yang sama, Anda tidak akan dapat meningkatkan apa pun.
Bergantung pada itu, Anda dapat memutuskan apakah perlu upaya untuk melakukan perubahan apa pun. Jika Anda tidak memiliki suara dan tidak ada kohesi tim, cari saja pekerjaan lain. Jika Anda dikenal sebagai pengembang yang berbakat dan dihormati dan ada perasaan tim yang kuat, Anda akan dapat meningkatkan hal-hal yang relatif mudah, bahkan jika dihadapkan dengan permusuhan dari bos Anda atau tim lain.
Dalam semua kasus, sangat penting untuk tidak menekan tim Anda. Bekerja dengan mereka, bukan melawan mereka. Jangan memberi mereka perintah, tetapi arahkan mereka ke tujuan.
Sekarang, petunjuknya.
Gaya
Saya pernah bertanya dengan baik untuk mengikuti gaya pengkodean dan pemformatan sebagian besar kode yang ada (sayangnya kami tidak memiliki dokumen gaya pengkodean formal). Tapi itu tidak berhasil ...
Tentu saja tidak, karena ini bukan cara yang seharusnya dilakukan.
Gaya itu membosankan .
Mengikuti gaya itu membosankan .
Menulis dokumen gaya pengkodean itu membosankan ( dan sangat sulit ; jangan coba-coba melakukannya kecuali Anda telah bekerja dengan bahasa tersebut selama lebih dari sepuluh tahun).
Membaca dokumen gaya itu membosankan .
Meninjau kode untuk kesalahan gaya membosankan .
Mengetahui bahwa gaya saya lebih baik daripada gaya Anda itu mengasyikkan , terutama ketika sama sekali tidak ada manfaat obyektif dari satu gaya di atas yang lain. Serius, setiap orang waras tahu bahwa cara menulis yang benar if (x)
adalah cara saya menulisnya, bukan if(x)
atau if ( x )
!
Karena itu:
Jangan lakukan tinjauan gaya. Ini adalah tugas pemeriksa gaya. Aplikasi lucu itu memiliki beberapa manfaat di otak Anda: mereka memeriksa seluruh proyek dalam hitungan milidetik, bukan berjam-jam atau berhari-hari, dan mereka tidak melakukan kesalahan dan tidak ketinggalan kesalahan gaya.
Jangan menulis standar gaya Anda sendiri. Anda tetap akan melakukan kesalahan, dan rekan kerja Anda akan membohongi Anda bahwa Anda membuat pilihan yang salah.
Jangan paksa pengembang untuk memperbaiki 2.000 kesalahan gaya.
Lakukan gaya secara otomatis saat melakukan. Kode yang memiliki kesalahan gaya tidak memiliki tempat dalam kontrol versi.
Lakukan sejak awal proyek. Menyiapkan kontrol gaya dalam proyek yang ada sulit untuk mustahil.
Untuk lebih lanjut tentang itu, membaca bagian pertama dari jawaban lain ini pada SE.SE .
Juga:
- Jangan terlalu ketat. Misalnya, menulis
jslint
kode-patuh cukup mengganggu, sehingga harus dilakukan secara eksklusif ketika benar-benar diperlukan (atau jika semua anggota tim Anda senang menggunakannya). Hal yang sama berlaku untuk alat pemeriksaan statis; misalnya, Analisis Kode .NET pada tingkat maksimum bisa sangat menindas dan menekan, sementara membawa sedikit manfaat; alat yang sama pada tingkat moderat, di sisi lain, terbukti sangat membantu.
Ulasan kode
Sekarang karena Anda tidak perlu repot tentang gaya selama ulasan kode, Anda dapat fokus pada hal-hal yang lebih menarik: meningkatkan (vs memperbaiki) kode sumber.
Orang yang berbeda bereaksi secara berbeda terhadap ulasan kode. Beberapa menganggapnya sebagai peluang. Yang lain membencinya. Beberapa mendengarkan semua yang Anda katakan kepada mereka, membuat catatan, dan tidak berdiskusi, bahkan jika itu benar. Yang lain mencoba berdebat tentang setiap hal. Terserah Anda untuk menemukan cara untuk berurusan dengan setiap pengembang sesuai dengan kepribadiannya. Biasanya bermanfaat untuk:
Lakukan review kode secara pribadi, terutama ketika pengembang masih junior dan menulis kode yang benar-benar buruk.
Tunjukkan bahwa tidak ada yang pribadi: Anda meninjau kode, bukan keterampilan orang tersebut.
Tunjukkan sasaran sebenarnya dari tinjauan kode. Tujuannya bukan untuk menunjukkan seberapa buruk pengembangnya. Tujuannya adalah untuk memberikan peluang perbaikan.
Tidak pernah berdebat. Anda di sini bukan untuk meyakinkan, tetapi untuk memberikan keahlian Anda.
Jangan pernah menganggap penerima ulasan adalah satu-satunya yang dapat belajar sesuatu dari ulasan. Anda di sini untuk belajar juga, baik dengan membaca kode dan dengan menanyakan penjelasan tentang bagian-bagian yang tidak Anda mengerti.
Setelah peninjauan kode selesai, pastikan orang tersebut benar-benar meningkatkan kode-nya. Saya punya beberapa kasus di mana pengembang berpikir bahwa tinjauan kode berakhir ketika rapat yang sebenarnya berakhir. Mereka pergi dan kembali ke fitur baru mereka, mencoba menerapkan apa yang Anda bagikan dengan mereka hanya untuk kode baru. Memiliki alat pelacakan yang layak untuk peninjauan kode akan membantu.
Perhatikan bahwa terlepas dari peran khusus Anda di perusahaan dan keahlian Anda dibandingkan dengan orang lain, kode Anda juga harus ditinjau. Anda juga tidak boleh menjadi satu-satunya yang meninjau kode orang lain.
Dalam sebuah proyek baru-baru ini di mana saya bekerja sebagai pemimpin teknis, saya mengalami kesulitan menjelaskan kepada rekan kerja saya bahwa itu adalah peran mereka untuk melakukan tinjauan kode masing-masing, termasuk milik saya. Ketakutan magang yang akan meninjau kode pemimpin teknisnya menghilang begitu ia menemukan masalah pertama dalam kode — dan siapa di antara kita yang menulis kode tanpa cacat?
Latihan
Ulasan kode adalah peluang besar untuk mengajar dan mempelajari beberapa aspek pemrograman dan desain perangkat lunak, tetapi yang lain membutuhkan pelatihan.
Jika Anda bisa melatih rekan kerja Anda, lakukan itu. Jika manajemen Anda memusuhi ide pelatihan, lakukan secara informal. Saya telah melakukan sesi pelatihan seperti itu dalam bentuk pertemuan informal, atau kadang-kadang bahkan sebagai diskusi sederhana, kadang-kadang terganggu oleh manajemen dan dilanjutkan kemudian.
Selain pelatihan langsung, pastikan Anda cukup tahu buku-buku seperti Kode Lengkap McConnel , dan berbicara tentang buku-buku itu kepada rekan kerja Anda. Sarankan mereka untuk membaca kode sumber proyek sumber terbuka, berikan mereka contoh spesifik kode berkualitas tinggi. Dan, tentu saja, tulis kode berkualitas tinggi sendiri.
Fokus pada konteks, bukan pada orang
Bagaimana saya bisa mengatasi situasi ini tanpa hanya berfokus pada 'budaya perusahaan yang buruk', 'lulusan yang tidak berpengalaman', dll.
Para lulusan tersebut memiliki tujuan: memperoleh pengalaman, mempelajari berbagai hal, menjadi lebih terampil. Jika, tahun demi tahun, mereka menulis kode jelek dan tidak tahu apa-apa tentang pemrograman, itu mungkin karena tim Anda atau perusahaan Anda tidak memberi mereka kesempatan ini.
Jika Anda berfokus pada fakta bahwa tim Anda memiliki lulusan yang tidak berpengalaman, ini tidak akan membantu. Sebaliknya, fokuslah pada apa yang dapat Anda lakukan untuk mereka dan dengan mereka. Ulasan kode dan pelatihan adalah dua teknik untuk memperbaiki situasi.
Budaya perusahaan yang buruk adalah binatang yang berbeda. Terkadang, itu bisa diubah. Terkadang tidak bisa. Dalam semua kasus, ingatlah bahwa Anda adalah bagian dari perusahaan ini, jadi Anda adalah bagian dari budaya perusahaan. Jika Anda tidak dapat mengubahnya dan menemukannya secara inheren buruk, cepat atau lambat, Anda harus pergi.
Dapatkan metrik Anda dengan benar
Bagaimana tepatnya Anda mengukur kode sekarang? Apakah Anda mengukur jumlah komit per hari per pengembang? Atau KLOC per bulan per programmer? Atau mungkin cakupan kode? Atau jumlah bug yang ditemukan dan diperbaiki? Atau jumlah bug potensial yang tertangkap oleh uji regresi? Atau jumlah pengembalian yang dilakukan oleh server Penerapan Berkelanjutan?
Hal-hal yang Anda ukur penting, karena anggota tim menyesuaikan pekerjaan mereka dengan faktor-faktor yang diukur. Misalnya, di satu perusahaan di mana saya harus bekerja beberapa tahun yang lalu, satu-satunya hal yang diukur adalah waktu yang dihabiskan di kantor. Tidak perlu dikatakan bahwa ini tidak mendorong untuk memberikan kode yang lebih baik, atau bekerja lebih pintar, atau ... yah, untuk bekerja sama sekali.
Mencari penguatan positif dan negatif dan menyesuaikan faktor-faktor yang diukur dari waktu ke waktu pada dasarnya adalah pengaruh yang Anda miliki pada anggota tim. Ketika dilakukan dengan benar, itu memungkinkan untuk mencapai hasil yang tidak akan dicapai oleh hierarki sederhana.
Hal-hal yang mengganggu Anda, membuatnya terukur. Ukur mereka, dan buat hasilnya publik. Kemudian bekerja sama dengan anggota tim lainnya untuk meningkatkan hasil.
Sebagai contoh, mari kita pertimbangkan bahwa anggota tim membuat terlalu banyak kesalahan ejaan dalam nama kelas, anggota kelas, dan variabel. Ini menyebalkan. Bagaimana Anda bisa mengukurnya? Dengan parser, Anda dapat mengekstrak semua kata dari kode, dan menggunakan pemeriksa ejaan, menentukan rasio kata yang mengandung kesalahan dan kesalahan ketik, katakanlah 16,7%.
Langkah Anda selanjutnya adalah menyetujui dengan tim Anda tentang rasio target. Bisa 15% untuk sprint berikutnya, 10% untuk sprint berikutnya, 5% dalam enam minggu, dan 0% dalam dua bulan. Metrik tersebut dihitung ulang secara otomatis di setiap komit, dan ditampilkan di layar lebar di kantor.
Jika Anda tidak mencapai rasio target, tim Anda mungkin memutuskan untuk menghabiskan lebih banyak waktu memperbaiki kesalahan ejaan. Atau tim Anda mungkin menganggap lebih baik untuk menghitung rasio per pengembang, dan menampilkan informasi ini di layar lebar juga. Atau tim Anda mungkin menemukan bahwa tujuannya terlalu optimis, dan Anda harus memeriksanya.
Jika Anda mencapai rasio target, langkah selanjutnya adalah memastikan jumlah kesalahan dan kesalahan ketik tidak bertambah seiring waktu. Untuk itu, Anda bisa membuat tugas tambahan di build Anda yang memeriksa kesalahan pengejaan, dan gagal build jika setidaknya satu kesalahan ditemukan. Sekarang setelah Anda menyingkirkan masalah ini, layar besar Anda dapat digunakan kembali untuk menunjukkan statistik baru yang relevan.
Kesimpulan
Saya percaya bahwa setiap aspek yang disebutkan dalam pertanyaan Anda dapat diselesaikan melalui teknik yang saya sertakan dalam jawaban saya:
Ketika pengembang lain bergabung dengan proyek ini, saya perhatikan bahwa mereka menggunakan gaya pengkodean yang berbeda (kadang-kadang gaya yang sama sekali berbeda)
Anda harus menerapkan gaya secara otomatis saat melakukan.
dan sering tidak menggunakan fitur bahasa modern seperti pengakses properti (ini relatif baru di Objective-C).
Kedua tinjauan kode dan pelatihan di sini untuk mentransfer pengetahuan Anda tentang bahasa.
Kadang-kadang mereka akan menciptakan sepeda sendiri alih-alih menggunakan fitur kerangka yang serupa
Kedua ulasan kode dan pelatihan ada di sini untuk mentransfer pengetahuan Anda tentang kerangka kerja.
atau mentransfer konsep dari bahasa pemrograman lain atau patters yang mereka pelajari ke basis kode kami.
Ini adalah hal yang luar biasa. Sepertinya kesempatan bagi Anda untuk belajar dari mereka.
Seringkali mereka tidak dapat menyebutkan metode atau variabel dengan benar karena bahasa Inggris yang buruk
Ulasan kode juga harus fokus pada penamaan yang tepat. Beberapa IDE juga memiliki pemeriksa ejaan.
Terkadang saya berpikir jika bukan karena IDE saya pikir mereka akan menulis semua kode tanpa lekukan atau format sama sekali.
Tentu saja mereka mau. Gaya itu membosankan dan harus otomatis.
Pada dasarnya, saya benci kode yang mereka tulis.
Ingat dari bagian ulasan kode: “Tujuannya bukan untuk menunjukkan seberapa buruk pengembangnya. Tujuannya adalah untuk memberikan peluang untuk peningkatan. "
Ini berformat buruk / terorganisir, dan kadang-kadang sangat berbeda dari sisa proyek.
Pengecekan gaya otomatis .
Saya merasa sangat sedih ketika mereka menambahkan spageti mereka ke karya seni saya
Tunggu apa?! Bagian dari seni?! Tebak apa? Beberapa orang (termasuk Anda dalam enam bulan) mungkin menemukan kode Anda jauh dari sekadar karya seni. Sementara itu, mengerti bahwa menganggap pekerjaan Anda sebagai karya seni dan pekerjaan mereka sebagai omong kosong tidak akan membantu siapa pun. Termasuk kamu.
Rasanya semakin mereka tidak dapat diganggu untuk belajar atau tidak peduli: mereka hanya melakukan apa yang diminta dari mereka dan pulang.
Tentu saja mereka akan melakukan apa yang diminta dari mereka. Ingat: konteks, bukan orang dan perbaiki metrik Anda . Jika konteksnya mengharuskan mereka untuk menjadi yang terbaik dalam apa yang mereka lakukan, mereka akan melakukannya. Jika konteksnya mengharuskan untuk menghasilkan sebanyak KLOC per bulan sebanyak mungkin dan tidak lebih, mereka juga akan melakukannya.