Anda tahu bagaimana kelanjutannya: ada beberapa tugas kecil yang berulang yang Anda temukan cara untuk mengotomatisasi 95% pekerjaan dengan cepat. Anda membuat skrip, menjalankannya, secara manual memperbaiki output, dan Anda selesai. Tentu saja Anda tidak melakukan skrip, karena tidak cocok dengan persyaratan kualitas perusahaan (tidak memiliki dokumentasi, juga tidak memiliki tes).
Beberapa waktu kemudian Anda melihat seorang rekan kerja mengerjakan tugas serupa. Anda pergi "Hei! Saya membuat skrip untuk itu. Biarkan saya melihat itu. [Terlihat] Oh, itu disimpan di laptop saya sebelumnya jadi saya tidak memilikinya lagi. Sayang sekali."
Skrip-skrip ini seringkali dapat menghemat banyak waktu, dan sebagai pemimpin tim, saya ingin mereka disimpan dalam kontrol versi. Namun, jika saya menerapkan standar ketat yang sama dengan sisa basis kode untuk skrip ini, saya khawatir sebagian besar pengembang akan menyimpannya untuk diri mereka sendiri.
Satu-satunya pilihan lain yang bisa saya buat adalah membiarkan pengembang menyimpan skrip di bagian khusus kontrol versi, di mana tidak ada kontrol kualitas (seperti GitHub Gists). Risikonya adalah orang lain tidak akan dapat menggunakan kode karena mereka tidak dapat menemukan atau memahaminya.
Bagaimana masalah ini bisa diselesaikan? Atau haruskah itu tidak diselesaikan?
sumber
Sometime later you see a colleague working on a similar task. You go "Hey! I made a script for that. Let me look that up. [looks] Oh, it was stored on my previous laptop so I don't have it anymore
. Itu cara yang bagus untuk membuang upaya, waktu, dan uang bersama dengan skrip. Bukan?The risk is that others will not be able to use the code because they cannot find or understand it.
Seperti potongan kode apa pun, kita tidak terbiasa. Saya pikir itu adalah alasan yang buruk untuk tidak memeriksa skrip ke SCM.Jawaban:
Masalahnya tidak bisa diselesaikan.
Ada perbedaan besar antara berbagi kode dari mulut ke mulut ketika Anda mendengar bahwa seorang rekan kerja menghadapi kesulitan tertentu, dan membagikannya hanya dengan meletakkannya di perpustakaan tempat semua orang memiliki akses.
Perbedaannya adalah bahwa, dalam kasus pertama, Anda memainkan peran sebagai pencipta dan pustakawan dengan pengetahuan implisit tentang masalah dan kode yang Anda miliki yang menyelesaikannya, sedangkan dalam kasus kedua, peran tersebut tidak ada.
Standar umum kode Anda dapat dirancang untuk menghilangkan peran pustakawan di perusahaan Anda, dan memastikan bahwa perpustakaan tetap dapat dinavigasi sendiri ke semua yang datang.
Dengan bangunan besar kode berumur panjang (yang menjadi ciri sebagian besar produk perangkat lunak inti), waktu dan upaya dibenarkan untuk mempertahankan kemampuan beberapa generasi pekerja untuk terus bekerja dengan seluruh bangunan. Di perusahaan dengan pergantian staf yang tinggi, "generasi" staf mungkin hanya sesedikit satu atau dua tahun.
Tetapi tentu saja, untuk mencapai standar "tanpa pustakawan" itu harus dibayar dengan biaya dan waktu yang sangat besar bagi mereka yang menciptakan perpustakaan, dan itu masih menuntut waktu dan upaya yang signifikan dari mereka yang kemudian datang untuk menggunakan dan menavigasi perpustakaan (meskipun bukan upaya yang sama dengan menciptakan kembali seluruh bangunan dari awal, yang mungkin telah mengambil beberapa generasi).
Di sisi lain, sebagian besar skrip cepat dan kotor ini akan ditulis untuk menyelesaikan hal-hal sederhana dengan cepat - mungkin hanya sekali saja. Itu bukan kreasi yang rumit atau kuat.
Anda mengatakan mereka "menghemat waktu", tetapi tentu saja ini hanya berlaku ketika mereka tidak ditulis dengan standar yang jauh lebih tinggi, tanpa pustakawan. Mereka adalah jig konstruksi pribadi dari mereka yang membuatnya - tuas sementara dan perancah upaya manusia, bukan produk tahan lama.
Seharusnya dimungkinkan untuk memeriksa mereka ke dalam kontrol versi, sehingga pencipta memiliki tempat untuk menyimpan dan melestarikannya secara sistematis - tetapi juga harus jelas bahwa mereka mewakili produk yang masih diawasi oleh pencipta mereka .
Jika Anda dapat membaca kode mereka dan langsung melihat apa fungsinya, jauh lebih baik. Tetapi itu adalah perpustakaan pribadi pencipta, dan mereka tidak ditahan pada standar bahwa orang lain harus dapat melihat apa yang dilakukannya tanpa merujuk pada pencipta.
Ini bukan "risiko" yang ditanggung tim, lebih daripada pengaturan efek pribadi di rumah Anda adalah "risiko" bagi mereka yang mungkin ingin meminta untuk meminjamnya. Sebaliknya, harus mengindeks seluruh isi rumah Anda, mengaturnya secara teratur dan memberikan instruksi manual untuk setiap item, merupakan risiko serius bagi penggunaan rumah Anda secara efisien dan berkelanjutan.
sumber
Aku merasakan sakitmu. Saya akan mengatakan memiliki bagian terpisah dari repo Anda mungkin merupakan opsi untuk menyimpan skrip ini. Namun, ini hanya memecahkan satu bagian dari masalah. Anda sekarang menyimpannya di suatu tempat, tetapi tidak ada cara yang baik bagi rekan kerja Anda untuk mengetahui mereka ada di sana.
Dalam pengalaman saya sebagai konsultan untuk sebuah perusahaan di mana skrip berlimpah dan ditulis untuk pelanggan yang berbeda dan biasanya di situs, mencari tahu apa yang sudah ada di sana sulit!
Anda harus menemukan cara untuk membagikan apa yang Anda buat.
Di perusahaan kami, karena kami tidak sebesar itu, kami memeriksa hal-hal seperti skrip ke dalam repo kami, tetapi juga mengirimkan email seluruh perusahaan untuk memberi tahu kolega kami tentang solusi baru. Dengan cara ini, setidaknya semua orang tahu apa yang sudah ada di luar sana dan siapa yang harus dihubungi jika mereka membutuhkannya.
sumber
Yang lain telah menjelaskan bagaimana dan mengapa untuk memastikan bahwa skrip 'berguna Anda' dapat dibuat cukup baik untuk masuk dalam repo. Saya hanya akan menyela dan mengatakan bahwa sama pentingnya untuk memastikan bahwa, jika mereka tidak cukup baik untuk masuk dalam repo, mereka harus dibuang.
Dengan kata lain, mereka cukup baik untuk masuk repo atau tidak, dan harus diusir. Jika mereka tidak diusir, mereka menjadi beban pemeliharaan yang tidak dikelola, dan akhirnya tidak dapat dikelola.
sumber
Pertama-tama saya akan mulai dengan mengatakan bahwa jika pengembang Anda enggan berkontribusi kode karena standar Anda, standar Anda terlalu ketat atau Anda harus meningkatkan kualitas dan etos kerja pengembang Anda. Jika ini adalah skrip kecil, seharusnya tidak ada usaha ekstra yang diperlukan untuk memasukkan beberapa komentar. Pengembang harus menulis kode yang dapat dibaca secara default, dan jika tidak, masalah Anda sebenarnya terletak pada kepegawaian Anda.
Untuk menjawab pertanyaan Anda, Anda memiliki beberapa opsi:
cli/
direktori yang berisi beberapa skrip baris perintah, biasanya dimaksudkan untuk dijalankan satu kali untuk menginisialisasi lingkungan, mengimpor potongan data tertentu, dan sebagainya.Dengan salah satu dari dua opsi pertama, Anda dapat memilih untuk memberlakukan standar pengkodean yang lebih longgar di repositori lain atau direktori.
sumber
Mulai memformalkan proses Anda.
Anda tidak memberikan banyak petunjuk untuk apa skrip ini digunakan, tetapi saya berasumsi Anda memiliki berbagai tugas pemasangan dan pemeliharaan, atau perbaikan data umum yang diserahkan kepada pengembang untuk dilakukan karena merekalah yang memiliki pengetahuan cukup untuk memperbaikinya. sesuatu?
Anda harus mencoba menjadi lebih profesional tentang ini.
Tujuannya adalah untuk membuat proses tersebut murni fungsi hafalan yang dapat dilakukan siapa saja dengan mengikuti dokumen, atau menjalankan alat.
Kemudian Anda dapat memindahkan pengembang Anda kembali ke fitur penulisan untuk produk Anda dan mempekerjakan beberapa staf pendukung untuk menangani masalah sehari-hari
sumber
Hampir semua skrip dapat memiliki potensi untuk digunakan kembali dengan satu atau lain cara. Tapi potensi itu tidak akan terlihat pada awalnya - itulah sebabnya itu dianggap dibuang pada saat itu.
Tawarkan pada tim Anda solusi repositori mirip-Github, tanpa kontrol kualitas apa pun, untuk mendorong penggunaannya dan mencegah hilangnya potensi itu.
Tetapi juga memiliki satu atau lebih repositori untuk alat / utilitas bersama, dengan kontrol kualitas yang sesuai.
Hanya ketika skrip yang disimpan dalam repositori throwaway dirujuk potensi mereka untuk digunakan kembali mulai terurai. Saat itulah penggunaan ulang yang diformalkan harus dilakukan, dimulai oleh pengembang individu yang mengenali potensi itu atau oleh Anda jika referensi terjadi dalam konteks tim. Hal ini dapat terjadi pada referensi pertama, atau mungkin pada referensi berikutnya (yaitu ketika potensi penggunaan ulang dipastikan lebih tinggi), tergantung pada kemampuan tim, jadwal, beban, dll.
Referensi itu sendiri menangani
find
masalah tersebut. Penulis skrip dan / atau orang yang membuat referensi mungkin dapat membantuunderstand
masalah tersebut. Jika tidak - potensi penggunaan kembali tidak benar-benar ada atau memahami kode hanya akan menjadi bagian dari upaya / biaya penggunaan ulang yang diformalkan.Setelah diarahkan, upaya penggunaan kembali yang diformalkan harus dilakukan di layar radar tim dan hasilnya pada akhirnya akan mendarat di repositori alat / utilitas bersama. Saat itulah skrip throwaway yang setara dari mana penggunaan kembali berasal dapat dihapus (jika potensi mereka habis).
sumber
Berfokus secara khusus pada kode yang ditulis dengan buruk tetapi fungsional; ada argumen yang sangat kuat untuk tidak menempatkan ini di repositori.
Saya memiliki koleksi cuplikan di folder Dropbox pribadi saya. Ini berisi hal-hal yang menurut saya berguna:
Namun:
Meskipun saya masih menggunakan potongan ini secara teratur ketika saya perlu mengimplementasikan sesuatu dengan cepat, mereka tidak dapat digunakan kembali atau dibangun dengan baik. Ada banyak alasan mengapa ini tidak dapat dimasukkan ke dalam kontrol versi perusahaan kami:
Tetapi sifat yang paling umum dibagikan dari semua cuplikan ini:
Cuplikan ini baik untuk saya gunakan, karena saya pribadi ingat untuk apa mereka digunakan, bagaimana menggunakannya, dan setiap jebakan yang saya temui.
Tetapi jika saya memberi orang lain akses ke snippet ini, tanpa saya hadir, maka mereka tidak akan berpikir bahwa snippet ini sangat membantu.
Cuplikan hanyalah perpanjangan dari pengalaman saya sebagai pengembang. Tanpa saya, cuplikan ini adalah sampah. Saya hanya menggunakan cuplikan karena saya tidak dapat mengingat sintaks seluruh kelas hingga karakter terakhir. Tapi aku ingat niat dan jebakan, bahkan lama setelah terakhir menggunakan potongan.
Pikirkan seperti ini:
Lakban sangat fleksibel, dapat memecahkan banyak masalah. Namun, hal-hal yang telah dipecahkan dengan menggunakan lakban umumnya dianggap tidak sedap dipandang. Jika IKEA akan menyertakan lakban dalam semua paket rata mereka, sementara itu sebenarnya dapat membantu beberapa orang yang membutuhkannya, itu juga akan membuat pernyataan yang kuat tentang kepercayaan IKEA terhadap kualitas furnitur yang telah mereka jual kepada Anda.
Untuk alasan yang sama, perusahaan tidak boleh membiarkan potongan hacky dalam kontrol versi mereka, karena hal ini membuat kualitas produk keseluruhan dipertanyakan.
sumber