lunes, 9 de abril de 2018

Memorias de un Arquitecto .Net - Parte 1: Lenguajes

¡Hola! Antes de adentrarnos en esta serie de artículos, sólo quería aclarar que continúo siendo Arquitecto .Net y que sigo trabajando con las plataformas de desarrollo de Microsoft. Pero los tiempos cambian, las tecnologías evolucionan y el mundo toma un nuevo rumbo todos los días.

Aquellos más jóvenes o que trabajan en otras áreas, quizás no lo tengan tan presente, pero hasta hace unos pocos años atrás tener el título de “Desarrollador .Net” (o de Arquitecto .Net) estaba asociado a construir únicamente aplicaciones Windows. Alcanzaba con conocer lenguajes como C# o VB.Net, HTML, JavaScript y SQL; con poder desarrollar utilizando la IDE Visual Studio y con saber usar algunos pocos frameworks como ASP.Net, MVC, WPF, Entity Framework, Microsoft Ajax, entre otros.

Aún no estábamos en al auge de los entornos web, ni mucho menos mobile. Y generalmente, para bien o para mal, la mayor cantidad de la lógica se ejecutaba del lado del servidor, es decir en C# o VB.Net.

Pero, y especialmente en sistemas, las cosas difícilmente se mantienen constantes con el paso del tiempo. Los que trabajamos en desarrollo vemos que la línea de lo que implica ser o no ser considerado un profesional de .Net se ha desdibujado bastante. Es así que desde hace unos años pasamos a tener que saber usar un abanico mucho más amplio de herramientas.

Sin entrar en demasiados detalles al respecto, creo que es importante que repasemos algunos de los cambios más importantes que se dieron últimamente para poder entender mejor cómo se ha modificado la concepción de lo que implica construir aplicaciones:
  • Primero y, antes que nada, se ha reducido notablemente la cantidad de desarrollos de aplicaciones de escritorio tal y como las conocíamos hasta hace unas décadas atrás.
  • Esto vino de la mano del incremento en la construcción de aplicaciones web, tanto para usuarios finales como internos. Y uno de los principales motivos que generó este salto fue la evolución de los lenguajes HTML, CSS y JavaScript, los cuales originaron la creación de frameworks y bibliotecas que extendieron ampliamente su funcionalidad de base.
  • Y cuando creíamos que gozábamos de cierta “tranquilidad tecnológica”, se produce la masificación de los teléfonos móviles primero, y la irrupción en el mercado luego de dispositivos sobre los cuales jamás se nos hubiera ocurrido poder desarrollar (como las SmartTV por ejemplo). Y es acá donde surgen conceptos como Cross-Platform, Reponsive Applications, Mobile First, entre otros.
  • Desde el punto de vista de la Comunidad, hubo un aumento exponencial de las herramientas y componentes open source, se trabajó en la integración de sistemas que hasta hace un tiempo funcionaban de forma aislada, se consolidó el trabajo en equipo, se tomó conciencia de las ventajas de compartir nuestro conocimiento, e Internet permitió difundir estos temas llevándolos al alcance de la mano de cualquier desarrollador a lo largo y ancho del planeta.
  • Por su parte, del lado de Microsoft, hubo un cambio de enfoque radical que tomó mayor impulso con la llegada de Satya Nadella como CEO a la compañía en 2014. Desde entonces, la empresa se ha abierto más a la comunidad profesional y ha tomado decisiones que parecen haber cambiado para siempre el enfoque del desarrollo de aplicaciones .Net, como por ejemplo la integración con bibliotecas open source, la adquisición de Xamarin, el desarrollo de .Net Core, la capacidad de instalar SQL Server en Linux, etc.

