Cómo elegí entre .NET y Java

Me familiaricé con .NET en mi primer lugar de trabajo oficial: una pequeña empresa de TI que coopera con la industria petrolera. Esta es una continuación de la historia, el comienzo se puede leer aquí. 







Lo que me gustó de .NET



.NET tiene una larga historia. No es lo mismo que Java, por supuesto, pero también es interesante. También necesita separar .NET Framework y .NET Core. En segundo lugar, en mi humilde opinión, lo que se suponía que era .NET en primer lugar. Aceptemos que cuando digo .NET me refiero a .NET Framework. Escribiré sobre .NET Core con la adición.



En .NET en sí, me gustó la presencia de un ecosistema, como mínimo, pero conociendo un lenguaje de programación, puedes escribir sin ningún problema:

  • salas de servidores;

  • escritorio;

  • móvil (Windows Mobile);

  • web (hola Silverlight, LightSwitch, ASP.NET WebForms, ASP.NET MVC);

  • quiosco de aplicaciones;

  • juegos.





La barrera para ingresar a .NET es bastante baja, con la ayuda de extensos eventos y guías de Microsoft. La presencia del ecosistema permite al desarrollador no pensar en qué biblioteca elegir, todo ya se sabe.

¿Quieres una web? Tome ASP.NET. "Nosotros, como una gran empresa (Microsoft), lo usamos y le conviene". Y así en todo.



C # es un Java mejorado, aquí tienes una vida fácil con autopropiedad, y un modelo fácil de programación asincrónica, LINQ que, además, se puede extender mediante la implementación de proveedores. Por ejemplo, LINQ to SQL, LINQ to XML, etc.



EntityFramework, que es mantenido por Microsoft y, comprensiblemente, funciona como un reloj en muchos aspectos. Es imposible permanecer en silencio sobre las migraciones en EntityFramework. Cambié el modelo, se generó la migración y no es necesario escribirlos constantemente a mano.



Nuget se ha convertido en el punto focal de toda la comunidad .NET: una amplia gama de bibliotecas de Microsoft y la comunidad.



.NET Core puede considerarse una corrección de errores para Microsoft. Todos los cambios se han producido, entre otras cosas, gracias al CEO de Microsoft, Satya Nadella, quien mostró al mundo entero que "MS ama Linux". Tenemos un competidor de Java.



Quizás alguien dirá: "¿Es solo un .NET Framework?"

Mi respuesta es: “Java ha ganado popularidad precisamente debido a su enfoque OpenSource. La empresa no temía que mañana vinieran algunos bichos raros de Sun u Oracle y comenzaran a ejercer sus derechos. El .NET Framework es originalmente una plataforma propietaria, pero gracias a la gestión adecuada por parte de MS, han corregido esta falla ".



El argumento más importante al comparar las dos plataformas es, por supuesto, la antigüedad y la estabilidad de Java. Por estabilidad, me refiero a estándares dentro de la comunidad, un mayor porcentaje de desarrolladores experimentados y una gran cantidad de grandes empresas que utilizan Java. Y Java también se "compila una vez que se ejecuta en todas partes".



Veo a .NET Core como un competidor en toda regla de Java. El idioma y el kit de herramientas están disponibles en GitHub bajo la licencia MIT.



¿Qué más se ha agregado desde el lanzamiento de .NET Core:

  • hubo soporte para OS Linux, macOS;

  • se ha mejorado el trabajo en entornos de contenedorización (.NET Core selecciona los parámetros adecuados en tiempo de ejecución, según el entorno de lanzamiento);

  • Xamarin. Los desarrolladores tienen la capacidad de escribir aplicaciones ágiles para iOS y Android;

  • La dirección de IoT comenzó a desarrollarse;

  • WPF se convirtió en un proyecto de código abierto y había muchas esperanzas para su multiplataforma;

  • El desarrollo WEB se ha vuelto aún más accesible gracias a Blazor (puede hacer WebAssembly y renderizar todo en el lado del servidor).





La conclusión es la siguiente: en 2020, conociendo el lenguaje de programación C #, puedes escribir lo que quieras sin muletas, como, por ejemplo, un navegador bajo el capó de un electrón :)



¿Qué no me gustó de .NET?



¿Justo? Entendiendo que Microsoft ha copiado descaradamente Java en muchos frentes :) Permítanme recordarles que antes de .NET, los compañeros de MS intentaron implementar su propia representación de Java: J ++ seguido de J #.



