Tienes una versión actualizada de este artículo, con más cosas, aquí: Plataforma .NET, Plataforma .NET Core y Xamarin: el panorama de las tecnologías de desarrollo Microsoft en 2018.
En Julio del año pasado, justo antes de que lanzasen Visual Studio 2015, escribí un post muy detallado sobre todo el lío de versiones que se nos venía encima con la aparición de lo que se conocía entonces como ASP.NET "vNext", y el enorme fiasco que había montado el equipo de desarrollo con la numeración de versiones que habían elegido.
Aunque creo que te interesará y deberías leerlo, si no quieres hacerlo ahora, como resumen te diré que lo que hicieron con el versionamiento del producto daba a entender a la gente que todo lo nuevo que están haciendo iba a ser una nueva versión de lo anterior, sustituyéndolo, cuando en realidad son dos proyectos distintos que trabajarán en paralelo.
Es decir, a partir del momento en el que salga lo nuevo tendremos dos ediciones diferentes y en paralelo de la plataforma .NET: la "tradicional" y la "Core", pensadas para necesidades diferentes y con filosofías distintas.
La última noticia en este culebrón saltó el pasado miércoles cuando anunciaron que le iban a cambiar el nombre definitivamente a la tecnología y que pasaría a llevar el apellido "Core" en todos los nombres.
Así, las nuevas tecnologías que lanzarán se llamarán:
Es curioso que lo hayan hecho ahora cuando la mayoría de los "Insiders" llevamos diciéndole exactamente esto desde hace más de 1 año, e incluso en la última reunión global en Redmond en noviembre tuvimos un fuerte debate al respecto (que parece que por fin les hizo cambiar de opinión). En cualquier caso más vale tarde que nunca ;-)
Sea como fuere, lo importante es que el gráfico de las tecnologías .NET en 2016 será este a partir de ahora:
Nota: En este gráfico he unido con flechas discontinuas ASP.NET Core y EF Core con el Full Framework tradicional porque se pueden utilizar también desde ahí, aunque hay que tener en cuenta que en ese caso las aplicaciones resultantes no serán multiplataforma, y no tendrán acceso a la misma funcionalidad que con las ediciones tradicionales.
Resumen de la situación
Los puntos clave que debemos tener claros son los siguientes:
- Existirán dos versiones diferentes de .NET en paralelo: .NET Full Framework (solo para Windows) y .NET Core (multiplataforma y totalmente Open Source). No son intercambiables. Si usas ASP.NET Core todos los componentes que utilices deberán ser compatibles con .NET Core, lo cual te limita el uso que puedes hacer de controles comerciales u Open Source (por poner un ejemplo: iTextSharp para crear PDFs no es compatible) e incluso de componentes propios anteriores que hayas creado.
- Las versiones Core no sustituyen a las anteriores: son ediciones diferentes, y Core es una nueva opción para aprender y desarrollar. Aunque se parecen y funcionan de manera similar, NO son lo mismo.
- Las ediciones Core tienen menos funcionalidad que las versiones "Full": pero a cambio funcionan en Windows, Mac y Linux y son más ágiles (más rendimiento) y más granulares (podemos decidir con mayor detalle qué partes queremos incluir en una aplicación).
- Entity Framework Core 1.0 es diferente de Entity Framework 6: de hecho cuando salga tendrá su funcionalidad bastante recortada respecto a las posibilidades de la actual versión "Full". A medida que pasen los meses acabará probablemente equiparándose.
Ante esta situación ¿cuál debo aprender?
Dicho así la respuesta parece clara: deberías aprender las dos. Lógicamente, dominando ambas tendrás más puertas abiertas ;-)
Sin embargo el tiempo y los recursos son limitados, así que si debes escoger y quedarte solo con una ¿cuál debería ser?
Difícil elección.
Por un lado .NET Full framework (la tradicional) está presente en cientos de millones de equipos de todo el mundo, y es una de las principales tecnologías utilizadas en la empresa. ASP.NET MVC 5.x es el motor de miles y miles de aplicaciones que se deben seguir manteniendo. Esta tecnología no va a desparecer en un futuro cercano y hay muchísimas empresas en todo el mundo que la utilizan y, por tanto, la demandan. A día de hoy, mi sensación personal es que el Full Framework es el camino más seguro por el que empezar a día de hoy, en 2016, sobre todo si quieres aprender con objetivos laborales.
Por otro lado .NET Core es una tecnología prometedora creada desde cero pensando en que sea multiplataforma y lo más eficiente posible. Por ello es interesante aprenderla si quieres crear aplicaciones que sean capaz de ejecutarse en Windows, Linux y Mac o si el rendimiento es realmente crucial para las mismas. No es que la versión tradicional no obtenga un gran rendimiento, es simplemente que Core está pensado para eso, para ejecutarse en la nube donde la eficiencia significa dinero. Además, el equipo de desarrollo de .NET en Microsoft está volcado en esta nueva edición y lo seguirá estando en los próximos meses, así que a medio/largo plazo cada vez tendrá más peso.
Eso sí, en mi opinión es una apuesta más arriesgada por el momento en cuanto a estabilidad de características y compatibilidad hacia atrás. Están haciendo cambios constantemente, no solo añadiendo cosas. La versión definitiva es ya más estable y las nuevas versiones deberían ser 100% compatibles hacia atrás con la 1.0, pero sinceramente no creo que eso les preocupe demasiado. Por eso veo un riesgo. Yo personalmente quizá esperaría unos cuantos meses (hasta finales de 2016 o así) para adoptarla y así asegurarme de su estabilidad. Quizá me pase de previsor, pero....
En cualquier caso, hagas lo que hagas, si lo que quieres es meterte en el mundo .NET, recuerda que los fundamentos de la plataforma y del lenguaje C# son los mismos en ambas plataformas. Así que el primer paso será siempre dominarlos.
ACTUALIZACIÓN 1 de Marzo de 2016: Más de un mes después y las cosas siguen totalmente paradas en cuanto a versiones "oficiales" de .NET Core. A pesar de estar en una versión RC ("Release Candidate", es decir, casi definitiva), no hacen más que meter cambios que rompen la compatibilidad hacia atrás. Las últimas noticias del "Roadmap" son de hace un mes, y sigue sin haber fecha para la próxima RC, y mucho menos para la 1.0 definitiva. Ellos mismos de manera oficial justifican el que no haya una fecha. Los que esperábamos que estuviese listo para el Build, creo que vamos a llevarnos una decepción. Y cuando salga la 1.0 casi seguro que en un mes tienen una 1.1 o similar que romperá la compatibilidad hacia atrás... Todo esto es una opinión personal, pero reafirma mi opinión anterior: .NET Core es una apuesta arriesgada. Y lo será al menos durante los primeros meses después de que salga la versión 1.0 (cuando salga). En fin...
ACTUALIZACIÓN 20 de abril de 2016: en el último hangout con el equipo manifestaron que no habría versión RC2 hasta por lo menos 4 o 6 semanas. Esto nos pone en el mes de junio. Jugando a ser adivino me aventuro a decir que no tendremos versión 1.0 definitiva (RTM) antes de septiembre o quizá octubre de 2016 :-(
Seguiremos informando...
ACTUALIZACIÓN 9 de mayo de 2016: hace un par de días han manifestado que en cuestión de 1 semana más o menos habrá RC2 de .NET Core 1.0, aunque no así del "Tooling". La versión definitiva (RTM) probablemente salga a finales de Junio, o sea, mucho antes de lo esperado hace solo unas semanas, aunque las herramientas de desarrollo definitivas para trabajar con ella tardarán más (¿septiembre?). Más detalles en el blog de nuestro tutor José María Aguilar.
ACTUALIZACIÓN 28 de junio de 2016: bueno, por fin se ha liberado .NET Core 1.0 versión definitiva. Ha sido un tanto precipitadamente porque la cosa no daba más de sí y tenían que lanzarlo, pero aún falta el "tooling" que no saldrá probablemente hasta octubre, junto con la versión 1.2. Es decir, durante los próximos meses van a estar ampliando la plataforma a lo loco. Solo esperemos que no metan cambios incompatibles (se supone que no, pero si nos atenemos al histórico del proyecto, vaya usted a saber...).
¡Espero que te sea útil!
Nota: Gracias a José María Aguilar por revisar este artículo antes de su publicación.