Bagaimana menangani skrip “berguna sekali pakai” ditangani?

8

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?

Frank Kusters
sumber
Kami memiliki folder di kontrol versi kami yang disebut "taman bermain", digunakan untuk menguji hal-hal dan hal-hal seperti skrip dll. Tidak ada standar yang ketat, tetapi bermanfaat!
EauRouge
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?
Laiv
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.
Laiv

Jawaban:

6

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?

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.

Steve
sumber
3

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.

Jonathan van de Veen
sumber
3

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.

Tanda Kinerja Tinggi
sumber
2

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:

  1. Jika skrip cukup umum, Anda dapat meng-host-nya di repositori terpisah. Jika skrip sangat berpusat pada proyek, ini mungkin tidak berfungsi.
  2. Host skrip dalam repositori yang sama di direktori mereka sendiri. Sebagai contoh, di perusahaan saya proyek kami biasanya memiliki cli/direktori yang berisi beberapa skrip baris perintah, biasanya dimaksudkan untuk dijalankan satu kali untuk menginisialisasi lingkungan, mengimpor potongan data tertentu, dan sebagainya.
  3. Ini bisa menjadi pilihan yang buruk tergantung pada apa kebutuhan Anda, tetapi jika Anda memiliki alasan Anda tidak dapat melakukan kode yang tidak secara eksplisit mengikuti standar Anda, dan / atau Anda memiliki pengembang yang tidak mau menulis skrip jika mereka harus mengikuti standar itu, Anda dapat meng-host file pada drive bersama atau yang serupa. Ini mungkin bukan solusi terbaik jika Anda membutuhkan semua manfaat dari kontrol sumber - namun ini dapat bermanfaat dalam beberapa keadaan (terima kasih Doc Brown untuk suntingan ini)

Dengan salah satu dari dua opsi pertama, Anda dapat memilih untuk memberlakukan standar pengkodean yang lebih longgar di repositori lain atau direktori.


sumber
8
Saya tidak berpikir bahwa menulis skrip dibuang "berkualitas rendah" berarti Anda memiliki etos kerja yang buruk. Saya secara rutin menulis skrip quick-n-dirty untuk mengotomatiskan pekerjaan (bahkan jika saya hanya bisa menggedor xargs / sed / etc. Satu-liner langsung di shell) dan mengkomitnya ke repo, tetapi saya tidak akan pernah mendorong kode produksi yang ditulis dalam dengan cara yang sama. Mereka adalah dua hal yang berbeda ( sangat berbeda).
Mael
Saya setuju. OP mengatakan bahwa jika skrip harus berkualitas tinggi, pengembang akan enggan untuk menulis / mengkomitnya. Itu bendera merah bagi saya. Saya tidak mengatakan skrip CLI harus memiliki kualitas kode tinggi - milik saya berfluktuasi. Namun, jika Anda mengkomit ini ke VCS, Anda harus menulis setidaknya skrip yang dapat dibaca yang bisa dipertahankan oleh pengembang lain jika Anda tertabrak bus. Alat untuk pengembang lebih dapat diterima memiliki kualitas lebih rendah, tetapi itu tidak berarti mereka seharusnya.
Ini adalah jawaban yang bagus (+1). Namun, opsi 3 tidak harus seburuk yang dijelaskan di sini, dan tidak harus hanya solusi jika terjadi "masalah politik". Ini adalah solusi untuk apa pun yang tidak terlalu jelas apakah kontrol versi akan diperlukan (seperti dokumen tambahan, konsep, dan terkadang skrip). Tentu saja, ketika skrip yang termasuk dalam proyek tertentu yang sudah ada dalam kontrol versi, skrip juga harus ada.
Doc Brown
Poin bagus, Dok. Saya buru-buru mengedit poin 3 agar tidak terlalu kritis terhadap dirinya sendiri.
1

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.

  • Tuliskan apa tugas-tugas ini dan langkah-langkah untuk menyelesaikannya.
  • Publikasikan dokumen itu di beberapa situs web atau intranet internal
  • Catat seberapa sering tugas dilakukan dan berapa lama waktu yang dibutuhkan dalam sistem tiket.
  • Otomatiskan langkah-langkah manual dengan program, tetapi jangan lewati kontrol sumber, pengujian, dukungan dll. Kembangkan alat admin yang tepat.
  • Cobalah untuk menggunakan alat pihak ke-3 daripada mengembangkan solusi Anda sendiri jika memungkinkan. Ini akan memudahkan karyawan baru

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

Ewan
sumber
1

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.

Risikonya adalah orang lain tidak akan dapat menggunakan kode karena mereka tidak dapat menemukan atau memahaminya.

Referensi itu sendiri menangani findmasalah tersebut. Penulis skrip dan / atau orang yang membuat referensi mungkin dapat membantu understandmasalah 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).

Dan Cornilescu
sumber
0

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:

  • Contoh repositori EF generik
  • Serializer / deserializer sederhana
  • Aplikasi kecil yang menggabungkan dua file CSV dan menghasilkan file CSV baru.

Namun:

  • Contoh EF tidak memiliki unit implementasi kerja dan tidak mengandung apa pun kecuali opsi CRUD yang paling mendasar.
  • Serializer didasarkan pada XmlSerializer lama dan hampir tidak mungkin untuk menukarnya dengan yang lain. Ini juga memiliki masalah referensi lingkaran besar.
  • Aplikasi ini hardcoded untuk mencari a.csv dan b.csv di direktori aplikasi, dan mengeluarkan ab.csv hardcoded di direktori yang sama. Tidak ada pemeriksaan jika file ada, tidak ada penanganan nullreference.

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:

  • Tidak mendokumentasikan diri.
  • Sedikit atau tidak ada gaya pengkodean selain gaya hack saya sendiri.
  • Tidak ada penanganan kesalahan.
  • Tidak semua perangkap jelas (misalnya referensi melingkar dalam serializer)

Tetapi sifat yang paling umum dibagikan dari semua cuplikan ini:

  • Bahkan jika saya membuat dokumentasi, mungkin Anda butuh waktu lebih lama untuk membaca dan memahaminya daripada membuat sesuatu sendiri!

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.

Flater
sumber