Apa yang saya sukai dari .NET
.NET memiliki sejarah panjang. Tidak sama dengan Java, tentu saja, tetapi juga menarik. Anda juga perlu memisahkan .NET Framework dan .NET Core. Kedua - IMHO apa .NET seharusnya di tempat pertama. Mari kita setuju bahwa ketika saya hanya mengatakan .NET maksud saya .NET Framework. Saya akan menulis tentang .NET Core dengan tambahan.
Di .NET sendiri, saya menyukai kehadiran ekosistem, setidaknya, tetapi mengetahui satu bahasa pemrograman, Anda dapat menulis tanpa masalah:
- ruang server;
- Desktop;
- seluler (Windows Seluler);
- web (halo Silverlight, LightSwitch, ASP.NET WebForms, ASP.NET MVC);
- kios aplikasi;
- permainan.
Hambatan untuk masuk ke .NET cukup rendah, dibantu oleh acara dan panduan ekstensif dari Microsoft. Kehadiran ekosistem memungkinkan pengembang untuk tidak memikirkan perpustakaan mana yang harus dipilih, semuanya sudah diketahui.
Apakah Anda ingin web? Ambil ASP.NET. "Kami, sebagai perusahaan besar (Microsoft), menggunakannya dan akan cocok untuk Anda." Dan dalam segala hal.
C # adalah Java yang ditingkatkan, di sini Anda memiliki kehidupan yang mudah dengan properti otomatis, dan model pemrograman asinkron yang mudah, LINQ yang, sebagai tambahan, dapat diperpanjang dengan penerapan penyedia. Misalnya, LINQ ke SQL, LINQ ke XML, dan seterusnya.
EntityFramework, yang dikelola oleh Microsoft dan dapat dimengerti berjalan seperti jarum jam dalam banyak aspek. Tidak mungkin untuk tetap diam tentang migrasi di EntityFramework. Saya mengubah modelnya, migrasi dibuat dan Anda tidak perlu terus-menerus menulisnya dengan tangan.
Nuget telah menjadi titik fokus dari seluruh komunitas .NET: beragam perpustakaan dari Microsoft dan komunitas.
.NET Core dapat dianggap sebagai perbaikan bug untuk Microsoft. Semua perubahan telah terjadi, antara lain, berkat CEO Microsoft - Satya Nadella, yang menunjukkan kepada seluruh dunia bahwa "MS mencintai Linux". Kami mendapat pesaing Java.
Mungkin seseorang akan berkata: "Apakah ini hanya .NET Framework?"
Jawaban saya adalah: βJava telah mendapatkan popularitas justru karena fokus OpenSource-nya. Bisnis tidak takut bahwa besok beberapa orang aneh dari Sun atau Oracle akan datang dan mulai memompa hak mereka. .NET Framework awalnya merupakan platform berpemilik, tetapi berkat manajemen yang memadai oleh MS, mereka telah memperbaiki kekurangan ini."
Argumen paling penting dalam membandingkan kedua platform adalah, tentu saja, usia dan stabilitas Java. Yang saya maksud dengan stabilitas adalah standar dalam komunitas, persentase pengembang berpengalaman yang lebih besar, dan sejumlah besar perusahaan besar yang menggunakan Java. Dan Java juga "kompilasi sekali dijalankan di mana-mana".
Saya melihat .NET Core sebagai pesaing penuh untuk Java. Bahasa dan toolkit tersedia di GitHub di bawah lisensi MIT.
Apa lagi yang telah ditambahkan sejak rilis .NET Core:
- dukungan untuk OS Linux, macOS muncul;
- bekerja di lingkungan containerization telah ditingkatkan (.NET Core memilih parameter yang sesuai saat runtime, tergantung pada lingkungan peluncuran);
- Xamarin. Pengembang memiliki kemampuan untuk menulis aplikasi yang gesit untuk iOS dan Android;
- Arah IoT mulai berkembang;
- WPF menjadi proyek sumber terbuka dan ada banyak harapan untuk lintas platformnya;
- Pengembangan WEB menjadi lebih mudah diakses berkat Blazor (Anda dapat melakukan WebAssembly dan merender semuanya di sisi server).
Intinya adalah sebagai berikut: pada tahun 2020, mengetahui bahasa pemrograman C #, Anda dapat menulis apa pun yang Anda inginkan tanpa kruk seperti, misalnya, browser di bawah kap elektron :)
Apa yang saya tidak suka tentang .NET?
Adil? Memahami bahwa Microsoft telah secara tidak sengaja menyalin Java di banyak bidang :) Biarkan saya mengingatkan Anda bahwa sebelum .NET, rekan-rekan MS mencoba menerapkan representasi Java mereka sendiri: J ++ diikuti oleh J #.
Tampaknya niatnya baik. Mereka ingin Javis punya pilihan. Tapi, MS saat itu tidak berbuat apa-apa untuk kepentingan developer. Cukup membaca artikel ini di Wikipedia ("Pelihara, bangun, dan hancurkan").
Di .NET Framework pada saat pengalaman pertama saya, saya tidak suka:
- struktur kompleks file proyek;
- masalah abadi dengan dependensi pengikatan saat runtime;
- VisualStudio - sangat lambat dan lamban: D;
- hanya Windows, waktu itu saya sudah tertarik dengan OS GNU/Linux;
- Pengembangan Windows Mobile: sangat buruk dalam segala hal.
Memperkenalkan Jawa
Setuju?)
Pada bulan Februari 2015, saya mengambil pekerjaan sebagai pengembang Java. Saya tidak memiliki pengalaman dalam mengembangkan aplikasi di Jawa, tetapi saya berada di mata pelajaran tersebut, karena saya banyak membaca tentang bahasa tersebut. Kami menulis di Java 7, dan hari pertama pemrograman sepertinya tidak terlalu sulit. βSeperti C#, hanya canggung,β pikirku.
Proyek saya diimplementasikan di JavaEE (dijalankan di bawah TomEE), frontend di Vaadin. Secara umum, saya tidak mengalami masalah khusus dalam berinteraksi dengan teknologi baru bagi saya, melainkan di tempat-tempat yang membuat saya shock.
Saya kagum dengan banyaknya file konfigurasi XML, pengaturan Maven untuk 300 baris. Kehadiran sejumlah besar anotasi menakutkan. Di sini orang tidak bisa tidak menyebutkan kecintaan Javis pada pemrograman berorientasi aspek.
Secara paralel, perusahaan yang sama sedang mengembangkan JavaSE, menggunakan Spring 4 sebagai kerangka kerja. Saya masih tidak sepenuhnya mengerti mengapa semua orang tidak menyukai proyek di Spring, tetapi pemimpin tim terus berdebat dengan pengembang di Spring. Menurut pengamatan saya, ada terlalu banyak pembuatan kode, dan karena itu, UI-nya sendiri rumit.
Membangun proyek (JavaEE) di Maven untuk pertama kalinya membutuhkan waktu 20 menit.Rasanya saya mengunduh semua perpustakaan di dunia. Untuk ini, kami dapat mengucapkan terima kasih kepada Maven, sebagai kolektor paling asli. Sebenarnya, saya tidak tahu tentang keberadaan Gradle saat itu.
Proyek yang saya lakukan adalah menerapkan CRM dengan bias terhadap perusahaan perjalanan. MVP dinaikkan cukup cepat, tetapi sayangnya, proyek itu ditutup karena kekurangan dana.
Mengapa saya menyukai Java 7
- Jawa stabil;
- Java kompatibel ke belakang;
- ada banyak implementasi dari toolkit yang berbeda. Pengembang memiliki pilihan untuk membangun proyek: maven, Gradle, atau umumnya `javac` :);
- ada banyak artikel dan pengetahuan di Internet tentang pemecahan masalah yang mungkin dihadapi pengembang;
- Java memiliki implementasi open source dalam bentuk OpenJDK;
- Java secara aktif digunakan dalam pengembangan sistem keuangan; Ambang untuk memasuki Java, terutama setelah pengalaman di .NET, menurut saya tidak terlalu tinggi;
- Tentu saja IDE: IntelliJ IDEA sangat bagus dalam segala hal.
Apa yang saya tidak suka tentang Java 7
pada saat pengalaman pertama saya di 2015
- kurangnya ekosistem: pengembang harus mencari perpustakaan yang cocok di antara ratusan;
- masyarakat sering sangat tidak setuju;
- API berantakan saat bekerja dengan tanggal dan waktu;
- Maven: mengapa begitu lambat dan bertele-tele?
- JavaEE: idenya bagus, implementasinya buruk. Siapa yang datang dengan begitu banyak kustomisasi deklaratif dalam XML?
- API yang tumbuh lambat;
- kurangnya fungsi tingkat tinggi dan alternatif LINQ;
- Java 7 sendiri sangat bertele-tele.
Jadi saya kembali ke .NET
Tidak persis mengapa, tentu saja, tetapi ketika saya mendapat pekerjaan sebagai pengembang Java untuk sebuah proyek, saya dijanjikan banyak tugas, tugas yang menarik, dan banyak kesulitan. Faktanya: sedih, tidak start-up, tidak ada highload sama sekali.
Ketika saya diminta untuk kembali ke proyek .NET lama dengan promosi, saya langsung setuju. Tugasnya akrab, pekerjaan di staf, pendanaannya normal - peluang bagus untuk membuktikan diri Anda dalam jangka panjang.
Apa yang telah berubah di .NET
Saya beralih kembali ke .NET pada tahun 2016. Tepat ketika rekan-rekan saya dari tempat kerja lama mereka yang baru mulai menulis platform bisnis dari awal. Idenya adalah sebagai berikut: untuk mengembangkan sistem akuntansi dan kontrol operasional, yang dapat diperluas dengan bantuan modul. Artinya, sesuatu seperti SAP PM, hanya dalam kategori anggaran. Anda dapat membaca tentang SAP PM di sini .
Tumpukannya seperti ini: .NET 4.5, ASP.NET MVC 5 (Owin), EF Core, MS SQL Server. Frontend pada SAP UI5 adalah kerangka kerja JS open source yang memungkinkan Anda membangun aplikasi bisnis menggunakan kontrol yang sudah jadi.
Secara paralel, .NET Core aktif berkembang, jadi saya dihadapkan pada tugas untuk memindahkan proyek dari .NET Framework 4.5 ke .NET Core 2.1. Itu sangat menyenangkan dan datang dengan banyak refactoring. Pada saat yang sama, kami menggergaji monolit menjadi semacam layanan, tetapi terpisah.
Sebenarnya, ketika saya sedang refactoring dan mengumpulkan keinginan rekan-rekan saya, kerangka web kecil lahir di dalam dinding perusahaan. Saya menamakannya NextApi.
Mengapa NextApi? Ketika di versi sistem sebelumnya, programmer senior dan saya sedang mengembangkan API baru, kami menyebutnya "berikutnya" - Berikutnya. Dan nama kerangka kerja baru adalah penghargaan kecil untuk kerja tim. Tautan ke proyek di sini .
Dalam hal ini misi saya tercapai: perusahaan menerima layanan yang bekerja pada satu perangkat. Kami berhasil menggunakan kembali logika bisnis pada klien seluler dan desktop, Offline terlebih dahulu. Kami juga berhasil lolos dari Windows Server sepenuhnya. Saya harus meninggalkan mesin virtual kecil untuk membangun aplikasi WPF, tetapi ini sepele.
Saatnya move on
Setelah saya mentransfer proyek ke .NET Core dan mengolahnya menjadi layanan, sesuatu yang baru dalam kehidupan pengembangan saya tidak lagi cukup bagi saya. Saya berada di posisi pemimpin tim, kami berhasil meluncurkan produk dengan beberapa pelanggan besar, ada cukup banyak tugas, masalah diselesaikan, tetapi saya ingin tantangan dan kesempatan untuk mengungkapkan diri.
Pada saat yang sama, ada pemikiran di kepala saya tentang permintaan untuk pengembang .NET. Di Kazakhstan, berbeda dengan negara-negara Barat, tidak ada permintaan yang tinggi untuk teknologi ini. Hal yang sama tidak dapat dikatakan tentang pengembang Java.
Jadi saya meninggalkan proyek dan setuju untuk membawa kerangka kerja yang dikembangkan ke OpenSource. Sangat sulit untuk melakukan ini, seperti yang mereka katakan, saya harus "keluar dari zona nyaman". Tapi saya dengan tegas memutuskan - kita harus bergerak maju.
Pilihan saya jatuh pada Beeline Kazakhstan - saya ingin mengerjakan layanan populer. Selain itu, saya mengerti apa tugas dan basis kliennya, dan Java cukup dekat dengan saya. Juga, menarik untuk memiliki kesempatan untuk melihat semua perkembangan dari sisi pengembang .NET, untuk mempelajari lebih lanjut aspek perancangan sistem beban tinggi dan meninggalkan jejak yang baik dalam sejarah perusahaan.
Berdasarkan pengalaman saya sebelumnya, saya menyadari bahwa pengalaman baru di Jawa kemungkinan akan lebih mudah daripada sebelumnya. Dan begitulah yang terjadi. Semakin banyak Anda bekerja sebagai programmer, semakin banyak pengetahuan mendasar yang Anda peroleh, semakin mudah untuk menguasai teknologi baru.
Apa sekarang
Ada hal seperti itu)
Di Beeline, kami terutama menggunakan Java 8, tetapi kami sudah mulai melihat Java 11, kami menggunakan Spring Boot, dan sudah mulai aktif menulis di Kotlin. Saya melihat bahwa Java benar-benar mulai bergerak maju, dirilis setiap enam bulan. Beri tahu pengembang Java tentang ini di awal 2010, dia akan memutar jarinya ke pelipisnya. Menurut pendapat saya, Java sedang berubah menjadi lebih baik.
Java 8 memperkenalkan antarmuka fungsional yang memungkinkan Anda membuat kode lebih cantik dan mengimplementasikan fungsi tingkat tinggi. Juga, Stream API muncul, yang membuat hidup sedikit lebih mudah. Meskipun LINQ masih jauh, ini sudah menggembirakan.
Saya belum menjelaskan fitur-fitur yang muncul di versi Java yang lebih baru :)
Saya bisa berkenalan dengan sistem pembangunan Gradle. Saya sangat menyukainya sehingga saya mulai menulis skrip build yang dapat digunakan kembali untuk mengimplementasikan sesuatu yang mirip dengan file proyek di .NET Core.
Di Jawa, bekerja dengan asinkron lebih transparan: ketika Anda menulis kode, Anda benar-benar harus banyak berpikir. Ini baik dan buruk. Saya suka momen ini karena, menyukai OS dan perangkat keras, senang bisa mempengaruhi JVM seperti yang Anda inginkan.
Untuk paket pribadi, saya tertarik dengan topik aplikasi beban tinggi. Itu belum sepenuhnya diungkapkan kepada saya, tetapi saya secara aktif mempelajarinya.
Saya mencoba untuk tidak menjadi penggemar KERING, tetapi bila memungkinkan saya melakukan yang terbaik untuk menggunakan kembali pengetahuan.
Dan, tentu saja, saya ingin meningkatkan pengetahuan saya di Kotlin untuk mulai menulis layanan keren di coroutine. Kotlin sendiri adalah apa yang seharusnya menjadi Java. Andrey Breslav & Co telah melakukan pekerjaan yang sangat baik.
Perbedaan antara Java dan .NET sebagian besar diimbangi dengan pengenalan Kotlin ke dalam hidup saya. Tapi saya kehilangan banyak .NET.
Highlight:
- ketinggalan toolset konsol dotnet. Di sana Anda dapat membangun proyek, membuat yang baru dari template, dan banyak lagi;
- Saya kehilangan alternatif normal untuk EntityFramework dengan LINQ;
- Java tampaknya lebih haus sumber daya daripada .NET. Komputer terkadang menghilang begitu saja.
Tapi, dalam kehidupan nyata, Java mungkin adalah hal paling menarik yang saya alami belakangan ini.
Kesimpulan dan kata perpisahan
Mengubah sesuatu dalam hidup seringkali merupakan pelanggaran terhadap zona nyaman dan semacam ketidakpastian. Anda dapat melihat situasi dengan pesimis, tetapi sebaliknya itu memacu saya. Saya ingin selalu relevan. Saya mengerti betul bahwa Anda tidak bisa mendapatkan semua pengetahuan, tetapi Anda bisa mencoba.
Secara khusus, dari mengubah bahasa pemrograman yang berfungsi, saya menyadari hal berikut: sebagian besar masalahnya sama di mana-mana. Satu-satunya perbedaan adalah bahwa mereka diselesaikan dengan pendekatan yang berbeda.
.NET menunjukkan kepada saya C # yang indah dengan banyak gula, dan itu juga tetap dalam ingatan saya sebagai seperangkat alat yang paling kuat, tanpa harus berlarian dan menumpuk dunia.
Java membenamkan saya di dunia perpustakaan OpenSource yang tak ada habisnya, dan juga menunjukkan kepada saya bahwa ada banyak cara untuk memecahkan masalah ini atau itu. Bahasa Java sendiri sangat sederhana dan menurut saya sangat bersahabat dengan programmer pemula.
Menurut pendapat saya, sebelum masuk ke perselisihan tentang kerennya suatu teknologi, Anda perlu mencoba yang alternatif. Misalnya, di Beeline Kazakhstan, saya berkesempatan menggunakan .NET 5 untuk mengimplementasikan satu layanan mikro. Artinya, untuk menggunakannya di perusahaan di mana bahasa utama untuk perangkat lunak server adalah Java. Microservice masuk ke seluruh lanskap tanpa masalah. Rekan-rekan saya tertarik untuk melakukan tinjauan kode, kami bahkan membahas perbedaan mendasar. Secara umum, para pria juga tertarik untuk memperluas wawasan mereka.
Di dunia saya, seorang programmer sejati bukanlah yang tenggelam di belakang satu bahasa pemrograman atau berteriak ke kanan kiri bahwa teknologi yang digunakannya adalah yang terbaik. Seorang programmer sejati adalah seseorang yang dapat memecahkan suatu masalah dengan cepat, efisien dan murah, dan yang terpenting, dalam jangka panjang. Orang-orang seperti itu tidak peduli bahasa pemrograman apa yang akan dikembangkan, mereka memilih alat berdasarkan tugas.
Oleh karena itu, saya menyarankan agar semua orang mencoba mengubah tumpukan teknologi, dan mungkin peran dalam tim. Semua perubahan pada akhirnya mengarah pada pengayaan pengetahuan. Mungkin Anda tidak membutuhkan pengetahuan saat ini, tetapi mungkin akan berguna nanti.
Mengubah tumpukan tidak sulit - Anda perlu membayangkan saat ketika Anda pertama kali mulai menulis kode dan mencoba membenamkan diri dalam teknologi baru dengan "menghidupkan orang bodoh". Tentu saja, seiring waktu, tidak ada jalan keluar dari perbandingan, tetapi penting untuk diingat bahwa setiap teknologi dan bahasa pemrograman sering mengajarkan gaya dan prinsipnya sendiri.
Ini tidak berarti bahwa Anda perlu menulis kode spageti dan struktur tiga lantai di mana-mana. Anda harus selalu berpegang pada pemisahan masalah dan menulis kode sederhana. Tapi, jika Anda mau, Anda juga bisa mengizinkan kruk. Kita semua adalah pendosa :)
Tantang dirimu dan selalu jadi yang teratas!
PS Jika Anda datang ke artikel untuk mengetahui bahasa dan platform mana yang terbaik, atau menulis pendapat Anda tentangnya, mari kita bantu.