Parecería que las intenciones son buenas. Querían que los javistas tuvieran una opción. Pero, en ese momento, MS no hizo nada en beneficio de los desarrolladores. Basta con leer este artículo en Wikipedia ("Mantener, construir y destruir").



En .NET Framework en el momento de mi primera experiencia, no me gustó:

  • estructura compleja de archivos de proyectos;

  • problemas eternos con las dependencias vinculantes en tiempo de ejecución;

  • VisualStudio - es realmente lento y lento: D;

  • solo Windows, en ese momento ya estaba interesado en OS GNU / Linux;

  • Desarrollo de Windows Mobile: es terrible en todos los sentidos.





Introduciendo Java





¿De acuerdo?)



En febrero de 2015, acepté un trabajo como desarrollador de Java. No tenía experiencia en el desarrollo de aplicaciones en Java, pero estaba en la asignatura, porque leía mucho sobre el lenguaje. Escribimos en Java 7 y el primer día de programación no parecía muy difícil. "Es como C #, solo que incómodo", pensé.



Mi proyecto se implementó en JavaEE (ejecutado bajo TomEE), frontend en Vaadin. En general, no experimenté ningún problema particular al interactuar con una tecnología que era nueva para mí, sino en lugares en los que estaba en shock.



Me impresionó la abundancia de archivos XML de configuración, configuraciones de Maven para 300 líneas. La presencia de una gran cantidad de anotaciones fue aterradora. Aquí no se puede dejar de mencionar el amor de los javistas por la programación orientada a aspectos.



Paralelamente, la misma compañía estaba desarrollando en JavaSE, usando Spring 4. Todavía no entendía completamente por qué a todos no les gustaba el proyecto en Spring, pero el líder del equipo discutía constantemente con el desarrollador en Spring. Según mis observaciones, hubo demasiada generación de código y, debido a esto, la interfaz de usuario en sí era compleja.



Construir el proyecto (JavaEE) en Maven por primera vez me tomó 20 minutos, me sentí como si estuviera descargando todas las bibliotecas del mundo. Por ello, podemos agradecer a Maven, como el coleccionista más nativo. De hecho, simplemente no sabía sobre la existencia de Gradle en ese momento.



El proyecto que me propusieron fue implementar CRM con un sesgo hacia las empresas de viajes. El MVP se recaudó lo suficientemente rápido, pero desafortunadamente, el proyecto se cerró debido a la falta de fondos.



Por qué me gustó Java 7



  • Java es estable;

  • Java es compatible con versiones anteriores;

  • hay muchas implementaciones de diferentes conjuntos de herramientas. El desarrollador puede elegir qué construir el proyecto: maven, Gradle o, en general, `javac` :);

  • hay muchos artículos y conocimientos en Internet sobre la resolución de problemas que puede encontrar un desarrollador;

  • Java tiene una implementación de código abierto en forma de OpenJDK;

  • Java se utiliza activamente en el desarrollo de sistemas financieros; El umbral para ingresar a Java, especialmente después de la experiencia en .NET, no me pareció demasiado alto;

  • Por supuesto, el IDE: IntelliJ IDEA es excelente en todo.



Lo que no me gustó de Java 7



en el momento de mi primera experiencia en 2015

  • falta de ecosistema: el desarrollador tiene que buscar una biblioteca adecuada entre cientos;

  • la comunidad a menudo está muy en desacuerdo;

  • Desorden de API al trabajar con fechas y horas;

  • Maven: ¿por qué es tan lento y detallado?

  • JavaEE: la idea es genial, la implementación es mala. ¿A quién se le ocurrió tanta personalización declarativa en XML?

  • API de crecimiento lento;

  • falta de funciones de orden superior y alternativas LINQ;

  • Java 7 en sí es muy detallado.





Así que volví a .NET



No exactamente por qué, por supuesto, pero cuando conseguí un trabajo como desarrollador de Java para un proyecto, me prometieron una gran carga, tareas interesantes y un montón de dificultades. De hecho: triste, no puesta en marcha, no hay mucha carga en absoluto.



Cuando me pidieron que volviera a un antiguo proyecto .NET con una promoción, acepté de inmediato. Las tareas son familiares, el trabajo del personal, la financiación es normal, una excelente oportunidad para demostrar su valía a largo plazo.



