Kasus untuk atau melawan .NET (binatang itu) [ditutup]

92

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?

Maltrap
sumber
23
1 untuk cerita yang indah.
jgauffin
25
Apakah tidak ada pemasang rintisan untuk .net yang mengunduh komponen sesuai kebutuhan? Memaketkan penginstal lengkap tepat untuk rilis DVD tetapi jika mereka telah mengunduh evaluasi, Anda dapat secara realistis menganggap mereka sedang online untuk penginstalan online .net.
Rup
4
Ironisnya, beberapa buku .NET yang saya pelajari selama masa kuliah menyebutkan penerapan XCOPY sebagai salah satu manfaat utamanya :)
Madhur Ahuja
25
Anda lupa menyertakan ketergantungan Anda pada Windows. Itu beberapa gigabyte. Gunakan bootstrappers.
Hans Passant
13
Kisah yang menarik, harus diberi judul, "Bagaimana TIDAK mengubah cara seluruh perusahaan Anda menjalankan bisnis dengan membaca beberapa materi pemasaran dan sebelum mempelajari apa yang benar-benar perlu Anda lakukan untuk menggunakan kerangka kerja baru dengan benar"
Andrew Barber

Jawaban:

50

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.

jgauffin.dll
sumber
2
Saya tidak yakin Anda bisa mendapatkan paket instalasi x64 dan x86 ke dalam satu database MSI.
David Heffernan
Benar. Saya baru saja menanggapiSuddenly, 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
jgauffin
6
Perangkat lunak APAPUN memerlukan pemasang x86 dan x64 terpisah!
Merengek
4
abatishchev: Jika perangkat lunak tersebut hanya berupa biner .NET yang dikompilasi untuk arsitektur "Apa saja", tidak diperlukan penginstalan x86 dan x64 yang terpisah. Hanya ketika Anda harus menginstal kerangka .NET itu sendiri, Anda memerlukan penginstal terpisah.
Gabe
Jika Anda menulis penginstal web, harap ingat tentang orang-orang yang tinggal di belakang proxy. Bahkan Microsoft sering gagal mengingat tentang orang-orang yang tinggal di balik ISA mereka sendiri (saya melihat Anda pemasang Pengembang Web).
Egor Pavlikhin
39

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 :)

Adam Houldsworth
sumber
Terima kasih untuk tautannya. Bagian kedua adalah blog.getpaint.net/2008/08/25/… (Saya tidak bisa melihat tautan dari halaman pertama, meskipun sebenarnya ada di tajuk)
Rup
@Rup temuan bagus! Saya melihat sekilas dan tidak melihatnya. Saya akan mengubah jawaban saya untuk menunjukkannya.
Adam Houldsworth
Saya ingin tahu apakah ada penginstal open source yang mirip dengan versi 4.0 untuk Paint.net. Ini akan sangat berguna bagi siapa pun yang mendistribusikan aplikasi .net.
dbkk
1
@dbkk kau memberitahuku! Paint.NET digunakan untuk merilis kode untuk program dan penginstal, tetapi telah dihapus karena program copy-cat tidak memberikan kredit kepada penulis.
Adam Houldsworth
1
Jika Anda menginstal / memperbarui Paint.NET dengan visual studio terbuka, visual studio dapat rusak. Jadi menurut saya penginstal mereka masih perlu diperbaiki.
Greg
37

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.

Mark Rushakoff
sumber
1
+1 Pengalaman penginstalan yang baik di .NET sulit dijabarkan, tetapi seperti yang Anda katakan, seharusnya hanya dilakukan sekali. Manfaat memiliki sebagian besar barang boilerplate yang Anda perlukan menjadi System.Something.Class jauh tak ternilai harganya dan sebanding dengan satu atau dua sakit kepala yang disebabkan oleh installer.
Adam Houldsworth
2
Saya sangat menantikan rilis Wix Burn , bootstrapper pertama yang benar-benar berfungsi (saya harap). DotNetInstaller bersama dengan NSIS adalah apa yang saya gunakan saat ini. Tapi penanganan UAC itu masih jauh dari sempurna.
Uwe Keim
1
@Uwe Sepertinya Wix Burn akan dirilis pada waktu yang hampir bersamaan dengan Duke Nukem Forever .
dbkk
Itu akan bagus. Saya sudah melihat pratinjau screenshot dari Duke Nukem Forever . Jadi itu akan segera tiba ;-)
Uwe Keim
17

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.

