Perusahaan saya adalah perusahaan rekayasa kecil yang terdiri atas dua puluh orang. Semua pemrograman aplikasi di sini dilakukan di VB6 oleh dua orang, yang telah belajar sendiri VB6 dari latar belakang perakitan saat bekerja di sini selama 25+ tahun terakhir, dan saya sendiri.
Akibatnya, kode VB6 penuh dengan bau kode yang menghebohkan, seperti berton-ton variabel yang diketik secara ketat , fungsi yang sangat panjang, ratusan variabel global publik (beberapa di antaranya lebih disukai daripada melewati argumen dan mengembalikan nilai,) dan bukan objek tunggal. kelas. Refactoring hampir tidak mungkin, dan perubahan apa pun membutuhkan penggalian kode terlalu banyak, dan sekali dibuat, selalu menimbulkan lebih banyak lubang.
Bos saya menyadari bahwa VB6 adalah teknologi mati, dan bersedia mendengarkan permintaan saya untuk pindah ke .NET untuk pengembangan baru. Kami bergerak maju ke .NET, tetapi dia melihatnya sebagai cara untuk menjaga kompatibilitas dengan OS Windows yang lebih baru, bukan sebagai cara untuk menulis kode yang lebih baik.
Bagaimana saya bisa menjelaskan manfaat dari .NET bahasa lebih dari VB6, di luar sekadar up-to-date-ness? Apa yang bisa saya katakan untuk menekankan bahwa pindah ke .NET adalah langkah yang baik tetapi juga itu berarti paradigma pemrograman kita saat ini juga harus mulai berubah? Segera setelah bos saya mendengar bahwa Visual Basic .NET terlihat seperti VB6, saya tahu bahwa insting pertamanya adalah dengan hanya mengonversi kode berantakan lama kami menjadi .NET.
Saya mengerti bahwa hal itu akan mustahil untuk pola pikir perubahan siapa pun dalam satu sore, tapi bagaimana saya bisa setidaknya meyakinkan bos saya perakitan-toting bahwa hal-hal seperti variabel kuat-mengetik, kelas kustom, dan bidang swasta bukan Total buang-buang waktu dan energi?
sumber
Jawaban:
Jawaban Singkat: Tidak ada yang dapat Anda lakukan untuk mengubah pikiran mereka berdasarkan kriteria yang Anda cantumkan dalam pertanyaan yang semuanya bersifat teknis . Ini setara dengan perdebatan agama . Rute tercepat menuju kegagalan adalah dengan menghadirkan argumen yang bukan dari sudut pandang audiens, dalam hal ini pemilik bisnis .
Jawaban yang Lebih Panjang: Perubahan dalam bisnis didorong oleh satu hal dan hanya satu hal. Untung di garis bawah.
Mereka tidak hanya dapat membuang-buang waktu dan energi, tetapi yang lebih penting mereka menghabiskan uang Anda ! Anda harus dapat menunjukkan secara kuantitatif bahwa saran Anda akan menghasilkan untung besar dari waktu ke waktu. Hanya mengklaim kode bersih adalah "lebih baik" tidak cukup, karena kode bersih harganya jauh lebih mahal untuk diproduksi.
Jika Anda dapat mengartikulasikan bagaimana biaya menggunakan teknologi modern akan mengarah ke
($COST + X) * TIME = $PROFIT
, di mana nomor postiveX
non-sepele dan relatif singkat Anda dapat membuat skenario yang menarik.TIME
Cara lain untuk menghitung ROI (Return On Investment)
Jika ROI / ROR ini merupakan angka sepele, terutama dalam jangka waktu yang lama, Anda juga tidak memiliki banyak kasus bisnis.
Bagaimana perusahaan Anda benar-benar menghasilkan uang?
Sulit bagi pebisnis yang baik untuk mengabaikan uang yang ada di atas meja.
Tentu saja Anda harus dapat mendukung pernyataan Anda dengan fakta-fakta sulit. Ini berarti Anda harus dapat memberikan bilangan real yang menunjukkan Anda benar-benar memahami bisnis yang sebenarnya dan bukan hanya rincian teknis akademik.
Bukan hanya Pro
Juga memberikan analisis risiko terperinci dan risiko apa yang akan
$COST
terjadi jika itu terjadi, akan meyakinkan mereka bahwa Anda memiliki kasus yang realistis dan tidak hanya mengeluh bahwa Anda tidak ingin lagi melakukan VB6.Mengajari anjing tua trik baru
Mengubah atau Tidak Mengubah paradigma pemrograman agar se-idiomatis mungkin dari teknologi baru adalah bagian dari analisis risiko. Tetapi ini adalah argumen yang terpisah hanya setelah Anda membuktikan ada uang yang signifikan untuk dibuat dengan membuat perubahan di tempat pertama.
Orang bisnis cenderung mendengarkan kasus bisnis seperti halnya orang teknis cenderung mendengarkan kasus teknis. Semua kasus Anda dalam pertanyaan Anda mendukung manfaat teknis yang paling akademis dalam situasi Anda.
Ramalan
Saya membuat beberapa asumsi di sini aplikasi VB6, toko kecil, beberapa pengembang, 2 pengembang / pemilik bisnis lama menunjuk ke aplikasi ceruk pasar yang mungkin sudah matang (bug dan bekerja di sekitar dikenal), cukup lengkap fitur dan relatif stabil, terlepas dari dari "kekacauan" basis kode. Hal ini membuat saya percaya bahwa basis pengguna kecil juga tidak tumbuh secara dramatis dari tahun ke tahun, yang membawa saya ke kesimpulan berikut.
Bahwa benar-benar tidak akan ada alasan bisnis yang nyata untuk mengubah arah teknis dengan aplikasi ini. Dan porting ke VB.Net juga membuang-buang waktu karena Anda hanya akan memiliki kekacauan tetapi sekarang dengan lebih banyak, dan 2/3 dari tim pengembangan tidak didedikasikan untuk mempelajari sesuatu yang baru. Semoga berhasil.
sumber
Saya memiliki pelanggan yang produk andalannya ditulis dalam VB6 dan dikelola oleh 3 orang. Saya datang untuk membantu mereka karena mereka memiliki pasangan yang ingin mereka memanggil layanan web. Itu sangat sulit dilakukan dari VB6, tetapi mudah dari VB.NET atau C #, dan saya menulis mereka. NET assembly yang melihat ke VB6 seperti komponen COM sehingga mereka bisa menyebutnya. Kemudian mereka perlu menawarkan layanan web kepada seseorang. Kemudian mereka ingin menulis utilitas mandiri kecil dan itu akan perlu untuk mengenkripsi dan mendekripsi beberapa informasi, dan untuk menguraikan beberapa XML. Saya mengajar mereka untuk menulisnya di .NET. Selama 5 tahun terakhir ini, semakin banyak kode mereka dalam. NET meskipun produk unggulan tidak menyusut sama sekali. Ada bagian yang mereka benci - setiap aplikasi memilikinya - dan di mana mereka dapat, mereka mengeluarkan bagian-bagian ini (sekarang mulai menyusut) dan menempatkannya ke dalam layanan atau utilitas terpisah. Sisanya akan dikonversi holus-bolus ke .NET. Yup, nama variabel yang buruk dan semuanya - menurut saya ada banyak manfaat untuk pindah ke .NET bahkan jika mereka tidak mengubah paradigma pemrograman mereka saat ini. Ini termasuk:
Masih ada lagi, tapi tentu itu cukup?
Masalah paradigma pemrograman, pengetikan yang kuat, kompiler adalah teman Anda, enkapsulasi adalah teman Anda dan seterusnya ada di pikiran saya (dan saya dibayar untuk mendapatkan pendapat ini) sepenuhnya terpisah. Jika Anda ingin mati di bukit itu, silakan, tetapi Anda akan sekarat dengan salinan VB6 terbuka.
sumber
Saya mulai dengan proyek VB6 beberapa tahun yang lalu (sistem ERP kustom perusahaan) dan saya perlahan-lahan telah memigrasikannya ke .NET. Itu sekitar setengah jadi.
Pertama-tama, mengkonversi dari VB6 ke VB.Net hampir selalu merupakan ide yang buruk (dan saya melakukan banyak penelitian tentang itu). Terlalu banyak perbedaan. Juga, jika bos Anda berpikir bahwa VB.Net adalah "sama seperti VB6" maka dia sepenuhnya salah dan Anda harus mengubah pandangannya dengan cepat.
Strategi saya adalah untuk menjaga dua basis kode terpisah dan memeliharanya secara terpisah dan kemudian perlahan-lahan memindahkan seluruh modul dari VB6 ke .NET tetapi hanya ketika ada perubahan signifikan yang akan terjadi pada modul itu, sehingga kami dapat mengamortisasi sebagian biaya. Meski begitu, menulis ulang adalah tugas besar yang mahal dan berisiko.
Ada dua cara untuk mengintegrasikan VB6 yang ada dengan kode .NET baru (dan Anda mungkin akan melakukan itu untuk waktu yang sangat lama, jadi sebaiknya Anda terbiasa dengan ide itu). Cara pertama yang saya lakukan adalah mulai menulis modul kecil di .NET dan kemudian memiliki aplikasi VB6 utama meluncurkan .NET dieksekusi lewat beberapa parameter baris perintah. Ini berhasil, tetapi berhati-hatilah bahwa .NET memiliki waktu mulai start dari 4 hingga 10 detik, sehingga Anda terbatas pada apa yang dapat Anda lakukan dengan cara ini.
Setelah mulai terasa sangat menyakitkan, saya membalik strategi dan menggunakan metode dari artikel CodeProject ini untuk menampilkan formulir VB6 yang ada di aplikasi .NET utama saya. Setelah saya melewati rute ini, saya hanya bisa mengeluarkan satu waktu .NET startup, dan menggunakan ClickOnce untuk penyebaran, yang merupakan anugerah dibandingkan dengan bagaimana aplikasi VB6 dikerahkan sebelumnya.
Yang mengatakan, inilah keuntungan yang saya temukan di .NET lebih dari VB6:
Action
danFunc
jenisDecimal
tipe (VB6 tidak pernah memiliki tipe desimal kelas satu, meskipun memiliki CDec)Guid
Kerugian VB6:
Agar adil, berikut adalah beberapa kelemahan mempertahankan solusi gabungan VB6 / .NET:
Sekarang, seperti yang Anda mengisyaratkan, Anda benar-benar harus membangun kembali arsitektur Anda dari bawah ke atas jika Anda mulai menulis kode dalam .NET. Namun, sepertinya tidak ada orang di perusahaan Anda yang akrab dengan dunia pemrograman .NET dan / atau Java, yang merupakan asal banyak pola dan praktik yang umum bagi kerangka kerja perusahaan besar.
Jika Anda mengambil seseorang yang terbiasa menyeret tombol pada formulir, mengklik dua kali pada itu, dan menulis beberapa string SQL langsung di pengendali event klik, dan itu telah bekerja untuk mereka, sangat sulit untuk membuat mereka melihat keuntungan mengikuti SOLID prinsip desain. Di sisi lain, jika Anda menggigit peluru dan memutuskan bahwa semua kode baru akan tercakup 90% atau lebih besar dengan tes unit otomatis, maka Anda akan segera menyadari bahwa itu sangat sulit dilakukan kecuali jika Anda mengadopsi prinsip-prinsip desain SOLID.
Jadi, Anda harus benar-benar melihat kenyataan situasi. Dalam kasus saya, saya adalah satu-satunya programmer, dan saya bertekad untuk membuat semua kode baru diuji unit, meskipun saya tidak punya pengalaman dengannya. Saya tidak bisa cukup menekankan betapa ini berdampak negatif pada apa yang bisa saya lakukan pada minggu pertama, bahkan bulan-bulan pertama. Namun, saya bertekad untuk melakukannya, dan saya menerima dukungan dari manajemen. Kebanyakan orang tidak memiliki kemewahan itu. Sekarang saya punya banyak kode dan saya baru saja menyelesaikan refactoring besar dengan hampir tidak ada masalah.
Secara realistis, Anda tidak akan melakukan tes unit, yang berarti lebih sulit untuk membenarkan prinsip-prinsip seperti injeksi ketergantungan kepada rekan satu tim Anda. Anda harus menjual .NET pada manfaat selain manfaat arsitektur. Anda harus fokus pada dukungan perpustakaan yang lebih baik dan alat yang lebih baik. Itulah satu-satunya hal yang akan beresonansi. Saya akan menyarankan yang berikut dalam demo Anda:
DataGridView
di jendela utamaAction
parameter. Lakukan ini terlebih dahulu dengan melewati metode lain sebagai parameter, dan kemudian meniup pikiran mereka dengan melewati delegasi anonim menggunakan sintaks lambdaList<T>
danDictionary<T1,T2>
koleksi kelas dan menunjukkan bagaimana menciptakan kuat kode diketik (VB6 memiliki hal serupa, tapi itu dinamis diketik)foreach
loop yang memalukan paralel, gunakanSystem.Diagnostics.Stopwatch
untuk mengukur waktu yang diperlukan untuk mengeksekusi, kemudian gunakan pustaka paralel tugas untuk mengubah loop menjadiParallel.Foreach
loop dan perlihatkan kecepatan, dengan asumsi Anda menggunakan mesin multi-core.Itu yang akan saya lakukan.
sumber
Tampaknya bagi saya bahwa ini adalah situasi di mana Anda harus mengenakan topi politisi Anda alih-alih pemrograman Anda. Anda harus sangat berhati-hati bagaimana Anda membuat argumen dan bahwa Anda tidak memusuhi audiens Anda. Pastikan bahwa Anda menunjukkan kelebihan .Net alih-alih menunjukkan kelemahan VB. Memperdebatkan kelemahan VB akan menempatkan rekan kerja Anda pada posisi di mana mereka perlu mempertahankan keputusan mereka dan memaksa mereka untuk mengakui bahwa bahasa yang memiliki investasi besar adalah bahasa yang buruk. Sebagai gantinya, perlihatkan kepada mereka bagaimana pindah ke .NET akan menambah alat yang mereka miliki untuk mereka dan membuat hidup mereka lebih mudah.
Cara ideal saya untuk membuat argumen ini adalah menemukan tugas atau bagian kode yang setiap orang terus komplain dan memperbaikinya menggunakan .NET. Saya tidak terlalu terbiasa dengan VB, tapi di sini ada daftar singkat tugas-tugas menjengkelkan yang mungkin akan dibuat lebih mudah dengan menggunakan .NET daripada VB.
Pilih salah satu dari tugas-tugas di atas, atau tugas lain yang khusus untuk proyek yang biasanya Anda kerjakan, dan duduklah bersama mereka dan tulislah beberapa kode, dari awal, yang menangani masalah dengan cepat dan mudah. Sebenarnya menunjukkan proses penulisan kode akan memamerkan alat-alat yang membawa versi VS yang lebih baru ke meja dan memberikan bukti bahwa pindah ke .NET tidak akan membuat hidup siapa pun lebih sulit.
Menuju hal ini, Anda benar-benar, secara positif harus melakukan pekerjaan rumah Anda. Jika Anda tidak yakin bagaimana alat bekerja, atau memiliki kode yang tidak berfungsi dengan benar, Anda tidak akan pernah bisa memenangkannya ke pihak Anda.
sumber
Hal pertama yang Anda katakan adalah bahwa VB6 tidak lagi didukung oleh Microsoft. Meskipun Anda dapat tetap menjalankannya, Anda harus memahami bahwa opsinya dalam jangka panjang adalah nihil. Saya bahkan tidak tahu apakah aplikasi VB6 akan berjalan di Windows8, atau apakah IDE itu sendiri akan berjalan di Win8.
Jadi, Anda secara efektif harus menulis ulang pada akhirnya, dan jika itu masalahnya, Anda sebaiknya mulai sekarang daripada nanti, memberi Anda banyak waktu untuk mencari tahu teknologi baru mana yang ingin Anda gunakan (sementara VB.NET terdengar ideal, ini adalah kesempatan Anda untuk mencoba sesuatu yang lebih canggih, seperti membuat aplikasi berfungsi pada iPad).
Dalam jangka pendek, Anda dapat mengurangi sedikit masalah dengan memperkenalkan bagian baru sebagai komponen COM untuk dikonsumsi oleh aplikasi, semoga komponen ini akan tetap ada ketika penulisan ulang yang tidak terhindarkan terjadi.
Saya tidak akan repot-repot dengan argumen teknis mengapa. NET lebih baik daripada VB6. Anda akan sampai pada argumen yang kalah di sana, teknologi itu sendiri tidak pernah menyelesaikan masalah. Terserah Anda bagaimana Anda menerapkan teknologi itu, dan jika aplikasi VB6 menyelesaikan masalah untuk Anda, tidak ada argumen untuk dijawab. Anda dapat berbicara tentang kemudahan perawatan, atau ketersediaan staf yang berpengalaman, tetapi begitu Anda mengakui bahwa staf Anda yang ada tidak memiliki keahlian dalam teknologi baru dan harus dilatih, dan kemudian mengambil waktu untuk sepenuhnya mencapai kecepatan. dengan itu. Anda juga harus menjawab pertanyaan tentang bagaimana banyak penulisan ulang berakhir lebih buruk daripada proyek asli (kadang-kadang karena kurangnya keahlian, kadang-kadang karena desain yang terlalu besar).
sumber
Beri dia analogi "mobil lama baru vs mobil":
sumber
Pertama saya pikir Anda harus mengubah pertanyaan (bukan pada stackexchange tetapi dalam perusahaan Anda). Ini tidak begitu banyak mengapa. Net lebih baik dari VB6, tetapi lebih seperti karena VB6 tidak lagi didukung sekarang saatnya untuk pindah, tetapi untuk apa. Tanyakan kepada para pemangku kepentingan seperti apa seharusnya teknologi 'baru' itu? Mungkin bukan .Net.
Tapi sepertinya Anda perlu pindah ke teknologi baru DAN mendapatkan beberapa pola dan praktik pemrograman yang baik. Jawaban untuk bagian kedua jauh lebih sulit. Anda mungkin harus melakukannya di bagian kecil aplikasi dan membuktikannya layak sementara, itu lebih stabil, lebih mudah dirawat, dll.
sumber
Beri tahu atasan Anda untuk menulis dua iklan yang diinginkan. Satu untuk pengembang C #. Satu untuk ahli VB6. Letakkan mereka di sana. Bandingkan hasil.
sumber