Que ha cambiado en .NET



Volví a .NET en 2016. Exactamente cuando mis colegas de su nuevo y antiguo lugar de trabajo comenzaron a escribir una plataforma empresarial desde cero. La idea era la siguiente: desarrollar un sistema de contabilidad y control operacional, que podría ampliarse con la ayuda de módulos. Es decir, algo así como SAP PM, solo en la categoría de presupuesto. Puede leer sobre SAP PM aquí .



La pila era así: .NET 4.5, ASP.NET MVC 5 (Owin), EF Core, MS SQL Server. La interfaz en SAP UI5 es un marco JS de código abierto que le permite crear aplicaciones comerciales utilizando controles prefabricados.



Paralelamente, .NET Core se estaba desarrollando activamente, por lo que me enfrenté a la tarea de trasladar un proyecto de .NET Framework 4.5 a .NET Core 2.1. Fue muy divertido y vino con mucha refactorización. Al mismo tiempo, dividimos el monolito en una especie de servicios separados.



En realidad, mientras refactorizaba y recopilaba los deseos de mis colegas, nació un pequeño marco web dentro de las paredes de la empresa. Lo llamé NextApi.



¿Por qué NextApi? Cuando en la versión anterior del sistema, el programador senior y yo estábamos desarrollando una nueva API, la llamamos "siguiente" - Siguiente. Y el nombre del nuevo marco es un pequeño homenaje al trabajo en equipo. Enlace al proyecto aquí .



En esto se cumplió mi misión: la empresa recibió servicios que funcionan en un solo conjunto de herramientas. Logramos reutilizar la lógica empresarial en clientes móviles y equipos de escritorio, primero sin conexión. También logramos alejarnos completamente de Windows Server. Tuve que dejar una pequeña máquina virtual para construir una aplicación WPF, pero estas son nimiedades.



Es hora de moverse



Después de transferir el proyecto a .NET Core y convertirlo en servicios, algo nuevo en mi vida de desarrollo ya no era suficiente para mí. Estaba en el puesto de líder de equipo, lanzamos exitosamente el producto con varios clientes importantes, había suficientes tareas, se resolvieron problemas, pero quería un desafío y una oportunidad para revelarme.



Al mismo tiempo, había un pensamiento en mi cabeza sobre la demanda de desarrolladores .NET. En Kazajstán, a diferencia de los países occidentales, no existe una demanda tan alta de esta tecnología. No se puede decir lo mismo de los desarrolladores de Java.



Así que dejé el proyecto y acepté llevar el marco desarrollado a OpenSource. Fue muy difícil hacer esto, como dicen, tuve que "salir de la zona de confort". Pero decidí firmemente: tenemos que seguir adelante.



Mi elección recayó en Beeline Kazajstán: quería trabajar en servicios populares. Además, entendí cuáles eran las tareas y la base de clientes, y Java estaba bastante cerca de mí. También fue interesante tener la oportunidad de ver todo el desarrollo desde el lado de un desarrollador .NET, para estudiar más a fondo los aspectos del diseño de sistemas de alta carga y dejar una buena huella en la historia de la empresa.



Basándome en mi experiencia anterior, me di cuenta de que una nueva inmersión en Java probablemente sea más fácil que la última vez. Y así sucedió. Cuanto más trabajas como programador, cuanto más conocimientos fundamentales adquieres, más fácil es dominar las nuevas tecnologías.



Ahora que





Había tal cosa)



En Beeline, usamos principalmente Java 8, pero ya comenzamos a buscar en Java 11, usamos Spring Boot y comenzamos a escribir activamente en Kotlin. Veo que Java realmente ha comenzado a avanzar, lanzamientos cada seis meses. Cuéntele a un desarrollador de Java acerca de esto a principios de 2010, se torcería el dedo en la sien. En mi opinión, Java está mejorando.



Java 8 introduce interfaces funcionales que le permiten hacer su código más bonito e implementar funciones de orden superior. Además, apareció la API Stream, lo que hizo la vida un poco más fácil. Aunque LINQ está muy lejos, esto ya es alentador.



Todavía no he descrito las características que aparecieron en las versiones más recientes de Java :)



Pude llegar a conocer el sistema de compilación de Gradle. Me gustó tanto que comencé a escribir scripts de compilación reutilizables para implementar algo similar a los archivos de proyecto en .NET Core.



