Y cuando quiero aprender .Net, ¿por dónde comienzo?
En nuestro país, ésta pregunta es más común de lo que podríamos pensar. Muchas personas han oído acerca de .Net, asisten a eventos donde se habla del tema, pero aún siguen trabajando con tecnologías anteriores y cuando desean dar el salto a las nuevas tecnologías se encuentran perdidos en un mundo de información que no les permite saber por dónde empezar. Cuando una persona se dirige a un centro de entrenamiento para aprender .Net, los cursos se centran únicamente en enseñar el lenguaje pero no el contexto y la realidad de las organizaciones y de lo que hoy se espera sean las soluciones de tecnología informática en el mercado actual.
Hace un par de días estuve navegando el sitio de Internet de Microsoft y encontré mucha información para aquellos que desean iniciarse en .Net, sin embargo, el camino a seguir no es claro, los recursos están dispersos, y en general no hay una ruta definida para empezar. En éste artículo trataré de resumir aspectos claves y recursos que considero son el camino que deberían seguir las personas que desean ingresar y adoptar las nuevas tecnologías Microsoft y para ello deciden aprender y utilizar .Net en el desarrollo de sus proyectos.
Lo primero que debo decir es que .Net es más que un conjunto de lenguajes nuevos para programar y un marco de trabajo. Recuerdo mucho, que cerca del año 2000, cuando se empezó a hablar de éstas nuevas tecnologías, se empezaba a hablar de .Net como una visión a futuro de lo que sería toda una infraestructura de aplicaciones de la nueva era, basada en comunicación, interoperabilidad, etc.; y se veía esto como algo del otro mundo que iba a tardar mucho tiempo en implementarse, que los dispositivos móviles que se mostraban en esas demostraciones aun no iban a estar disponibles... Entonces .Net se volvió un nombre comercial y a los servidores que tenían en su nombre el número 2000 (Windows 2000, SQL 2000, Exchage 2000) se les llamaba los “servidores .Net” porque eran los servidores con los que esta visión de aplicaciones del futuro empezaba a volverse realidad. , A decir verdad, desde mi punto de vista, los mensajes de evolución de la plataforma no fueron los mejores para los que desarrollamos aplicaciones con ella, pero en términos de mercadeo fueron un éxito porque hoy todo el mundo sabe que .Net existe, es una realidad, ya no es el futuro, aunque muchas personas aún no entienden de que se trata todo esto.
Se puede ver una descripción resumida de cómo Microsoft define que es .Net aquí.
Primer Paso: Qué ha pasado en el desarrollo de aplicaciones
Lo primero que se debe entender es que hoy en día las organizaciones y el papel de la tecnología de la información han cambiado tanto, que ya no basta con hacer aplicaciones que satisfagan una necesidad de negocio, que automaticen un proceso, que resuelvan la liquidación de la nómina, la facturación, el sistema de pedidos y que también sirvan para hacer comercio electrónico. Las organizaciones se han especializado tanto y sufren ajustes y cambios tan rápidos, que es necesario que la tecnología de la información se ajuste rápidamente a estos cambios, sea lo suficientemente flexible para cambiar al ritmo de la organización y permita que si cambian los procesos, o se integran nuevos procesos a los ya existentes, las aplicaciones se puedan ajustar fácilmente y sirvan para seguir soportando el negocio que crece y se adapta a las necesidades de un mercado exigente.
Para mí, el éxito de una plataforma de tecnología actual, consiste en la capacidad de adaptarse a los procesos de la organización, y a los cambios continuos que estos sufren en busca de la optimización y la calidad. La tecnología se debe adaptar a la organización y sus usuarios, no son los usuarios y las organizaciones los que se deben adaptar a un proceso rígido automatizado en una aplicación de software.
Muchas aplicaciones fueron diseñadas sin tener en cuenta esas consideraciones y muy seguramente, si usted aún no conoce mucho de las nuevas tecnologías, especificaciones, modelos y patrones de aplicaciones distribuidas, estará haciendo aplicaciones poco flexibles y poco integrables, tal y como las aplicaciones que se desarrollaban hace una década. Si bien éstas aplicaciones han ayudado a soportar procesos de negocio de manera independiente, cuando se requiere hacer un ajuste no son flexibles, cuesta demasiado hacer los cambios, se corre el riego de desestabilizarlas, y si se habla de integración con otras aplicaciones, casi siempre se termina haciendo parches, integración con archivos planos y en general creando procesos que no ayudan a la organización a ser más eficiente, y la tecnología de la información se convierte en un activo que se va depreciando y que va a terminar en la papelera de reciclaje por su falta de flexibilidad.
Dada la necesidad de poder implementar soluciones distribuidas, flexibles e integrables se creo un nuevo rol en la implementación de soluciones, el del “Arquitecto de Software” que es la persona encargada de definir los parámetros bajo los cuales debe ser construida una solución de tecnología informática, para que cumpla con las necesidades a largo plazo de los negocios, permitiendo que la tecnología verdaderamente apalanque al negocio y le permita seguir creciendo. Usualmente el arquitecto de software es una persona que siempre esta mirando nuevas metodologías de comunicación en aplicaciones distribuidas, nuevos paradigmas de integración con bajo acoplamiento, y en general son los que mejor conocen hacia donde se dirigen los desarrollos tecnológicos.
Esta larga introducción, no es más que para explicar que las tecnologías como COM y DCOM y otras tecnologías que fueron creadas a finales de los 80s y principios de los 90s, no son lo suficientemente flexibles para la creación de aplicaciones que puedan adaptarse a las necesidades de las organizaciones de hoy y por eso nació .Net, un conjunto de tecnologías basado en la visión de brindarle a las organizaciones una infraestructura tecnológica flexible, capaz de adaptarse rápidamente a los cambios del negocio, que es capaz de comunicarse a través de estándares y que en general permite la creación de aplicaciones fáciles de integrar, fáciles de modificar, y que facilitan la implementación rápida de cualquier tipo de soluciones, para cualquier tipo de dispositivo.
Pero el solo cambio tecnológico no es suficiente para crear aplicaciones flexibles, integrables, fáciles de mantener, etc. Lo primero que se debe aprender y entender es cuáles son las prácticas de programación y los patrones que han sido definidos y que permiten crear aplicaciones que cumplan con éstas características. Este es el primer paso para poder aprovechar las tecnologías que .Net brinda.
Para entender mejor los cambios que han tenido las aplicaciones conforme han evolucionado las tecnologías, recomiendo ver y entender toda la documentación que encuentre de SOA “Service Oriented Arquitecture”. Sin embargo, es necesario precisar que no todas las aplicaciones requieren de este tipo de modelos u orientación arquitectónica. Hay muchos problemas o situaciones de negocio que no requieran de una arquitectura tan robusta y pueden resolverse de una forma mas simple. Lo que quiero decir es que SOA no es la solución a todos los males; de hecho es algo muy reciente y que está en continuo desarrollo, pero si se requiere hacer aplicaciones para grandes empresas, modelar o automatizar procesos para el sector empresarial, o si la aplicación que se está diseñando en un futuro puede convertirse en un sistema de misión crítica en algún tipo de industria, se debe tener en cuenta este tipo de lineamientos para no tener dolores de cabeza más adelante.
Ahora bien, si ha leído mucho acerca de SOA y arquitecturas para aplicaciones distribuidas y aun no entiende muchas cosas acerca de las implementaciones y las razones para hacer soluciones desacopladas, orientadas a servicios etc. no se preocupe, estos conceptos son algo que toma tiempo y experiencia para pode entender y comprender completamente, el camino que se ha recorrido para llegar a este tipo de modelamiento de soluciones ha sido largo y nada fácil, y aun se sigue investigando mucho sobre este reciente tema así que seguramente usted también tendrá que investigar, probar y posiblemente en algunas ocasiones cometer errores en su aprendizaje porque aún falta mucho camino por recorrer en toda la industria del software en cuanto a aplicaciones distribuidas se refiere. SOA es la mejor alternativa hasta ahora para el modelamiento de soluciones empresariales, y lo seguirá siendo durante mucho tiempo, así que le recomiendo que empiece a actuar si aun no lo ha hecho, porque la tecnología y los retos de las organizaciones no dan espera.
Segundo Paso: Dominar los conceptos Básicos que se necesitan
Si ya entiende mejor como se modelan las aplicaciones empresariales hoy en día y desea empezar a escribir código que esté en la onda de .net y de las aplicaciones empresariales distribuidas y basadas en servicios, asegúrese de dominar muy bien los conceptos básicos que le permitirán tener éxito en la construcción de aplicaciones en la plataforma .Net.
Muchas personas aun no dominan los conceptos de programación orientada a objetos, y esta información es fundamental para la construcción de aplicaciones en .Net, ya que el Framework ha sido modelado con estos conceptos y en general las aplicaciones que se desarrollan con .Net, quiéralo o no, usaran todos estos conceptos así usted no declare una sola clase.
La programación orientada a objetos permite que usted modele y entienda las soluciones de una manera más sencilla y práctica, de tal manera que cuando usted revisa una aplicación puede entender conceptos que de otra manera serían difíciles de explicar. Para no extenderme, hare un ejemplo muy simple:
Si usted va a diseñar una aplicación para un Banco, seguramente tendrá que lidiar con algo que se denomina una cuenta, pero, ¿qué es una cuenta en realidad? No es más que un concepto, como tal no existe algún elemento físico llamado cuenta. Es un concepto que puede traducirse en un registro de una base de datos que contenga cierta información y unos papeles que contienen unas firmas y tal vez un contrato con algunos acuerdos de servicio. La programación orientada a objetos le permite modelar el concepto cuenta para trabajarlo como si fuera un objeto y de esta manera generar o implementar funciones que se traduzcan en acciones que yo puedo hacer sobre ese objeto: agregar dinero, generar un extracto, obtener rendimientos del mes, etc.; todos los puedo agrupar en este objeto y las cosas se vuelven más claras.
En Software nada existe, todo son conceptos que se traducen en unos y ceros. Un formulario no es nada físico, pero si lo encapsulo en un objeto podre imaginarme que he creado un objeto físico y que puedo hacer cosas con el. D esta manera, todo es más fácil.
Ahora, la programación orientada a objetos brinda muchísimas más cosas que simplemente modelar conceptos como si fueran objetos. Se maneja gran variedad de definiciones que permiten tener flexibilidad para la manipulación de los objetos, lo cual convierte este estilo de programación en una excelente alternativa para la reutilización de código.
El primer lenguaje de programación que aprendí fue C, y posteriormente en la universidad aprendí Java. Este último lenguaje me permitió entender y tener mi primera aproximación al mundo de los objetos, (cuando yo hice mis estudios no existía una materia en la universidad en donde enseñaran estos conceptos. Creo que hoy día debe ser parte del curriculum de todas las universidades). Pero cuando conocí Visual Basic 5.0, así parezca increíble, fue cuando mas entendí como era todo esto del mundo de los objetos. Claro, no tenía que complicarme con todo esto de la herencia, los constructores y todas las cosas que le dan verdadera potencia a la programación orientada a objetos, pero por lo menos aprendí muy bien otras cosas que son supremamente importantes como la encapsulación, la manipulación del los objetos, etc. Por eso mi recomendación si bien no va a ser que empiece a aprender con VB 5, porque no tiene sentido, si va a ser que empiece con el manual del programador de Visual Basic 2005. No se preocupe si quiere escoger a C# como su lenguaje de programación, podrá implentar todas las cosas que aprenda posteriormente en ese lenguaje también, pero la documentación de C# no le explica nada de la POO, ya que los que hicieron la documentación asumen que usted ya lo sabe todo en términos de POO.
Si ya entiende muy bien y domina los conceptos de Programación Orientada a Objetos (si le pareció que no era tan difícil después de todo, prepárese porque esa era la parte fácil y corta), ahora es importante que entienda muy bien los patrones más comunes en aplicaciones distribuidas, como se hacen aplicaciones multi capas, tecnologías que permiten implementar servicios, como desacoplar las aplicaciones y en general todo lo que le permite crear aplicaciones que aprovechen todo lo que le brinda .Net en términos de comunicación, mensajería y servicios.
Para hacerlo fácil, asegúrese de entender muy bien porque es importante crear aplicaciones en múltiples capas, en que escenarios se usan este tipo de aplicaciones y los beneficios que esto le brindara. Obviamente también esto tiene sus consideraciones a la hora de escribir el código, pero la clave es que una vez entienda estos conceptos, no empiece por hacer modelos complicados de aplicaciones, siempre empiece con modelos sencillos y acoplados, pero teniendo en cuenta lo que a futuro podrá o necesitará desacoplar para que pueda hacer un mantenimiento fácil de su aplicación.
Seguramente, cuando ya entienda como hacer aplicaciones de múltiples capas, le vendrán una cantidad de dudas e inquietudes acerca de cómo es la mejor manera de distribuir el código, qué debe ir en que parte, y lo mejor, cuáles son las mejores prácticas para empezar a distribuir su aplicación y los mejores mecanismos de comunicación que existen para ello. Esto será algo fundamental para poder especializarse en .Net mas adelante, pero por ahora no se preocupe mucho, porque una vez termine con los pasos sugeridos y ya sienta que domina los conceptos básicos de .Net y quiera ir mas allá seguramente querrá profundizar en estos temas.
En este punto permítame darle la bienvenida al mundo de las complejidades con las que lidian los arquitectos, esta es la parte crucial de las aplicaciones distribuidas actuales, es en donde se debe hacer una revisión minuciosa de lo que se va a utilizar para que sea lo mas conveniente según el tipo de aplicación y el tipo de infraestructura que se tiene, pero se que lo único que le va a interesar a usted como programador es conocer como implementar lo que el arquitecto le diga, así que lo que debe aprender aquí es lo siguiente:
· Creación y manejo de servicios web y su seguridad
· Tecnologías que permiten desacoplar aplicaciones utilizando mensajería
· Tecnologías de comunicación y distribución de aplicaciones y su seguridad
· Implementación de Entidades de Negocio en aplicaciones Distribuidas
Para poder implementar cualquiera de estas cosas será necesario y fundamental que conozca los aspectos básicos de XML también.
Tercer Paso: Escoja un lenguaje y Domínelo muy bien.
Los lenguajes siempre han sido como una religión para los programadores, y esto es porque cada lenguaje tiene su visión y su mística. Esto resulta bien interesante, porque siempre encontraremos puristas y personas que creen que la mejor forma de hacer las cosas es como cierta tecnología lo ha implementado, pero lo único que pretendo en esta sección es recomendarle un lenguaje según sus necesidades y conocimientos.
Actualmente el poder de los lenguajes es muy, pero muy similar, gracias a la unificación de tipos y a todo lo que el framework definió cuando se creó .Net, así que la escogencia de un lenguaje de desarrollo ya no se basa en las limitaciones que este tenga, sino en las necesidades o la historia de la persona:
1. Si usted viene de un mundo en donde ya conocía muy bien todos los conceptos de POO, y está familiarizado y le gusta la sintaxis de C++ o de Java, pero quiere ser más productivo y no lidiar con las complejidades de C++, el lenguaje recomendado es C#. Este es un leguaje interesante y que ha tenido una gran aceptación desde su creación, pero en mi opinión personal creo que no es el más sencillo ni el más productivo cuando lo comparamos con Visual Basic, pero si el más adecuado para aquellas personas que son muy religiosas con la estructura del código y su escritura.
2. Si usted viene del mundo de la productividad y la magia que proveía Visual Basic 6 o anteriores, permítame recomendarle a Visual Basic .Net. Inicialmente parece que se han hecho muchos sacrificios que hacen que este leguaje parezca ahora más complicado, pero no le será muy difícil entender porqué fue necesario hacer todos estos cambios y seguramente se adaptara muy fácilmente a ellos (aunque le garantizo que va a renegar durante algún tiempo). El no cambiar de sintaxis le va a permitir adaptarse más fácilmente, ya que este es el lenguaje más productivo y más sencillo que existe para .Net y su rendimiento es totalmente competitivo en comparación con C#.
3. Ahora bien si usted hace programas en C++ porque se dedica a hacer cosas muy sofisticadas que requieren de código no manejado, acceso directo al hardware de la maquina, o algoritmos que le provean el máximo rendimiento seguramente seguirá utilizando este lenguaje para su desarrollo.
Para los casos 1 y 2 de esta guía no le proveo tal vez muchos vínculos en donde pueda aprender de SOA y las cosas básicas ya que. Existe información, pero muy dispersa. Sin embargo, para aprender y dominar muy bien cualquiera de estos lenguajes y sus tecnologías puede acceder a los siguientes recursos:
Universidad .Net: son un conjunto de lecciones online en formato webcast, de varios lenguajes, tecnologías, y seguridad en aplicaciones. Seguramente le serán de mucha utilidad para entender muchas cosas y empezar a utilizar los lenguajes en corto tiempo.
Centros de Desarrollo: los centros de desarrollo .Net son los recursos mas importantes y completos de información para cada uno de los lenguajes y tecnologías de .Net. En ellos encontrará información que va desde un nivel básico hasta un nivel avanzado. Este enlace es muy, pero muy recomendable para las personas que inician en .Net o en cualquier tecnología que provee .Net
MSDN Library en español: Para todos aquellos que necesitan la referencia exacta y la documentación de referencia de los lenguajes y las tecnologías, esta es la librería de MSDN actualizada a las versiones 2005.
Comunidades de Desarrollo en Colombia: Existen muchas comunidades que realizan actividades presenciales en diferentes partes de nuestra geografía y pueden ayudarle con recursos y actividades en donde puede aprender .Net
Cuarto Paso: No permita nuevamente que sus conocimientos se desactualicen.
Aun falta mucho camino por recorrer, las tecnologías de aplicaciones distribuidas aun están en una etapa de maduración, y todas las empresas de tecnología seguirán invirtiendo millones de dólares en investigación y desarrollo de nuevas tecnologías que nos permitan tener mejores soluciones para soportar los negocios. Es muy importante estar actualizado, y para eso Microsoft ha creado diferentes mecanismos que le permitirán acceder a la última información, tales como revistas electrónicas como el MSDN Flash, Webcasts como los que encontrara en el Media Center, y eventos presenciales como los MSDN Regional Tour o los Developer Days, para acceder a estos eventos solo basta con que actualice su perfil.