Ce que j'ai aimé dans .NET
.NET a une longue histoire. Pas la même chose que Java, bien sûr, mais aussi intéressant. Vous devez également séparer .NET Framework et .NET Core. Deuxièmement - IMHO ce que .NET était censé être en premier lieu. Admettons que lorsque je dis simplement .NET, je veux dire .NET Framework. J'écrirai sur .NET Core avec l'ajout.
En .NET lui-même, j'aimais au moins la présence d'un écosystème, mais connaissant un seul langage de programmation, on peut écrire sans problème :
- salles de serveurs;
- bureau;
- mobiles (Windows Mobile) ;
- web (bonjour Silverlight, LightSwitch, ASP.NET WebForms, ASP.NET MVC);
- kiosque d'applications;
- Jeux.
La barrière à l'entrée dans .NET est assez faible, aidée par de nombreux événements et guides de Microsoft. La présence de l'écosystème permet au développeur de ne pas penser à quelle bibliothèque choisir, tout est déjà connu.
Voulez-vous un site Web ? Prenez ASP.NET. "Nous, en tant que grande entreprise (Microsoft), l'utilisons et vous conviendra." Et ainsi en tout.
C# est un Java amélioré, ici vous avez une vie facile avec l'auto-propriété, et un modèle simple de programmation asynchrone, LINQ qui, en plus, peut être étendu par l'implémentation de fournisseurs. Par exemple, LINQ to SQL, LINQ to XML, etc.
EntityFramework, qui est maintenu par Microsoft et fonctionne naturellement comme sur des roulettes à bien des égards. Il est impossible de garder le silence sur les migrations dans EntityFramework. J'ai changé le modèle, la migration a été générée et vous n'avez pas besoin de les écrire constamment à la main.
Nuget est devenu le point central de l'ensemble de la communauté .NET : une vaste gamme de bibliothèques de Microsoft et de la communauté.
.NET Core peut être considéré comme une correction de bogue pour Microsoft. Tous les changements ont eu lieu, entre autres, grâce au PDG de Microsoft - Satya Nadella, qui a montré au monde entier que "MS aime Linux". Nous avons un concurrent Java.
Peut-être que quelqu'un dira : « Est-ce juste un .NET Framework ?
Ma réponse est : « Java a gagné en popularité précisément en raison de son orientation OpenSource. L'entreprise n'avait pas peur que demain des cinglés de Sun ou d'Oracle viennent et commencent à faire valoir leurs droits. Le .NET Framework est à l'origine une plateforme propriétaire, mais grâce à une gestion adéquate par MS, ils ont corrigé cette faille. »
L'argument le plus important dans la comparaison des deux plates-formes est, bien sûr, l'âge et la stabilité de Java. Par stabilité, j'entends les normes au sein de la communauté, un pourcentage plus important de développeurs expérimentés et un grand nombre de grandes entreprises utilisant Java. Et Java est également "compilé une fois exécuté partout".
Je considère .NET Core comme un concurrent à part entière de Java. Le langage et la boîte à outils sont disponibles sur GitHub sous la licence MIT.
Quoi d'autre a été ajouté depuis la sortie de .NET Core :
- prise en charge du système d'exploitation Linux, macOS est apparu ;
- le travail dans les environnements de conteneurisation a été amélioré (.NET Core sélectionne les paramètres appropriés au moment de l'exécution, en fonction de l'environnement de lancement) ;
- Xamarin. Les développeurs ont la possibilité d'écrire des applications agiles pour iOS et Android ;
- La direction de l'IoT a commencé à se développer ;
- WPF est devenu un projet open source et il y avait beaucoup d'espoir pour sa multiplateforme ;
- Le développement WEB est devenu encore plus accessible grâce à Blazor (vous pouvez faire à la fois WebAssembly et tout rendre côté serveur).
L'essentiel est le suivant : en 2020, connaissant le langage de programmation C#, vous pouvez écrire ce que vous voulez sans béquilles comme, par exemple, un navigateur sous le capot d'un électron :)
Qu'est-ce que je n'ai pas aimé dans .NET ?
Équitable? Comprenant que Microsoft a impudemment copié Java sur de nombreux fronts :) Permettez-moi de vous rappeler qu'avant .NET, les camarades MS ont essayé d'implémenter leur propre représentation de Java : J ++ suivi de J #.
Il semblerait que les intentions soient bonnes. Ils voulaient que les javistes aient le choix. Mais, MS à cette époque n'a rien fait pour le bien des développeurs. Il suffit de lire cet article sur Wikipédia ("Maintenir, construire et détruire").
Dans le .NET Framework lors de ma première expérience, je n'aimais pas :
- structure complexe des fichiers de projet ;
- problèmes éternels avec les dépendances de liaison au moment de l'exécution ;
- VisualStudio - c'est vraiment lent et lent : D ;
- uniquement Windows, à cette époque je m'intéressais déjà aux OS GNU/Linux ;
- Développement Windows Mobile : c'est terrible à tous points de vue.
Présentation de Java
D'accord ?)
En février 2015, j'ai accepté un poste de développeur Java. Je n'avais aucune expérience dans le développement d'applications en Java, mais j'étais dans le sujet, car j'ai beaucoup lu sur le langage. Nous avons écrit en Java 7, et le premier jour de programmation n'a pas semblé très difficile. "C'est comme C #, seulement gênant", pensai-je.
Mon projet a été implémenté en JavaEE (exécuté sous TomEE), frontend sur Vaadin. En général, je n'ai pas rencontré de problèmes particuliers pour interagir avec une nouvelle technologie pour moi, mais plutôt dans des endroits où j'étais sous le choc.
J'ai été étonné par l'abondance de fichiers XML de configuration, les paramètres Maven pour 300 lignes. La présence d'un grand nombre d'annotations était effrayante. Ici, on ne peut que mentionner l'amour des javistes pour la programmation orientée aspect.
En parallèle, la même entreprise développait sur JavaSE, en utilisant comme framework Spring 4. Je ne comprenais toujours pas pourquoi tout le monde n'aimait pas le projet sur Spring, mais le chef d'équipe se disputait constamment avec le développeur sur Spring. Selon mes observations, il y avait trop de génération de code, et à cause de cela, l'interface utilisateur elle-même était complexe.
Construire le projet (JavaEE) dans Maven pour la première fois m'a pris 20 minutes. J'avais l'impression de télécharger toutes les bibliothèques du monde. Pour cela, nous pouvons remercier Maven, en tant que collectionneur le plus natif. En fait, je ne connaissais tout simplement pas l'existence de Gradle à l'époque.
Le projet qui m'a été confié consistait à mettre en œuvre un CRM avec un parti pris pour les agences de voyages. Le MVP a été soulevé assez rapidement, mais malheureusement, le projet a été fermé faute de financement.
Pourquoi j'ai aimé Java 7
- Java est stable ;
- Java est rétrocompatible ;
- il existe de nombreuses implémentations de différentes boîtes à outils. Le développeur a le choix sur quoi construire le projet : maven, Gradle, ou généralement `javac` :);
- il existe de nombreux articles et connaissances sur Internet concernant la résolution des problèmes qu'un développeur peut rencontrer ;
- Java a une implémentation open source sous la forme d'OpenJDK ;
- Java est activement utilisé dans le développement de systèmes financiers ; Le seuil pour entrer en Java, surtout après une expérience en .NET, ne m'a pas semblé trop élevé ;
- Bien sûr, l'IDE : IntelliJ IDEA est génial à tous points de vue.
Ce que je n'ai pas aimé à propos de Java 7
lors de ma première expérience en 2015
- manque d'écosystème : le développeur doit chercher une bibliothèque adaptée parmi des centaines ;
- la communauté n'est souvent pas d'accord ;
- désordre de l'API lorsque vous travaillez avec des dates et des heures ;
- Maven : pourquoi est-ce si lent et verbeux ?
- JavaEE : l'idée est géniale, la mise en œuvre est mauvaise. Qui a inventé autant de personnalisation déclarative en XML ?
- API à croissance lente ;
- le manque de fonctions d'ordre supérieur et d'alternatives LINQ ;
- Java 7 lui-même est très verbeux.
Je suis donc retourné à .NET
Pas exactement pourquoi, bien sûr, mais quand j'ai obtenu un poste de développeur Java pour un projet, on m'a promis une charge importante, des tâches intéressantes et un tas de difficultés. En fait : triste, pas de démarrage, il n'y a pas du tout de highload.
Lorsqu'on m'a demandé de revenir à un ancien projet .NET avec une promotion, j'ai tout de suite accepté. Les tâches sont familières, le travail du personnel, le financement est normal - une excellente occasion de faire ses preuves sur le long terme.
Ce qui a changé dans .NET
Je suis revenu à .NET en 2016. Exactement lorsque mes collègues de leur nouvel ancien lieu de travail ont commencé à écrire une plate-forme d'entreprise à partir de zéro. L'idée était la suivante : développer un système de comptabilité et de contrôle opérationnel, qui pourrait être étendu à l'aide de modules. C'est-à-dire quelque chose comme SAP PM, uniquement dans la catégorie budget. Vous pouvez en savoir plus sur SAP PM ici .
La pile était comme ceci : .NET 4.5, ASP.NET MVC 5 (Owin), EF Core, MS SQL Server. L'interface sur SAP UI5 est un framework JS open source qui vous permet de créer des applications métier à l'aide de contrôles prêts à l'emploi.
En parallèle, .NET Core se développait activement, j'ai donc été confronté à la tâche de porter un projet de .NET Framework 4.5 vers .NET Core 2.1. C'était très amusant et il est venu avec beaucoup de refactorisation. Dans le même temps, nous avons scié le monolithe en une sorte de services distincts.
En fait, alors que je refactorisais et recueillais les souhaits de mes collègues, un petit framework web est né dans les murs de l'entreprise. Je l'ai nommé NextApi.
Pourquoi NextApi ? Lorsque, dans la version précédente du système, le programmeur senior et moi développions une nouvelle API, nous l'appelions "suivant" - Suivant. Et le nom du nouveau cadre est un petit hommage au travail d'équipe. Lien vers le projet ici .
Sur ce ma mission a été accomplie : l'entreprise a reçu des services qui fonctionnent sur une seule boîte à outils. Nous avons réussi à réutiliser la logique métier sur les clients mobiles et les ordinateurs de bureau, hors ligne d'abord. Nous avons également réussi à nous éloigner complètement de Windows Server. J'ai dû quitter une petite machine virtuelle pour créer une application WPF, mais ce sont des bagatelles.
Il est temps de passer à autre chose
Après avoir transféré le projet sur .NET Core et l'avoir scié en services, quelque chose de nouveau dans ma vie de développement ne me suffisait plus. J'étais en position de chef d'équipe, nous avons lancé le produit avec succès auprès de plusieurs gros clients, il y avait suffisamment de tâches, les problèmes ont été résolus, mais je voulais un défi et une opportunité de me révéler.
En même temps, j'avais une idée en tête de la demande de développeurs .NET. Au Kazakhstan, contrairement aux pays occidentaux, la demande pour cette technologie n'est pas aussi élevée. On ne peut pas en dire autant des développeurs Java.
J'ai donc quitté le projet et accepté d'apporter le framework développé en OpenSource. C'était très difficile de faire ça, comme on dit, je devais « sortir de la zone de confort ». Mais j'ai fermement décidé - nous devons aller de l'avant.
Mon choix s'est porté sur Beeline Kazakhstan - je voulais travailler sur des services populaires. De plus, j'ai compris quelles étaient les tâches et la base de clients, et Java était assez proche de moi. De plus, il était intéressant d'avoir l'opportunité d'examiner tous les développements du côté d'un développeur .NET, d'approfondir les aspects de la conception de systèmes à forte charge et de laisser une bonne marque dans l'histoire de l'entreprise.
Sur la base de mon expérience précédente, j'ai réalisé qu'une nouvelle immersion en Java est susceptible d'être plus facile que la dernière fois. Et ainsi c'est arrivé. Plus vous travaillez en tant que programmeur, plus vous acquérez de connaissances fondamentales, plus il est facile de maîtriser les nouvelles technologies.
Et maintenant
Il y avait une telle chose)
Dans Beeline, nous utilisons principalement Java 8, mais nous avons déjà commencé à regarder Java 11, nous utilisons Spring Boot et avons commencé à écrire activement en Kotlin. Je vois que Java a vraiment commencé à avancer, des sorties tous les six mois. Parlez-en à un développeur Java au début de 2010, il se tordrait le doigt à la tempe. À mon avis, Java évolue pour le mieux.
Java 8 introduit des interfaces fonctionnelles qui vous permettent de rendre votre code plus joli et d'implémenter des fonctions d'ordre supérieur. De plus, l'API Stream est apparue, ce qui a rendu la vie un peu plus facile. Bien que LINQ soit loin, c'est déjà encourageant.
Je n'ai pas encore décrit les fonctionnalités qui sont apparues dans les versions Java plus récentes :)
J'ai pu me familiariser avec le système de construction Gradle. J'ai tellement aimé que j'ai commencé à écrire des scripts de build réutilisables pour implémenter quelque chose de similaire aux fichiers de projet dans .NET Core.
En Java, travailler avec l'asynchronie est plus transparent : quand on écrit du code, il faut vraiment beaucoup réfléchir. Ceci est à la fois bon et mauvais. J'aime ce moment car, ayant un amour pour l'OS et le matériel, c'est bien de pouvoir influencer la JVM comme on veut.
En ce qui concerne les plans personnels, je m'intéresse au sujet des applications highload. Il ne m'a pas encore été entièrement divulgué, mais je l'étudie activement.
J'essaie de ne pas être fan de DRY, mais dans la mesure du possible je fais de mon mieux pour réutiliser les connaissances.
Et, bien sûr, je veux améliorer mes connaissances en Kotlin afin de commencer à écrire des services sympas sur les coroutines. Kotlin lui-même est ce que Java était censé être. Andrey Breslav & Co ont fait un excellent travail.
La différence entre Java et .NET est largement compensée par l'introduction de Kotlin dans ma vie. Mais je manque beaucoup de .NET.
Points forts:
- manquez l'ensemble d'outils de la console dotnet. Là, vous pouvez créer un projet, en créer un nouveau à partir d'un modèle, et bien plus encore ;
- Il me manque une alternative normale pour EntityFramework avec LINQ;
- Java semble être plus gourmand en ressources que .NET. L'ordinateur disparaît parfois simplement en lui-même.
Mais, dans la vraie vie, Java est peut-être la chose la plus intéressante qui me soit arrivée ces derniers temps.
Conclusions et mots d'adieu
Changer quelque chose dans la vie est souvent une violation de la zone de confort et une sorte d'incertitude. On peut regarder la situation avec pessimisme, mais au contraire ça me stimule. Je veux toujours être pertinent. Je comprends parfaitement que vous ne pouvez pas obtenir toutes les connaissances, mais vous pouvez essayer.
Plus précisément, en changeant le langage de programmation de travail, j'ai réalisé ce qui suit : la plupart des problèmes sont les mêmes partout. La seule différence est qu'ils sont résolus par des approches différentes.
.NET m'a montré un magnifique C # avec beaucoup de sucre, et il reste également dans ma mémoire en tant qu'ensemble d'outils le plus puissant, sans avoir à courir et à empiler le monde sur un fil.
Java m'a plongé dans le monde sans fin des bibliothèques OpenSource, et m'a également montré qu'il existe de nombreuses façons de résoudre tel ou tel problème. Le langage Java lui-même est très simple et je pense qu'il est très convivial pour les programmeurs novices.
Mon opinion est qu'avant d'entrer en conflit sur la fraîcheur d'une technologie, vous devez en essayer une alternative. Par exemple, à Beeline Kazakhstan, j'ai eu l'opportunité d'utiliser .NET 5 pour implémenter un microservice. C'est-à-dire de l'utiliser dans une entreprise où le langage principal du logiciel serveur est Java. Le microservice s'intègre sans problème dans l'ensemble du paysage. Mes collègues étaient intéressés à faire des revues de code, nous avons même discuté des différences fondamentales. En général, les gars se sont également intéressés à élargir leurs horizons.
Dans mon monde, un vrai programmeur n'est pas celui qui se noie derrière un langage de programmation ou qui crie à droite et à gauche que la technologie qu'il utilise est la meilleure. Un vrai programmeur est quelqu'un qui peut résoudre un problème rapidement, efficacement et à moindre coût, et surtout, à long terme. Ces personnes ne se soucient pas du langage de programmation dans lequel développer, elles choisissent un outil en fonction de la tâche.
Par conséquent, je recommande à chacun d'essayer de changer la pile technologique, et peut-être le rôle dans l'équipe. Tous les changements conduisent finalement à un enrichissement des connaissances. Peut-être n'avez-vous pas besoin de connaissances pour le moment, mais cela pourrait vous être utile plus tard.
Changer la pile n'est pas difficile - vous devez imaginer le moment où vous avez commencé à écrire du code et essayer de vous immerger dans la nouvelle technologie en "excitant l'imbécile". Bien sûr, au fil du temps, il n'y a pas d'échappatoire aux comparaisons, mais il est important de se rappeler que chaque technologie et langage de programmation prêche souvent son propre style et ses propres principes.
Cela ne signifie pas que vous devez écrire du code spaghetti et des structures à trois étages partout. Vous devez toujours vous en tenir à la séparation des préoccupations et écrire un code simple. Mais, si vous le souhaitez, vous pouvez également autoriser les béquilles. Nous sommes tous des pécheurs :)
Relevez le défi et soyez toujours au top !
PS Si vous êtes venu à l'article pour savoir quelle langue et quelle plate-forme sont les meilleures, ou si vous écrivez votre opinion à ce sujet, aidons-le.