.NET ず Java のどちらを遞択したか

私が .NET に出䌚ったのは、最初の正匏な職堎である石油業界ず協力しおいる小さな IT 䌁業でした。これは物語の続きで、始たりはここで読むこずができ たす。 







.NETで気に入った点



.NET には長い歎史がありたす。もちろん、Java ず同じではありたせんが、興味深いものでもありたす。たた、.NET Framework ず .NET Core を分離する必芁もありたす。第二に、そもそも.NETがどうあるべきだったのか、私は考えおいたす。私が単に .NET ず蚀うずき、それは .NET Framework を意味するこずに同意したしょう。远蚘で.NET Coreに぀いお曞いおいきたす。



.NET自䜓には、少なくずも゚コシステムの存圚が奜きでしたが、1぀のプログラミング蚀語を知っおいれば、問題なく曞くこずができたす:

  • サヌバヌルヌム;

  • デスクトップ;

  • モバむル (Windows Mobile);

  • Web (こんにちは、Silverlight、LightSwitch、ASP.NET WebForms、ASP.NET MVC);

  • アプリケヌションキオスク;

  • ゲヌム。





Microsoft の広範なむベントやガむドのおかげで、.NET ぞの参入障壁はかなり䜎くなりたす。゚コシステムの存圚により、開発者はどのラむブラリを遞択するかを考える必芁がなくなり、すべおがすでにわかっおいたす。

りェブが欲しいですか ASP.NET を取りたす。 「私たちは倧䌁業 (Microsoft) ずしお、それを䜿甚し、あなたに合っおいたす。」すべおにおいおそうです。



C # は改良された Java です。ここでは、自動プロパティを䜿甚しお簡単に生掻でき、非同期プログラミングの簡単なモデルである LINQ であり、さらにプロバむダヌの実装によっお拡匵できたす。たずえば、LINQ to SQL、LINQ to XML などです。



EntityFramework は Microsoft によっお管理されおおり、圓然のこずながら倚くの面で時蚈仕掛けのように動䜜したす。 EntityFramework での移行に぀いお沈黙を保぀こずは䞍可胜です。モデルを倉曎するず、移行が生成され、垞に手動でそれらを蚘述する必芁はありたせん。



Nuget は、.NET コミュニティ党䜓の䞭心ずなっおいたす。Microsoft ずコミュニティの膚倧な数のラむブラリです。



.NET Core は、Microsoft のバグ修正ず芋なすこずができたす。すべおの倉曎は、ずりわけ、Microsoft の CEO、Satya Nadella のおかげで行われたした。圌は、「MS は Linux を愛しおいる」こずを党䞖界に瀺したした。 Java の競合他瀟ができたした。



おそらく誰かが蚀うでしょう: 「それは .NET Framework だけですか?」

私の答えは次のずおりです。ビゞネスは、明日サンやオラクルから倉人が来お、圌らの暩利を拡倧し始めるこずを恐れおいたせんでした。.NET Framework はもずもずプロプラむ゚タリなプラットフォヌムでしたが、MS による適切な管理のおかげで、この欠陥は修正されたした。」



2 ぀のプラットフォヌムを比范する際の最も重芁な議論は、もちろん、Java の叀さず安定性です。安定性ずは、コミュニティ内の暙準、経隓豊富な開発者の割合が高く、Java を䜿甚しおいる倚数の倧䌁業を意味したす。たた、Java も「䞀床コンパむルするずどこでも実行」できたす。



私は .NET Core を Java の本栌的な競争盞手ず芋なしおいたす。蚀語ずツヌルキットは、MIT ラむセンスの䞋で GitHub で入手できたす。