Entonces, para tomar conciencia de la magnitud del impacto de estos cambios en nuestros perfiles como técnicos, analicemos cuántos lenguajes y frameworks deberíamos conocer mínimamente hoy en día para considerarnos buenos profesionales .Net.
  • A nivel de lenguajes de backend, además de conocer C# y/o VB.Net, no podemos dejar de incluir a Node.JS, que hoy por hoy cuenta con un fuerte respaldo de parte de Microsoft.
  • Si nos centramos en la capa de datos y acceso a datos, tenemos que conocer tanto SQL para poder utilizar motores RDBMS (como SQL Server, MySQL, Oracle); como lenguajes para el manejo de BD no relacionales (como Mongo DB o Redis).
  • A nivel de frameworks, deberíamos tener conocimientos sobre Entity Framework, NHibernate y ADO.Net. Y además saber que contamos con extensiones, como Fluent NHibernate o AutoMapper entre otras, que nos facilitan la integración entre la base de datos y nuestra aplicación.
  • En el caso de que trabajemos con una capa web, además de HTML-CSS-JS, deberíamos mínimamente conocer algo de AngularJS, Angular, Bootstrap, React, TypeScript, Knockout.js, jQuery, y Backbone.js; por nombrar sólo a los principales actores del mercado.
  • Adicionalmente, existe un universo muy amplio de bibliotecas que se integran a las plataformas mencionadas anteriormente y permiten extender la funcionalidad de nuestras aplicaciones con un esfuerzo de desarrollo mínimo: DataTables, jQueryUI, SlideJS, jqGrid, jqPlot, Mermaid, Moment.js, KendoUI, Globalize.js, Jasmine, etc.
  • Si en cambio nuestra aplicación es de escritorio, deberíamos saber usar frameworks como WPF y UWP (Universal Windows Platform).
  • Y finalmente, si nuestra aplicación está dirigida al universo mobile, deberíamos tener el concepto de lo que implica el desarrollo para dispositivos móviles y los lenguajes propios de iOS (Swift/Objective-C) y Android (Java). Dentro de lo que corresponde al alcance de Microsoft, podemos mencionar a Xamarin y Xamarin.Forms como plataformas de desarrollo, las cuales se integran directamente a Visual Studio desde su versión 2015 y que nos permiten generar aplicaciones nativas multiplataforma utilizando como lenguaje de desarrollo C#.


Además, existen cientos de librerías open source en NuGet que podremos incorporar en nuestros desarrollos para simplificar nuestro trabajo y sumar funcionalidad estándar a nuestras aplicaciones. 

¿Y si le sumamos el hecho de que actualmente existen dos tipos Frameworks .Net? Por un lado, el Framework .Net clásico, que ya va por su versión 4.7 y, por el otro, la implementación abierta y multiplataforma .Net Core, cuya versión 2.0 fue liberada recientemente en agosto de este año.

Y no nos olvidemos que también podemos optar por tres IDE para trabajar en .Net: Visual Studio (ya está disponible la versión 2017), Visual Studio Code (la última versión liberada fue la 1.18.0) y la flamante IDE Visual Studio for Mac.

Son todos estos ingredientes los que terminan repercutiendo en nosotros como profesionales, ya que nos lleva a salir de nuestra zona de confort y explorar otras posibilidades impensadas hasta hace unos años como, por ejemplo, desarrollar una aplicación .Net que corra en Linux y/o Mac; el poder desarrollar aplicaciones para Android con C#, o construir una aplicación MVC desde una Mac y desplegarla en Docker en vez de en un IIS en Windows.

¿Interesante no? A simple vista parecen bastantes componentes los que debemos tener en nuestra caja de herramientas. El truco para no ahogarnos en un vaso de agua está en saber cuál utilizar en el contexto de cada proyecto y cómo integrar cada parte con el resto de las tecnologías que elijamos.

Mi consejo, de cara a los próximos años que se vienen, es que como profesionales debemos capacitarnos. Y no sólo haciendo un curso de C# o Visual Studio, sino formándonos sobre diferentes lenguajes, tecnologías y plataformas para ampliar nuestra mente.

Además, debemos conocer y aprender a usar una gran cantidad de frameworks y bibliotecas y tomar conciencia de que gran parte del desafío no es simplemente saber usarlas (para eso tenemos la documentación de cada una de ellas disponible en Internet), sino saber cómo integrarlas para que todas funcionen correctamente en conjunto.

Cada uno de nosotros deberíamos tomarnos el tiempo de evaluar qué nos está faltando incorporar y comprometernos a salir a buscarlo, principalmente, a través de la formación y de la experimentación.

En próximos artículos vamos a continuar debatiendo estos cambios que se están dando y que tienen un fuerte impacto para los que trabajamos vinculados a tecnologías .Net.

¡Hasta la próxima!

Autor:
Ing. Ariel Martín Bensussán
.Net Practice Manager