Saya bekerja di Gudang Data yang sumber beberapa sistem melalui banyak aliran dan lapisan dengan dependensi seperti labirin yang menghubungkan berbagai artefak. Hampir setiap hari saya mengalami situasi seperti ini: Saya menjalankan sesuatu, itu tidak berhasil, saya melalui banyak kode tetapi berjam-jam kemudian saya menyadari bahwa saya telah berhasil membuat konsep peta proses dari bagian kecil dari apa yang sekarang saya tahu diperlukan suatu hari nanti, jadi saya bertanya kepada seseorang dan mereka memberi tahu saya bahwa aliran lain ini harus dijalankan terlebih dahulu dan bahwa jika saya memeriksa di sini (menunjukkan beberapa bagian yang tampaknya sewenang-wenang dari setumpuk dependensi kode lainnya), maka saya akan meminta melihat ini. Ini sangat membuat frustrasi.
Jika saya dapat menyarankan kepada tim bahwa mungkin itu ide yang baik jika kita berbuat lebih banyak untuk membuat ketergantungan antara objek lebih terlihat dan jelas, daripada menanamkannya secara mendalam dalam level kode rekursif, atau bahkan dalam data yang harus hadir karena dihuni oleh aliran lain, mungkin dengan merujuk pada paradigma perangkat lunak yang terkenal, dicoba dan diuji - maka saya mungkin dapat membuat pekerjaan saya dan semua orang jauh lebih sederhana.
Agak sulit untuk menjelaskan manfaat ini kepada tim saya. Mereka cenderung hanya menerima hal-hal sebagaimana adanya dan tidak 'berpikir besar' dalam hal melihat manfaat dari dapat mengonseptualisasikan seluruh sistem dengan cara baru - mereka tidak benar-benar melihat bahwa jika Anda dapat memodelkan sistem besar efisien maka itu membuat kecil kemungkinan Anda akan menemukan inefisiensi memori, stream-stopping kendala unik dan duplikat kunci, data omong kosong karena jauh lebih mudah untuk mendesainnya sesuai dengan visi asli dan Anda nantinya tidak akan mengalami semua masalah ini yang kita sekarang mengalami, yang saya tahu tidak biasa dari pekerjaan masa lalu, tetapi yang mereka anggap sebagai tak terhindarkan.
Jadi, adakah yang tahu tentang paradigma perangkat lunak yang menekankan ketergantungan dan juga mempromosikan model konseptual umum suatu sistem dengan tujuan untuk memastikan kepatuhan jangka panjang terhadap suatu cita-cita? Saat ini kami memiliki kekacauan yang sangat besar dan solusi untuk setiap sprint tampaknya adalah "tambahkan saja benda ini di sini, dan di sini dan di sini" dan hanya aku yang khawatir bahwa segalanya benar-benar mulai berantakan.
sumber
Jawaban:
Dapat ditemukan
Ketidakhadirannya mengganggu banyak organisasi. Di mana alat yang dibangun Fred lagi? Dalam repositori Git, tentu saja. Dimana?
Pola perangkat lunak yang muncul di pikiran adalah Model-View-ViewModel. Bagi yang belum tahu, pola ini adalah misteri total. Saya menjelaskannya kepada istri saya sebagai "lima widget melayang di atas meja berbicara satu sama lain melalui kekuatan misterius." Pahami polanya, dan Anda memahami perangkat lunaknya.
Banyak sistem perangkat lunak gagal mendokumentasikan arsitektur mereka karena mereka menganggap itu jelas, atau muncul secara alami dari kode. Tidak, dan tidak. Kecuali jika Anda menggunakan arsitektur yang terdefinisi dengan baik, orang-orang baru akan tersesat. Jika tidak didokumentasikan (atau terkenal), orang baru akan tersesat. Dan para veteran juga akan tersesat, begitu mereka telah meninggalkan kode selama beberapa bulan.
Adalah tanggung jawab tim untuk menghasilkan arsitektur organisasi yang masuk akal dan mendokumentasikannya. Ini termasuk hal-hal seperti
Adalah tanggung jawab tim untuk membuat hal-hal terorganisir dan dapat ditemukan sehingga tim tidak terus-menerus menemukan kembali roda.
By the way, gagasan bahwa "kode harus mendokumentasikan diri sendiri" hanya sebagian yang benar. Meskipun benar bahwa kode Anda harus cukup jelas sehingga Anda tidak perlu menjelaskan setiap baris kode dengan komentar, hubungan antara artefak seperti kelas, proyek, rakitan, antarmuka dan sejenisnya tidak jelas, dan masih perlu didokumentasikan.
sumber
Cara terbaik untuk mendekati masalah seperti ini adalah secara bertahap. Jangan frustrasi dan mengusulkan perubahan arsitektur yang luas dan meluas. Itu tidak akan pernah disetujui, dan kode tidak akan pernah membaik. Itu dengan asumsi Anda bahkan dapat menentukan lebar, perubahan arsitektur yang benar untuk membuat, yang tidak mungkin.
Apa itu mungkin adalah bahwa Anda bisa menentukan perubahan kecil yang akan membantu Anda dengan masalah khusus Anda hanya dipecahkan. Mungkin pembalik beberapa dependensi, menambahkan beberapa dokumentasi, menciptakan antarmuka, menulis naskah yang memperingatkan dari ketergantungan hilang, dll Jadi mengusulkan bahwa perubahan kecil sebagai gantinya. Lebih baik lagi, tergantung pada budaya perusahaan Anda, mereka mungkin mentolerir atau bahkan mengharapkan Anda untuk melakukan perbaikan seperti itu sebagai bagian dari tugas awal Anda.
Ketika Anda membuat perubahan kecil ini sebagai bagian rutin dari pekerjaan Anda, dan dengan contoh Anda mendorong orang lain untuk melakukannya juga, mereka benar-benar bertambah seiring waktu. Jauh lebih efektif daripada mengeluh tentang satu perubahan besar yang tidak diizinkan Anda lakukan.
sumber
Arsitektur.
Tidak ada tunggal, spesifik, prinsip atau praktik universal yang memecahkan masalah keterjangkauan dan pemeliharaan yang berlaku untuk semua aspek dari semua perangkat lunak. Tapi, istilah umum untuk hal-hal yang membuat proyek waras adalah arsitektur.
Arsitektur Anda adalah seluruh tubuh keputusan di sekitar setiap titik kebingungan potensial (atau historis) - termasuk penunjukan bagaimana keputusan arsitektur dibuat dan didokumentasikan. Segala sesuatu yang berkaitan dengan proses pengembangan, struktur folder, kualitas kode, pola desain, dan sebagainya adalah semua hal yang mungkin masuk ke arsitektur Anda, tetapi tidak satu pun dari mereka adalah arsitektur.
Idealnya, aturan-aturan itu disatukan oleh singularitas pikiran.
Sebuah tim kecil tentu saja dapat membuat arsitektur secara kolaboratif. Tetapi, dengan berbagai pendapat, ini dapat mengarah dengan cepat ke arsitektur yang sangat skizofrenia yang tidak berfungsi untuk menjaga kewarasan Anda. Cara paling sederhana untuk memastikan bahwa arsitektur Anda, dan banyak TLA dan pola di dalamnya, semua melayani keberhasilan tim dengan keunikan pikiran adalah dengan membuat satu pikiran bertanggung jawab untuk mereka.
Sekarang, itu tidak selalu memerlukan "arsitek" untuk menjadi kepausan . Dan, sementara beberapa tim mungkin ingin orang yang berpengalaman hanya membuat keputusan itu, poin utamanya adalah bahwa seseorang perlu memiliki arsitektur, terutama ketika tim tumbuh. Seseorang menjaga jari mereka pada denyut nadi tim, diskusi arsitektur yang moderat, mendokumentasikan keputusan, dan memantau keputusan dan bekerja untuk kepatuhan terhadap arsitektur dan etosnya.
Saya bukan penggemar berat seseorang yang membuat semua keputusan; tetapi, mengidentifikasi "arsitek" atau "pemilik produk teknis" yang bertanggung jawab untuk memoderasi diskusi arsitektur dan mendokumentasikan keputusan memerangi kejahatan yang lebih besar: Difusi tanggung jawab yang mengarah ke tidak ada arsitektur yang terlihat.
sumber
Selamat datang di Rekayasa Perangkat Lunak (dalam dua hal);) Ini adalah pertanyaan yang bagus, tetapi sebenarnya tidak ada jawaban yang mudah, karena saya yakin Anda sadar. Ini benar-benar kasus berkembang menjadi praktik yang lebih baik dari waktu ke waktu, melatih orang untuk menjadi lebih terampil (menurut definisi kebanyakan orang di industri ini adalah kompetensi yang biasa-biasa saja) ...
Rekayasa perangkat lunak sebagai suatu disiplin menderita dari membangunnya terlebih dahulu dan mendesainnya sebagai mentalitas, sebagian dari kemanfaatan dan sebagian karena kebutuhan. Itu hanya sifat binatang itu. Dan tentu saja peretasan dibangun atas peretasan dari waktu ke waktu, karena para pembuat kode yang disebutkan sebelumnya menempatkan solusi fungsional dengan cepat yang menyelesaikan kebutuhan jangka pendek sering kali dengan biaya memperkenalkan hutang teknis.
Paradigma yang perlu Anda gunakan pada dasarnya adalah mendapatkan orang yang lebih baik, melatih orang-orang yang Anda miliki dengan baik, dan menekankan pentingnya meluangkan waktu untuk perencanaan dan arsitektur. Seseorang tidak dapat dengan mudah menjadi "Agile" ketika bekerja dengan sistem monolitik. Diperlukan perencanaan yang matang untuk melakukan perubahan kecil sekalipun. Mendapatkan proses dokumentasi tingkat tinggi yang hebat juga akan membantu orang-orang penting memahami kode dengan lebih cepat.
Ide-ide yang dapat Anda fokuskan adalah (dari waktu ke waktu, secara bertahap) mengisolasi dan refactoring bagian-bagian utama dari sistem dengan cara yang membuatnya lebih modular dan dipisahkan, dibaca, dapat dirawat. Kuncinya dalam bekerja ini adalah dengan persyaratan bisnis yang ada, sehingga pengurangan utang teknis dapat dilakukan secara simultan dengan memberikan nilai bisnis yang terlihat. Jadi solusinya adalah meningkatkan praktik dan keterampilan, dan sebagian lagi mencoba bergerak lebih ke arah pemikiran arsitektur jangka panjang, seperti yang sudah saya katakan.
Perhatikan bahwa saya telah menjawab pertanyaan ini dari perspektif metodologi pengembangan perangkat lunak daripada perspektif teknik pengkodean karena sebenarnya ini adalah masalah yang jauh lebih besar daripada detail pengkodean atau bahkan gaya arsitektur. Ini benar-benar pertanyaan tentang bagaimana Anda merencanakan perubahan.
sumber
Saya suka ide @ RobertHarvey tentang konvensi dan berpikir itu membantu. Saya juga suka ide @ KarlBielefeldt untuk "mendokumentasikan saat Anda pergi" dan tahu itu penting karena itulah satu-satunya cara untuk menjaga dokumentasi terkini. Tapi saya pikir ide yang terlalu melengkung adalah bahwa mendokumentasikan cara menemukan semua bagian dari kode Anda, membangun, dan menyebarkannya adalah penting!
Baru-baru ini saya mengirim email ke proyek open source yang signifikan yang memiliki beberapa konfigurasi XML yang menghasilkan kode sama sekali tidak berdokumen. Saya bertanya kepada pengelola, "Di mana proses pembuatan kode XML ini didokumentasikan? Di mana pengaturan basis data pengujian didokumentasikan?" dan dia berkata, "Tidak." Ini pada dasarnya adalah proyek kontributor tunggal dan sekarang saya tahu mengapa.
Dengar, jika Anda orang itu dan Anda membaca ini, saya sangat menghargai apa yang Anda lakukan. Saya praktis menyembah hasil kerja Anda! Tetapi jika Anda menghabiskan waktu satu jam untuk mendokumentasikan bagaimana barang-barang Anda yang benar-benar kreatif disatukan, saya mungkin menghabiskan beberapa hari mengkodekan fitur baru yang dapat membantu Anda. Ketika dihadapkan dengan dinding bata "kurangnya dokumentasi bukanlah masalah," Aku bahkan tidak akan mencoba.
Dalam sebuah bisnis, kurangnya dokumentasi adalah pemborosan waktu dan energi. Proyek-proyek seperti itu sering kali dihabiskan untuk konsultan yang harganya lebih mahal, hanya agar mereka bisa mengetahui hal-hal dasar seperti, "di mana semua bagian dan bagaimana mereka cocok bersama."
Kesimpulannya
Yang dibutuhkan bukanlah teknologi atau metodologi, tetapi perubahan budaya; keyakinan bersama yang mendokumentasikan bagaimana hal-hal dibangun dan mengapa itu penting. Itu harus menjadi bagian dari tinjauan kode, persyaratan untuk pindah ke produksi, terkait dengan kenaikan gaji. Ketika semua orang percaya itu dan bertindak berdasarkan itu, segalanya akan berubah. Kalau tidak, itu akan menjadi seperti kontribusi open source saya yang gagal.
sumber
Untuk menjawab pertanyaan seperti yang diajukan (daripada memberi Anda saran untuk situasi khusus Anda):
Paradigma pemrograman yang dikenal sebagai pemrograman fungsional murni mensyaratkan bahwa segala sesuatu yang memengaruhi output suatu fungsi harus ditentukan dalam parameter input. Tidak ada dependensi tersembunyi atau variabel global atau kekuatan misterius lainnya yang bertindak tanpa terlihat di seluruh basis kode. Tidak ada "sementara Anda harus melakukan ini" penggabungan sementara.
sumber
Setiap gudang data berbeda tetapi ada banyak yang dapat Anda lakukan untuk membuat segalanya lebih mudah bagi diri Anda sendiri.
Sebagai permulaan, setiap baris dalam database memiliki DATE_ADDED dan DATA_UPDATED kolom sehingga kita bisa melihat ketika ditambahkan ke database dan ketika itu berubah. Kami juga memiliki kolom SOURCE_CODE sehingga kami dapat melacak di mana setiap bit data masuk ke sistem.
Selanjutnya kami memiliki alat umum yang berlari di seluruh gudang data kami seperti jenis, pencocokan tabel, slicers dan dicers dll.
Kode dipesan lebih dahulu disimpan ke minimum absolut dan bahkan kemudian, itu harus mengkonfirmasi ke berbagai gaya pengkodean dan pelaporan.
Saya akan menganggap Anda sudah terbiasa dengan suite ETL . Ada banyak fungsi yang Anda dapatkan secara gratis akhir-akhir ini yang tidak ada ketika saya berada dalam permainan sekitar satu dekade yang lalu.
Anda mungkin juga ingin melihat data mart untuk menyajikan versi gudang data Anda yang lebih ramah dan bersih. Bukan peluru perak tentu saja tetapi bisa membantu dengan masalah tertentu daripada harus membangun kembali / memperbaiki gudang data Anda.
sumber
Saya tidak tahu seberapa relevan dengan kasus Anda, ada beberapa strategi untuk membuat ketergantungan lebih terlihat dan pemeliharaan kode secara umum.
sumber