.NET Core のリリヌス以降、他に远加されたもの:

  • OS Linux、macOS のサポヌトが登堎したした。

  • コンテナヌ化環境での䜜業が改善されたした (.NET Core は、起動環境に応じお、実行時に適切なパラメヌタヌを遞択したす)。

  • ザマリン。開発者は、iOS および Android 向けの軜快なアプリを䜜成できたす。

  • IoT の方向性が開発され始めたした。

  • WPF はオヌプン ゜ヌス プロゞェクトになり、クロスプラットフォヌムに倧きな期埅が寄せられたした。

  • Blazor のおかげで、Web 開発はさらにアクセスしやすくなりたした (WebAssembly を実行し、すべおをサヌバヌ偎でレンダリングできたす)。





結論は次のずおりです。2020 幎には、C# プログラミング蚀語を知っおいれば、束葉杖なしで、たずえば電子のボンネットの䞋にあるブラりザなど、奜きなこずを䜕でも曞くこずができたす :)



.NET の䜕が気に入らなかったのですか?



公平Microsoft が倚くの面で厚かたしく Java をコピヌしたこずを理解する :) .NET の前に、MS の同志が Java の独自の衚珟を実装しようずしたこずを思い出しおください: J ++ に続いお J #。



意気蟌みは良さそうです。圌らはゞャビストに遞択肢を持たせたかったのです。しかし、圓時の MS は、開発者の利益のために䜕もしたせんでした。りィキペディアのこの蚘事(「維持、構築、砎棄」)を読むだけで十分 です。



初めお経隓したずきの .NET Framework では、次のこずが奜きではありたせんでした。

  • プロゞェクト ファむルの耇雑な構造。

  • 実行時の䟝存関係のバむンドに関する氞遠の問題。

  • VisualStudio - それは本圓に遅くおラグがありたす: D;

  • 圓時、私はすでに OS GNU / Linux に興味を持っおいたした。

  • Windows Mobile の開発: あらゆる点でひどいものです。





Javaの玹介





同意したすか?)



2015 幎 2 月、私は Java 開発者ずしおの仕事に就きたした。 Java でのアプリケヌション開発の経隓はありたせんでしたが、Java に぀いおよく読んだので、このテヌマに参加したした。 Java 7 で䜜成し、プログラミングの初日はそれほど難しくないように芋えたした。 「C#みたいで、ただぎこちない」ず思いたした。



私のプロゞェクトは、Vaadin のフロント゚ンドである JavaEE (TomEE の䞋で実行) で実装されたした。䞀般的に、私は新しいテクノロゞヌずのやり取りで特に問題を経隓したわけではありたせんが、ショックを受けた堎所ではありたせんでした。



構成 XML ファむルの豊富さず、300 行の Maven 蚭定に驚きたした。倧量の泚釈の存圚は恐ろしいものでした。ここで、アスペクト指向プログラミングに察するゞャビストの愛に぀いお蚀及せざるを埗たせん。



䞊行しお、同じ䌚瀟が Spring 4 をフレヌムワヌクずしお䜿甚しお JavaSE で開発しおいたしたが、なぜみんなが Spring のプロゞェクトを気に入らないのか完党には理解できたせんでしたが、チヌム リヌダヌは垞に Spring の開発者ず議論しおいたした。私の芳察によるず、コヌド生成が倚すぎお、UI自䜓が耇雑でした。



初めお Maven でプロゞェクト (JavaEE) をビルドするのに 20 分かかり、䞖界䞭のすべおのラむブラリをダりンロヌドしおいるように感じたした。これに぀いおは、最もネむティブなコレクタヌである Maven に感謝したす。実際、圓時はGradleの存圚を知らなかっただけです。



私が担圓したプロゞェクトは、旅行䌚瀟に偏った CRM の実装でした。 MVP はすぐに調達されたしたが、残念ながら資金䞍足のためプロゞェクトは終了したした。



Java 7 が奜きな理由



  • Java は安定しおいたす。

  • Java には䞋䜍互換性がありたす。

  • さたざたなツヌルキットの倚くの実装がありたす。開発者は、プロゞェクトをビルドする察象を遞択できたす: maven、Gradle、たたは䞀般的には「javac」:);

  • むンタヌネット䞊には、開発者が遭遇する可胜性のある問題の解決に関する倚くの蚘事や知識がありたす。

  • Java には、OpenJDK 圢匏のオヌプン ゜ヌス実装がありたす。

  • Java は金融システムの開発で積極的に䜿甚されおいたす。Java に入るための敷居は、特に .NET での経隓の埌では、それほど高くないように思えたした。

  • もちろん、IDE: IntelliJ IDEA はあらゆる点で優れおいたす。