En Java, trabajar con asincronía es más transparente: cuando escribes código, realmente tienes que pensar mucho en ello. Esto es bueno y malo. Me gusta este momento porque, como me encanta el sistema operativo y el hardware, es bueno poder influir en la JVM como quieras.



En cuanto a los planes personales, me interesa el tema de las aplicaciones de alta carga. Aún no se me ha revelado por completo, pero lo estoy estudiando activamente.



Intento no ser fanático de DRY, pero siempre que puedo hago todo lo posible por reutilizar el conocimiento.



Y, por supuesto, quiero mejorar mis conocimientos en Kotlin para comenzar a escribir servicios interesantes en corrutinas. Kotlin en sí es lo que se suponía que era Java. Andrey Breslav & Co han hecho un excelente trabajo.



La diferencia entre Java y .NET se compensa en gran medida con la introducción de Kotlin en mi vida. Pero extraño mucho .NET.



Reflejos:

  • se pierda el conjunto de herramientas de la consola dotnet. Allí puede construir un proyecto y crear uno nuevo a partir de una plantilla, y mucho más;

  • Me falta una alternativa normal para EntityFramework con LINQ;

  • Java parece consumir más recursos que .NET. A veces, la computadora simplemente desaparece en sí misma.





Pero, en la vida real, Java es quizás lo más interesante que me ha pasado últimamente.



Conclusiones y palabras de despedida



Cambiar algo en la vida es a menudo una violación de la zona de confort y una especie de incertidumbre. Puedes mirar la situación con pesimismo, pero al contrario, me estimula. Quiero ser siempre relevante. Entiendo perfectamente que no puedes obtener todo el conocimiento, pero puedes intentarlo.



Específicamente, al cambiar el lenguaje de programación de trabajo, me di cuenta de lo siguiente: la mayoría de los problemas son los mismos en todas partes. La única diferencia es que se resuelven mediante diferentes enfoques.



.NET me mostró el hermoso C # con mucho azúcar, y también permanece en mi memoria como el conjunto de herramientas más poderoso, sin tener que correr y apilar el mundo en un hilo.



Java me sumergió en el mundo infinito de las bibliotecas OpenSource y también me mostró que hay muchas formas de resolver este o aquel problema. El lenguaje Java en sí es muy simple y creo que es muy amigable para los programadores novatos.



Mi opinión es que antes de entrar en disputas sobre la frescura de una tecnología, debes probar una alternativa. Por ejemplo, en Beeline Kazajstán, tuve la oportunidad de usar .NET 5 para implementar un microservicio. Es decir, utilizarlo en una empresa donde el lenguaje principal del software de servidor es Java. El microservicio encaja en todo el paisaje sin problemas. Mis colegas estaban interesados ​​en hacer revisiones de código, incluso discutimos las diferencias fundamentales. En general, los chicos también se interesaron en ampliar sus horizontes.



En mi mundo, un programador real no es el que se ahoga detrás de un lenguaje de programación o grita a diestra y siniestra que la tecnología que usa es la mejor. Un programador real es alguien que puede resolver un problema de forma rápida, eficiente y económica, y lo más importante, a largo plazo. A estas personas no les importa en qué lenguaje de programación desarrollar, eligen una herramienta basada en la tarea.



Por lo tanto, recomiendo que todos intenten cambiar la pila de tecnología y tal vez el rol en el equipo. Todos los cambios conducen en última instancia al enriquecimiento del conocimiento. Quizás no necesite algunos conocimientos en este momento, pero puede ser útil más adelante.



Cambiar la pila no es difícil: debe imaginar el momento en que comenzó a escribir código e intentar sumergirse en la nueva tecnología "enfadando al tonto". Por supuesto, con el tiempo, no hay escapatoria a las comparaciones, pero es importante recordar que cada tecnología y lenguaje de programación a menudo predica su propio estilo y principios.



Esto no significa que deba escribir código espagueti y estructuras de tres pisos en todas partes. Siempre debe ceñirse a la separación de preocupaciones y escribir código simple. Pero, si lo desea, puede permitir muletas. Todos somos pecadores :) ¡



Ponte a prueba y siempre estar en la cima!



PD Si llegó al artículo para averiguar qué idioma y plataforma es la mejor, o escribir su opinión al respecto, ayudémoslo.



All Articles