Tom W.
sumber
2
Saya berpendapat bahwa penarikan kembali pabrikan sedikit berlebihan dalam hal analogi - Saya akan mengatakan, ini lebih seperti mengendarai mobil yang sudah ketinggalan zaman kantung udara atau ABS - fitur-fitur baru telah hadir untuk meningkatkan kualitas, dan meningkatkan bar kualitas. Barang-barang lama tidak tiba-tiba rusak atau berbahaya, sekarang hanya diterima sebagai di bawah standar dalam standar saat ini, saya yakin tim Windows 95 akan membantah bahwa pada saat mereka mengira standarnya cukup tinggi! :-) Masih saya setuju dengan Anda, ketidaktahuan tentang perkembangan kualitas bukanlah suatu kebajikan.
Adam Houldsworth
11
Saya tidak setuju 100%. Pelanggan telah dituntut untuk terlalu lama memiliki pengetahuan. Mengapa saya harus tahu apakah saya x86 atau x64? Mengapa saya harus mengetahui paket layanan yang saya jalankan? Izinkan saya membeli perangkat lunak Anda dan Anda mencari tahu apa yang diperlukan untuk menjalankannya. Perangkat lunak konsumen secara tak terelakkan bergerak menuju model iOS / Android / AppStore dan pengembang mana pun yang mengharuskan pengguna mengetahui apa pun selain detail paling dasar tentang perangkat mereka akan tertinggal.
kubi
1
@kubi tentu saja analogi iOS hadir dengan asumsi bahwa perangkat keras tidak berubah karena dikendalikan oleh vendor. PC sepenuhnya dapat dikonfigurasi sehingga beberapa pengetahuan atau kesadaran tentang persyaratan diperlukan - atau setidaknya kesadaran akan kebutuhan untuk memiliki seseorang bagaimana mengetahui apa yang mereka lakukan diperlukan. Saya tahu ukuran ban saya atau memberikan mobil saya kepada seseorang yang tahu apakah saya akan mengganti ban saya.
Adam Houldsworth
3
@kubi: Saya setuju dengan Anda tentang model pengguna biasa - perbedaannya di sini adalah bahwa tidak ada alasan bagi pengguna untuk tidak mendelegasikan semua masalah teknis seperti versi platform ke i) pabrikan atau ii) saya, sebagai pengembang. Oleh karena itu, mereka tidak menjadi masalah. Pengguna yang menjadi masalah adalah pengguna perusahaan yang tidak perlu memiliki suara atas konfigurasi mereka dan yang harus membayar penyedia TI yang kompeten untuk menyelesaikan masalah ini.
Tom W
4
Pengguna tidak peduli dengan argumen kami, betapapun suaranya. Mereka ingin menggunakan perangkat lunak Anda ... tetapi mungkin menyerah jika penginstalan terlalu menyakitkan. Mereka tidak peduli siapa yang salah - Microsoft, vendor, atau kesalahan mereka sendiri.
dbkk
7

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 !

abatishchev
sumber
3
1 untuk menautkan ke situs web Joel
Security Hound
-1 untuk menautkan ke situs Joels.
Phill
Anda dapat menautkan ke runtime secara statis sehingga Anda tidak memerlukan dependensi tersebut.
Tony Edgecombe
1
@Tony: Menghubungkan secara statis dalam 10-an abad ke-21? Mutlak mauvais ton ;)
abatishchev
+1 untuk menautkan ke situs web Joel
Shahid M Zubair
3

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.

Erik Funkenbusch
sumber
1

Jika aplikasi Anda berjalan di bawah Mono, mengirimkan aplikasi Anda dengan runtime Mono mungkin tidak terlalu menyakitkan.

FlappySocks
sumber