Java 7 で気に入らなかった点



2015幎の初䜓隓時

  • ゚コシステムの欠劂: 開発者は数癟の䞭から適切なラむブラリを探す必芁がありたす。

  • コミュニティはしばしば倧きく意芋を異にしたす。

  • 日付ず時刻を操䜜するずきの API の混乱。

  • Maven: なぜこんなに遅くお冗長なのですか?

  • JavaEE: アむデアは玠晎らしいが、実装は悪い。XML でこれほど倚くの宣蚀型のカスタマむズを思い぀いたのは誰?

  • 成長の遅い API。

  • 高階関数ず LINQ 代替の欠劂。

  • Java 7 自䜓は非垞に冗長です。





だから私は.NETに戻った



もちろん、その理由は正確にはわかりたせんが、あるプロゞェクトで Java 開発者ずしお仕事に就いたずき、私は負荷の高い、興味深いタスクずたくさんの困難を玄束されたした。実際、悲しいこずに、起動ではなく、高負荷はたったくありたせん。



昇進のある叀い .NET プロゞェクトに戻すように蚀われたずき、私はすぐに同意したした。タスクはよく知られおおり、スタッフの仕事、資金調達は普通です - 長期的に自分自身を蚌明する絶奜の機䌚です。



.NET の倉曎点



私が .NET に戻ったのは 2016 幎でした。ちょうど、新しい職堎の同僚がビゞネス プラットフォヌムをれロから䜜成し始めたずきです。アむデアは次のようなものでした: モゞュヌルの助けを借りお拡匵できる運甚䌚蚈ず管理のシステムを開発するこずでした。぀たり、予算カテゎリのみの SAP PM のようなものです。 SAP PM に぀いおは、こちらで読むこずができ たす。



スタックは次のようなものでした: .NET 4.5、 ASP.NET MVC 5 (Owin)、EF Core、MS SQL Server。 SAP UI5 のフロント゚ンドは、既成のコントロヌルを䜿甚しおビゞネス アプリケヌションを構築できるオヌプン ゜ヌスの JS フレヌムワヌクです。



䞊行しお、.NET Core が積極的に開発しおいたため、プロゞェクトを .NET Framework 4.5 から .NET Core 2.1 に移怍するずいう課題に盎面したした。ずおも楜しかったですし、リファクタリングもたくさんありたした。同時に、モノリスをある皮の独立したサヌビスに分割したした。



実は、同僚の芁望をたずめおリファクタリングしおいるうちに、瀟内の壁の䞭に小さなWebフレヌムワヌクが生たれたした。私はそれをNextApiず名付けたした。



なぜネクストアピシステムの以前のバヌゞョンでは、シニア プログラマヌず私が新しい API を開発しおいたずき、それを「次」ず呌んでいたした。そしお、新しいフレヌムワヌクの名前は、チヌムワヌクぞのささやかな賛蟞です。ここからプロゞェクトぞのリンク 。



これにより、私の䜿呜は達成されたした。䌚瀟は、単䞀のツヌルキットで動䜜するサヌビスを受けたした。たずオフラむンで、モバむル クラむアントずデスクトップでビゞネス ロゞックを再利甚するこずに成功したした。たた、Windows Server を完党に回避するこずもできたした。WPF アプリケヌションを構築するために小さな仮想マシンを残す必芁がありたしたが、これらは些现なこずです。



次に進む時です



プロゞェクトを .NET Core に転送しおサヌビスに分割した埌、私の開発生掻で䜕か新しいこずを行うだけでは䞍十分になりたした。私はチヌム リヌダヌの立堎にあり、いく぀かの倧口顧客に補品をリリヌスするこずに成功し、タスクは十分にあり、問題は解決されたしたが、挑戊ず自分自身を明らかにする機䌚が欲しかったのです。



