Ketika mengerjakan kode, saya menghadapi banyak tantangan yang sama seperti yang dilakukan rekan tim saya, dan saya telah menulis beberapa fungsi dan kelas yang membantu, dan begitu juga mereka. Jika ada komunikasi yang baik, saya akan mendengar tentang beberapa hal hebat yang disatukan seseorang, dan enam bulan kemudian ketika saya membutuhkannya, saya mungkin mengingatnya dan memanggil fungsi itu, menghemat waktu saya sendiri. Jika saya tidak mengingatnya, atau tidak pernah mengetahuinya, saya mungkin akan menemukan kembali kemudi.
Apakah ada praktik khusus untuk mendokumentasikan hal-hal semacam ini? Bagaimana Anda membuatnya mudah ditemukan?
Jika tim Anda tidak memiliki dokumentasi seperti itu, bagaimana Anda mengetahui apakah roda Anda sudah ada?
SUNTING:
Semua kecuali salah satu jawaban sejauh ini berkaitan dengan situasi ideal, jadi izinkan saya meringkas solusi-solusi itu: dokumentasi & komunikasi; wiki, stand-up meeting, dll. Itu semua adalah hal-hal hebat, tetapi mereka bergantung pada programmer yang punya waktu (dan keterampilan) untuk menulis dokumentasi dan menghadiri pertemuan dan membuat catatan dan mengingat semuanya.
Jawaban paling populer sejauh ini (Caleb) adalah satu-satunya yang dapat digunakan oleh seorang programmer yang tidak mampu melakukan dokumentasi dan rapat, dan hanya melakukan satu hal: pemrograman. Pemrograman adalah apa yang dilakukan oleh seorang programmer, dan ya, seorang programmer yang hebat dapat menulis dokumentasi, unit test, dll, tetapi mari kita hadapi itu - kebanyakan dari kita lebih suka pemrograman daripada mendokumentasikan. Solusinya adalah di mana programmer mengenali kode yang dapat digunakan kembali dan menariknya ke kelasnya sendiri atau repositori atau apa pun, dan oleh kenyataan bahwa itu terisolasi, ia menjadi dapat ditemukan dan memudahkan kurva belajar untuk menggunakannya ... dan ini dicapai dengan pemrograman.
Di satu sisi saya melihatnya seperti ini: Saya baru saja menulis tiga fungsi, dan terpikir oleh saya bahwa orang lain harus tahu tentang mereka. Saya bisa mendokumentasikannya, menulisnya, mengumumkannya di rapat, dll - yang bisa saya lakukan, tapi itu bukan kekuatan saya - atau .... Saya bisa mengekstraknya ke kelas, beri nama dengan baik, buat mereka berfungsi seperti kotak hitam, dan tempel di mana file kelas lain pergi. Maka email singkat yang mengumumkannya mudah. Pengembang lain dapat memindai kode dan memahaminya lebih baik daripada fungsi terisolasi yang digunakan dalam kode yang tidak sepenuhnya mereka pahami - konteks itu dihapus.
Saya suka ini karena itu berarti memiliki satu set file kelas yang bernama baik, dengan metode yang dinamai, adalah solusi yang baik yang dicapai oleh pemrograman yang baik. Itu tidak memerlukan pertemuan, dan itu melunakkan kebutuhan untuk dokumentasi rinci.
Apakah ada lebih banyak ide dalam nada ini ... untuk pengembang terisolasi dan waktu?
sumber
Jawaban:
Perpustakaan. Kerangka kerja Kontrol versi.
Jika Anda memiliki kode yang dapat digunakan kembali, hal terakhir yang Anda inginkan adalah anggota tim yang berbeda untuk menyalin kode sumber ke proyek mereka. Jika mereka melakukannya, kemungkinan besar mereka akan berubah sedikit di sini dan mengubah sedikit di sana, dan segera Anda akan memiliki lusinan fungsi atau metode yang semuanya memiliki nama yang sama tetapi masing-masing bekerja sedikit berbeda. Atau, mungkin lebih mungkin, penulis asli akan terus memperbaiki kode untuk memperbaiki bug, membuatnya lebih efisien, atau menambahkan fitur, tetapi kode yang disalin tidak akan pernah diperbarui. Nama teknis untuk itu adalah kekacauan besar .
Solusi yang tepat adalah dengan menarik hal-hal yang dapat digunakan kembali dari proyek apa pun yang Anda bangun untuk itu dan menempatkannya di perpustakaan atau kerangka kerja dalam repositori kontrol versinya sendiri. Itu membuatnya mudah ditemukan, tetapi juga mencegah melakukan perubahan tanpa mempertimbangkan semua proyek lain yang mungkin menggunakannya. Anda mungkin mempertimbangkan memiliki beberapa pustaka yang berbeda: satu untuk kode yang teruji dengan baik yang tidak lagi cenderung berubah, satu untuk hal-hal yang tampaknya stabil tetapi belum diuji dan ditinjau secara menyeluruh, satu untuk penambahan yang diusulkan.
sumber
Salah satu pendekatan untuk itu adalah menyiapkan Wiki untuk tujuan itu, dan menulis beberapa dokumen tingkat tinggi tentang komponen apa yang dapat digunakan kembali yang Anda miliki, bagaimana Anda memecahkan masalah, dll.
Bagian tersulitnya adalah meminta setiap orang di tim Anda untuk terus memelihara Wiki itu. Tetapi segala jenis dokumentasi lainnya menderita masalah yang sama.
Beberapa kode Anda mungkin juga cukup baik untuk dimasukkan ke pustaka yang dapat digunakan kembali. Ini membuatnya juga lebih mudah untuk menemukan kode lagi nanti.
sumber
Berada di perusahaan dengan 700 karyawan, dalam tim yang bervariasi antara 2 dan 20 orang, inilah pengalaman saya.
Di level tim
Kami memiliki "pertemuan standup" setiap hari selama sekitar 15-20 menit. Kita dapat dengan cepat berbagi pengetahuan umum seperti "Saya melakukan fungsi ini kemarin, sangat sulit".
Kami juga memiliki wiki per proyek. Yang berarti kami dapat berbagi informasi (teknis) tentang apa yang dilakukan dalam proyek, termasuk kelas / fungsi khusus yang ada di dalamnya.
Di tingkat agensi
Di tingkat agensi, kami memiliki 4 alat:
Di tingkat perusahaan
Di tingkat perusahaan, ini lebih terorganisir.
Wiki "level agensi" sebenarnya adalah bagian dari wiki perusahaan.
Dan wiki kemudian dibagi berdasarkan teknologi. Jadi, siapa pun dapat memperbaikinya, mencari melalui itu, dan pada dasarnya memberi kehidupan kepada wiki.
Ada juga milis yang bisa kami langgani. Siapa pun di agensi dapat berlangganan, dan kebanyakan orang mengikuti setidaknya satu atau dua teknologi, sebenarnya kebanyakan orang mengikuti 5-10 dari mereka.
Dan VCS tentu saja merupakan sistem berbagi kode terbaik.
Kesimpulan
Singkatnya, tidak ada solusi yang jelas. Berbagi pengetahuan selalu menjadi masalah besar, dan mungkin akan tetap ada. Ada banyak solusi untuk membuat basis pengetahuan , dan satu mungkin bisa sesuai dengan tagihan Anda. Namun, beberapa orang berusaha mendapatkan KB yang lebih baik karena solusi saat ini tidak selalu sangat pintar.
sumber
Nah, itu semua bermuara pada komunikasi.
Wiki sangat bagus dan Anda harus menginstal dan menggunakannya. Intranet pemrogram internal yang bagus bagus jika orang membacanya dan memperbaruinya, jadi Anda sebenarnya sedang membicarakan masalah orang di sana. Anda bisa menyarankan pertemuan "pembaruan tim" mingguan di mana semua orang berkumpul dan memberikan ikhtisar tentang apa yang sedang terjadi. Pimpinan teknologi (setidaknya!) Harus berkumpul dan mengobrol tentang apa yang dilakukan masing-masing tim. Sesi informal "Brown Bag" sangat bagus, jadwalkan saat makan siang, dan buat orang berbicara.
Anda juga memerlukan cara berbagi kode, mengemasnya, mengversi dan mendistribusikannya. Hal-hal akan lebih mudah jika Anda memiliki repositori kode sumber yang dikelola dengan sangat baik, diatur dengan baik ke dalam folder "umum" dan proyek.
Jika tidak ada hal seperti ini yang dilakukan, bawalah bos Anda, jelaskan bagaimana itu akan menguntungkan perusahaan dan menyarankan jalan ke depan :)
sumber
Sesi tinjauan kode dapat membantu. Jika tim Anda bertemu secara teratur untuk membahas apa yang dikembangkan, maka orang yang menemukan solusi dapat menunjukkan kepada orang lain bagaimana menggunakannya. Jika seseorang mengemukakan poin yang mereka pertahankan, anggota tim lain dapat mengusulkan pendekatan yang meningkatkan penggunaan kembali komponen yang ada.
sumber
Cara terbaik untuk menangani sesuatu seperti itu adalah memiliki struktur repositori yang memiliki beberapa konvensi sederhana sehingga saya tahu, sebagai seorang programmer, jika ada fungsi
doXYZ
, kira-kira di mana saya harus mencari fungsi itu. Apakah Anda menggunakan ruang nama, direktori, modul, plugin, paket, apa pun, kode Anda harus modular sehingga fungsi yang melakukan hal yang sama atau mengakses sumber data yang sama sebagian besar berada di tempat yang sama.sumber
Idealnya, harus ada setidaknya satu orang lain selain penulis yang melakukan peninjauan kode pada setiap checkin. Proses peninjauan kode dapat membantu mengurangi masalah banyak metode duplikat yang sedang diperiksa. Tentu saja, Anda terkendala oleh pengetahuan pengulas.
TL; DR: Ulasan kode untuk setiap checkin.
sumber