Perusahaan tempat saya bekerja menggunakan C ++ Builder 6. Kami telah mengembangkan kode asli sejak konsepsi. Produk andalan kami ditulis sepenuhnya dalam kode asli.
Memasuki .NET Framework dengan lonceng dan peluitnya. Aku terjatuh, hook, line, dan sinker. Saya meyakinkan manajemen bahwa .NET benar-benar harus menjadi kerangka kerja baru kami untuk semua pengembangan perangkat lunak baru dan bahwa kami harus mulai memigrasi garis kode yang ada secepatnya. Dengan semua keuntungan itu tidak perlu banyak meyakinkan. Mereka menerima lamaran saya seperti biasa.
Pada titik ini saya mulai mengembangkan aplikasi .NET pertama saya. Semuanya berjalan sesuai rencana. Proyek hanyalah salah satu komponen dari produk kami. Jadi saya langsung membuat penginstal untuk komponen baru ini. Sebagai perusahaan kami bangga membuat segala sesuatunya untuk pengguna semudah mungkin. Bahkan Microsoft dengan ribuan pengembang tidak membuat penginstal seperti yang kami lakukan. Saat Anda menginstal Microsoft CRM misalnya, Anda hanya akan mendapatkan daftar kegagalan dan prasyarat yang perlu diinstal sebelum Anda dapat melanjutkan. Bukan kita. Tidak pernah. Jika Anda membutuhkan sesuatu, kami akan menginstalnya untuk Anda.
Ini membuat penginstalan kami terasa sangat mudah. .NETFramework tidak terpasang? Tidak masalah! Kami akan melakukannya untuk Anda. Butuh klien SQL Native? Baik!
Masalahnya adalah ini, sekarang satu komponen tunggal dari solusi kami ditulis dalam .NET, itu memperumit proses instalasi dengan luar biasa. Bahkan sebelum saya dapat menginstal produk kami, saya perlu melakukan hal berikut:
Deteksi apakah prasyarat sudah diinstal
Instal jika tidak
Verifikasi bahwa itu berhasil dipasang
Prasyarat berikutnya
Untuk menginstal .NET Framework, saya memerlukan Penginstal Windows 4.5 terlebih dahulu. Tetapi ada versi yang berbeda untuk OS yang berbeda, jadi saya menambahkan deteksi OS dan meluncurkan EXE yang benar. Oh, .NET framework sudah dikemas dengan 2k8 dan exe penginstal tidak dapat berjalan di atasnya, Anda harus menjalankan OCSetup.exe dengan parameter untuk menginstalnya.
Dan begitu seterusnya. Kemudian SQL Express 2005 perlu diinstal. Ketergantungan meningkat sekali lagi.
Saya berdebat dengan manajemen bahwa bahkan Microsoft tidak membuatnya semudah ini bagi pengguna. Tanggapan mereka adalah bahwa tidak ada alasan bagi kami untuk tidak menjadi lebih baik dari mereka dengan cara ini. Saya tidak dapat membantahnya kecuali bahwa saya merasa ada alasan yang sangat bagus mengapa mereka melakukan pendekatan.
Tiba-tiba, pemasang kami sangat besar. Semua prasyarat untuk .NET, bahkan tidak berbicara tentang dukungan 64 bit yang memiliki rentang EXE terpisah untuk diinstal. Jadi sekarang sudah sampai pada titik di mana kami ingin pengguna dapat mengunduh evaluasi "cepat". Lelucon apa. Anda perlu mengunduh 500MB untuk menjalankan aplikasi 30MB. Sebagian besar paket penginstalan adalah prasyarat.
Manajemen merasa terlalu banyak ketergantungan / prasyarat. Saya mengerti sepenuhnya. Mereka menyarankan agar kami menjauh dari kerangka .NET, kembali ke tanah asal di mana segala sesuatunya masih "mudah" dalam hal pemasangan. Di sinilah salah satu bagian dari diri saya ingin membela .NET yang menjelaskan manfaat dalam gambaran besar, pengalaman pengembangan yang ditingkatkan, pemeliharaan yang lebih mudah, dan kualitas kode secara keseluruhan. Bagian lain dari diriku setuju dengan mereka dengan sepenuh hati! Mengembangkan di .NET hanya mengharuskan Anda menginstal terlalu banyak prasyarat lain yang mempersulit penginstalan.
Ya, beberapa pendukung NET akan mengklaim bahwa semuanya harus diinstal pada sistem operasi yang ditambal dan diperbarui. Ini benar, tetapi tidak semua pelanggan memiliki ini, dan hanya mengatakan "Maaf, perbarui dulu" tidak akan cukup. Ingat, kami bangga dengan pengalaman pengguna secara keseluruhan.
Kami sekarang mempertimbangkan untuk menulis kode asli lagi dan saya tahu kami kalah dalam hal kecepatan pengembangan dan semua keunggulan .NET. Tapi kami mendapatkan di bidang ini, baik kecil jika Anda melihat gambaran besarnya atau tidak. Karena kami memiliki keterampilan pengembangan kode asli dan .NET sebenarnya adalah tempat baru bagi kami, bahkan masuk akal untuk mundur.
Pertanyaan saya adalah ini: apa pandangan perusahaan Anda tentang masalah ini jika masalah itu benar-benar menjadi masalah dan seperti apa kasus bisnis yang saya usulkan kepada manajemen dengan asumsi saya ingin terus memigrasi semua produk kami ke .NET?
Jawaban:
Inilah alasan mengapa banyak perusahaan telah beralih ke pemasang web yang mengunduh semua prasyarat dengan cepat dari beranda Anda. Karena dalam kebanyakan kasus, OS memiliki 99% dari apa yang dibutuhkan (jika telah diperbarui menggunakan Pembaruan Windows).
Saya tidak akan meletakkan semuanya untuk x64 dan x32 di penginstal yang sama. Buat dua pemasang, satu untuk setiap arsitektur.
sumber
Suddenly, our installer is massive. All the prerequisites for .NET, not even talking about 64 bit support which has a whole seperate range of EXEs to install
Paint.NET membungkus instalasi prasyarat dengan baik tanpa memaketkan kerangka .NET dengannya secara default. Hasil akhirnya adalah eksekusi shim yang tidak terkelola yang memeriksa kerangka .NET dan beberapa hal lainnya dan memegang tangan Anda saat terinstal; semua diunduh dengan cepat saat diperlukan. Mereka kemudian menjalankan aplikasi WinForms yang pInvokes ke MSI untuk menyelesaikan instalasi lebih lanjut dengan kapas.
Layak Google.
Kemungkinan juga adalah fakta bahwa banyak mesin klien sudah memiliki beberapa versi .NET Framework yang diinstal karena ini adalah bagian dari Pembaruan Microsoft - membuatnya lebih mudah dikonsumsi di dunia bisnis.
Posting blog Paint.NET tentang pemasangan:
http://blog.getpaint.net/2008/08/24/the-paintnet-install-experience-part-1-version-3xx/
http://blog.getpaint.net/2008/08/25/the-paintnet-install-experience-part-2-version-40/ (terima kasih Rup!)
Membaca ceritanya sedikit lebih banyak, mungkin manajemen harus melalui kesulitan penerapan dengan aplikasi C ++ setidaknya sekali, tetapi sekarang selesai dan digolongkan sebagai "mudah". Luangkan waktu untuk menentang penerapan dan tunjukkan ini kepada manajemen dan, sembunyikan rasa sakitnya, tunjukkan kepada mereka betapa mudahnya menginstal :)
sumber
Mari kita kembali ke alasan pertama mengapa Anda ingin beralih dari kode asli ke kode .NET: ini lebih efisien untuk Anda, sebagai programmer. Banyak hal yang lebih mudah di .NET daripada di C ++ (atau bahasa asli apa pun yang Anda gunakan), sehingga Anda dapat mengembangkan aplikasi jauh lebih cepat.
Lalu, bagaimana waktu yang Anda habiskan untuk mengembangkan aplikasi dibandingkan dengan waktu yang Anda habiskan untuk mengembangkan penginstal? Bahkan jika Anda harus menghabiskan beberapa minggu untuk memasang penginstal (khususnya bagian pengaturan kerangka kerja), itu seharusnya kurang lebih satu - satunya waktu Anda harus melewatinya.
Untuk semua aplikasi di masa mendatang, Anda akan menggunakan penginstal yang hampir sama; Anda masih akan melakukan semua pemeriksaan prasyarat, tetapi alih-alih menyalin file ke C: \ Foo, Anda menyalin beberapa file berbeda ke C: \ bar.
Menurut saya, ini adalah pertanyaan ekonomi sederhana. Ya, lebih mahal untuk mengembangkan penginstal (baik / lengkap) untuk aplikasi .NET, tetapi jika itu adalah langkah yang perlu Anda ambil sekali untuk secara dramatis meningkatkan waktu pengembangan Anda, itu tidak perlu dipikirkan lagi. Laba atas investasi Anda mungkin dalam urutan minggu.
sumber
Saya merasa saya perlu menanggapi pernyataan ini:
Ya, beberapa pendukung .NET akan mengklaim bahwa semuanya harus diinstal pada sistem operasi yang ditambal dan diperbarui. Ini benar, tetapi tidak semua pelanggan memiliki ini, dan hanya mengatakan "Maaf, perbarui dulu" tidak akan cukup. Ingat, kami bangga dengan pengalaman pengguna secara keseluruhan.
Jika pengguna Anda bersikeras untuk menembak diri sendiri dengan mengoperasikan sistem yang menurut vendor tidak lagi sesuai untuk tujuan , maka tidak banyak yang dapat Anda lakukan untuk 'membantu' mereka. Saya sadar bahwa ini membuat saya terlihat seperti seorang aktivis yang menjengkelkan, tapi saya melihatnya dengan cara yang sama seperti pedagang manual - terserah pelanggan untuk memastikan bahwa lingkungan tempat mereka ingin saya bekerja adalah terdengar dan sesuai untuk produk. Jika tidak, saya akan menerima renumerasi lebih lanjut untuk melakukan pekerjaan itu juga, tetapi itu mungkin masih menyebabkan mereka bekerja ekstra karena mereka belum memiliki pandangan ke depan untuk memastikan bahwa mereka memahami apa yang mereka beli.
Saya percaya pelanggan perangkat lunak telah dibiarkan untuk tetap tidak peduli cukup lama, dan bahwa mereka sekarang harus diminta untuk memahami apa yang mereka beli. Mengoperasikan lingkungan TI perusahaan yang tidak ditambal dengan benar sama dengan terus menjalankan kendaraan yang telah ditarik kembali oleh produsen - paket layanan Windows setara dengan penarikan dalam banyak hal. Anda tidak diwajibkan secara hukum untuk mengajukan penarikan kembali, tetapi ini untuk kepentingan terbaik Anda sebagai bisnis dan Anda mungkin akan dimintai pertanggungjawaban atas kerusakan yang disebabkan oleh pengabaian tanggung jawab Anda.
sumber
Setiap aplikasi Visual C ++ memiliki prasyarat / dependensi eksternal juga: runtime 6.0, 2003, 2005, 2008, atau 2010? tidak ada SP, SP1 atau SP2? x86 atau x64? Versi Penginstal Windows apa yang dibutuhkan 2005 SP2? Dan apa 2008 SP1? Dan seterusnya.
Jadi, itu argumen yang tidak masuk akal! Seperti Joel grumblings tentang NET. Dan lihat apa sekarang !
sumber
Saya tidak melihat bagaimana ada lebih banyak prasyarat untuk .net melalui C ++ Builder. Anda mengeluh tentang SQL Server, tetapi Anda mengabaikan fakta bahwa Anda harus menginstal beberapa database dengan pembuat C ++ juga. Anda mengeluh tentang x64 vs x32, tetapi .NET tidak memerlukan perubahan apa pun .. exe yang sama berjalan pada keduanya (dan mengkompilasi sendiri secara optimal untuk lingkungan mana pun). Hal yang sama tidak dapat dikatakan tentang C ++ Builder. Anda mungkin memerlukan versi SQL server yang terpisah, tetapi sekali lagi itu akan berlaku untuk C ++ builder (kecuali Anda hanya menginstal x32 pada semuanya).
Ya, ada masalah versi penginstal baru, tetapi komponen tersebut tidak terlalu besar. Dan Anda benar-benar bisa mendapatkan penginstal untuk mengunduh dan menginstal hanya aprts yang diperlukan.
Pembuat C ++ mungkin lebih mudah bagi Anda karena Anda telah menginvestasikan waktu untuk membuat penginstal yang baik. Anda perlu melakukan hal yang sama untuk .NET, dan kemudian Anda dapat memilih berdasarkan masalah nyata .. dan bukan ini.
Ngomong-ngomong, alasan Microsoft memilih melakukan hal-hal dengan cara yang mereka lakukan adalah karena banyak pengguna, terutama pengguna korporat, tidak menghargai hal-hal yang diinstal untuk mereka secara otomatis (mungkin karena mereka memiliki aplikasi yang bergantung pada versi perpustakaan tertentu, dan Anda datang dan menghapusnya dengan versi baru yang tidak dapat dihapus dengan mudah).
Apa yang Anda pandang sebagai "mempermudah" bagi orang yang kurang berpengetahuan sebenarnya membuat hal-hal JAUH lebih sulit bagi mereka yang tahu apa yang mereka lakukan.
Inilah contoh yang bagus. Satu hal yang benar-benar saya benci adalah ketika saya menginstal aplikasi yang membutuhkan SQL Server, dan menginstal instance SQL Server-nya sendiri, meskipun saya mungkin sudah memiliki beberapa instance yang dapat digunakannya. Mudah bagi pemula, sulit bagi saya untuk mencoba dan membuat aplikasi Anda berfungsi dengan satu contoh saya.
sumber
Jika aplikasi Anda berjalan di bawah Mono, mengirimkan aplikasi Anda dengan runtime Mono mungkin tidak terlalu menyakitkan.
sumber