同時に、.NET 開発者の需芁に぀いおも頭の䞭で考えたした。カザフスタンでは、西掋諞囜ずは察照的に、この技術に察するそれほど高い需芁はありたせん。 Java 開発者に぀いおも同じこずは蚀えたせん。



そこで私はプロゞェクトを離れ、開発したフレヌムワヌクをオヌプン゜ヌスに持ち蟌むこずに同意したした。圌らが蚀うように、これを行うのは非垞に困難でした。「コンフォヌト ゟヌンから抜け出す」必芁がありたした。しかし、私はしっかりず決めたした-私たちは前進する必芁がありたす。



私の遞択は Beeline カザフスタンでした - 私は人気のあるサヌビスに取り組みたかったのです。さらに、タスクずクラむアント ベヌスが䜕であるかを理解しおいたので、Java は私にずっおかなり身近な存圚でした。たた、すべおの開発を .NET 開発者の偎から芋お、高負荷システムの蚭蚈の偎面をさらに研究し、䌚瀟の歎史に良い足跡を残す機䌚があるこずは興味深いこずでした。



これたでの経隓に基づいお、Java ぞの新たな没入感は前回よりも簡単になる可胜性が高いこずに気付きたした。そしお、それは起こりたした。プログラマヌずしお仕事をすればするほど、より基本的な知識を習埗し、新しいテクノロゞヌを習埗するのが容易になりたす。



今䜕





そういったこずもありたした



BeelineではJava 8をメむンに䜿っおいたすが、すでにJava 11に目を向けたり、Spring Bootを䜿ったり、Kotlinでの曞き蟌みも積極的に始めおいたす。 Java は本圓に前進し始めおおり、6 か月ごずにリリヌスされおいたす。 2010 幎の初めに Java 開発者にこのこずを話すず、圌は自分のこめかみに指をひねりたした。私の意芋では、Java は良い方向に倉化しおいたす。



Java 8 には、コヌドをより矎しくし、高階関数を実装できる関数型むンタヌフェヌスが導入されおいたす。たた、Stream API が登堎し、生掻が少し楜になりたした。 LINQ が実珟するのはただ先のこずですが、これはすでに心匷いこずです。



最近の Java バヌゞョンで登堎した機胜に぀いおはただ説明しおいたせん :)



Gradle ビルド システムに慣れるこずができたした。ずおも気に入ったので、.NET Core のプロゞェクト ファむルに䌌たものを実装する再利甚可胜なビルド スクリプトを曞き始めたした。



Java では、非同期性の操䜜はより透過的です。コヌドを曞くずきは、本圓に倚くのこずを考える必芁がありたす。これは良くも悪くもです。 OS ずハヌドりェアを愛しおいるので、この瞬間が奜きです。奜きなように JVM に圱響を䞎えるこずができるのは玠晎らしいこずです。



個人的な蚈画ずしおは、高負荷アプリケヌションのトピックに興味がありたす。ただ完党には開瀺されおいたせんが、積極的に研究しおいたす。



私は DRY のファンにならないようにしおいたすが、可胜な限り知識を再利甚するよう最善を尜くしおいたす。



そしおもちろん、コルヌチンでクヌルなサヌビスを曞き始めるために、Kotlin の知識を向䞊させたいず思っおいたす。Kotlin 自䜓が Java の本来の姿です。Andrey Breslav & Co は玠晎らしい仕事をしおくれたした。



Java ず .NET の違いは、私の生掻に Kotlin を導入したこずでほずんど盞殺されおいたす。しかし、私は倚くの .NET が恋しいです。



ハむラむト:

  • dotnet コン゜ヌル ツヌルセットがありたせん。そこでは、プロゞェクトを構築したり、テンプレヌトから新しいプロゞェクトを䜜成したりするこずができたす。

  • LINQ を䜿甚した EntityFramework の通垞の代替手段がありたせん。

  • Java は .NET よりもリ゜ヌスを倧量に消費するようです。コンピュヌタヌは時々、自分自身の䞭に消えおしたうこずがありたす。





しかし、実際の生掻では、Java はおそらく最近私に起こった最も興味深いこずです。



結論ず別れの蚀葉



人生の䜕かを倉えるこずは、倚くの堎合、コンフォヌト ゟヌンの違反であり、ある皮の䞍確実性です。状況を悲芳的に芋るこずもできたすが、逆に拍車がかかりたす。垞に関係しおいたい。すべおの知識を埗るこずができないこずは十分に理解しおいたすが、詊しおみるこずはできたす。



具䜓的には、動䜜するプログラミング蚀語を倉曎するこずで、次のこずに気付きたした。ほずんどの問題はどこでも同じです。唯䞀の違いは、それらが異なるアプロヌチによっお解決されるこずです。



.NET は、たくさんの砂糖を䜿った矎しい C# を私に芋せおくれたした。たた、それは、最も匷力なツヌル セットずしお蚘憶に残っおいたす。



Java は、オヌプン゜ヌス ラむブラリの無限の䞖界に私を浞し、これやその問題を解決する方法がたくさんあるこずも教えおくれたした。 Java 蚀語自䜓は非垞に単玔で、初心者プログラマヌにずっお非垞に䜿いやすい蚀語だず思いたす。



私の意芋では、テクノロゞヌのクヌルさに぀いお論争に入る前に、別のテクノロゞヌを詊す必芁がありたす。たずえば、カザフスタンのビヌラむンでは、.NET 5 を䜿甚しお 1 ぀のマむクロサヌビスを実装する機䌚がありたした。぀たり、サヌバヌ゜フトりェアの䞻芁蚀語がJavaである䌁業で䜿甚するこずです。マむクロサヌビスは問題なくランドスケヌプ党䜓に適合したす。同僚はコヌド レビュヌに興味があり、根本的な違いに぀いおも議論したした。䞀般的に、圌らは芖野を広げるこずにも興味を持぀ようになりたした。



私の䞖界では、本物のプログラマヌは、1 ぀のプログラミング蚀語に倢䞭になったり、自分が䜿甚しおいるテクノロゞが最高であるず倧声で叫んだりする人ではありたせん。真のプログラマヌずは、問題を迅速に、効率的に、安䟡に、そしお最も重芁なこずに、長期的に解決できる人です。そのような人々は、どのプログラミング蚀語で開発するかを気にせず、タスクに基づいおツヌルを遞択したす。



したがっお、党員がテクノロゞ スタックを倉曎し、堎合によっおはチヌム内の圹割を倉曎するこずをお勧めしたす。すべおの倉曎は、最終的に知識の充実に぀ながりたす。おそらく今はなんらかの知識は必芁ありたせんが、埌で圹立぀かもしれたせん。



スタックを倉曎するこずは難しくありたせん - 最初にコヌドを曞き始めた瞬間を想像し、「愚か者をオンにする」こずで新しいテクノロゞヌに没頭しようずする必芁がありたす。もちろん、時間が経぀に぀れお、比范から逃れるこずはできたせんが、各テクノロゞずプログラミング蚀語は、倚くの堎合、独自のスタむルず原則を説いおいるこずを芚えおおくこずが重芁です。



これは、スパゲッティ コヌドや 3 階建おの構造をいたるずころで曞く必芁があるずいう意味ではありたせん。垞に関心の分離に固執し、単玔なコヌドを䜜成する必芁がありたす。ただし、必芁に応じお、束葉杖を蚱可するこずもできたす。私たちは皆眪人です :)



自分自身に挑戊し、垞にトップに立っおください



PS この蚘事にアクセスしお、どの蚀語ずプラットフォヌムが最適かを調べたり、それに぀いお意芋を曞いたりしたら、助けおあげたしょう。



All Articles