Programador profesional, o como pretender tener una navaja suiza con solo un clavo

Programador profesional, o como pretender tener una navaja suiza con solo un clavo
Sin comentarios Facebook Twitter Flipboard E-mail

Hace unos días escribí un largo artículo sobre las mil carreras del informático profesional y explique de forma más o menos detallada la realidad oculta que abarca mucho más de lo que la simple palabra indica.

Hoy quiero centrar el objetivo en la especialización de programador o desarrollador de aplicaciones de software, y desglosar la pléyade de conocimientos que se espera de los profesionales de picar código, obteniendo las capacidades de una navaja suiza por el precio de un solo clavo.

Mil profesiones en una

Como todo lo relacionado con la informática o Ciencias de la computación, hay mucho más de lo que parece. La mayoría de las personas tienen una imagen romántica del programador, imaginando algún tipo de "friki" que vive de romper la seguridad de Matrix y sabe arreglar impresoras.

La realidad supera la ficción ya que el desarrollo es una actividad profesional extraordinariamente compleja que requiere de inteligencia, vocación, estudio, metodología, intuición, capacidad de reflexión, pensamiento científico y tenacidad (mucha tenacidad).

Además, para complicar las cosas, el eje central de la actividad laboral se centra en resolver requisitos funcionales por medio de algoritmos lógicos computacionales. Obligando a conocer, controlar y dominar el entorno de trabajo.

Backend

Backend

La inmensa mayoría de las aplicaciones actuales utilizan persistencia de la información y lógica de negocio para alimentar la UI que es con la que interactuan los usuarios. Por lo cual, desde un punto de vista arquitectónico, casi en la totalidad de los casos se debe de programar un backend para las aplicaciones.

Los especialistas en programación en backend se centran en la optimización y rendimiento, en la mantenibilidad, escalabilidad, estabilidad, usabilidad y conectividad del código. Para responder con el máximo rendimiento a las peticiones generadas en la capa de representación.

Pero no se queda solo en esto, se necesitan conocimientos en bases de datos (lenguaje SQL o no SLQ, dependiendo del sistema de persistencia), transacciones, búsqueda, etc. También hay que tener un buen control de los framework de persistencia que se decida utilizar -por ejemplo un ORM como Hibernate o Entity Framework- y de lenguajes de consultas como Linq.

El control de modelos arquitectónicos como MVVM o MVC debe ser total, al igual que el manejo de interfaces, patrones de software y aplicar en todo momento los conceptos SOLID. Lo que significa, por ejemplo, saber utilizar técnicas de inyección de dependencias.

El testing es el mejor amigo del desarrollador de Backend, y debe manejar con comodidad frameworks como xUnit, MS Test o jTest para construir test unitarios, de integración, mocks, stub, etc.

Se debe ser capaz de realizar operaciones de administración y configuración de sistemas. Es decir, si estoy haciendo una aplicación que va a correr en un Apache o en un IIS o en un Node.js, debo conocer las diferencias, las características de cada plataformas, los requisitos de hardware y software que he de tener en cuenta, y - con la llegada de la nube - las posibilidades y restricciones que me ofrece cada solución.

Actualmente con la programación orientada a objetos como reina indiscutible en el arte de picar soluciones, las mayores diferencias entre los profesionales dedicados al backend son los lenguajes que utilizan cada uno y los framework u herramientas que decide aplicar.

Front End

Ui

Para el usuario final las aplicaciones informáticas son solamente la parte visible, el front end o interfaz de usuario. Pero rascando un poco encontramos que los requisitos para dedicarse a este desarrollo también son variados y complejos.

El primer reto es la enorme diversidad de dispositivos y tecnologías de representación. No es lo mismo hacer una web en HTML5 + JS + CSS, que hacer una app nativa cada una especializada en su propio sistema operativo, que una de escritorio (sea linux, osx o windows), que utilizar tecnologías propietarias como Flash o Silverlight o que la representación sea en dispositivos "diferentes" como pantallas de LCD, etc.

Para darle otra vuelta de tuerca, incluso en una misma plataforma existen problemas de obsolescencia, incompatibilidad, segmentación y versionado. Lo que en un modelo funciona bien, en el modelo de al lado se ve mal o le faltan características.

Y a esto hay que añadir que el número de tecnologías, lenguajes y framework relacionados con la construcción de Front End es enorme, y sigue creciendo día a día. En esta zona del desarrollo se está reinventando la rueda constantemente, y se está incrementando la complejidad a consecuencia de la evolución en los requisitos de la Experiencia de Usuario (UX).

Los conocimientos necesarios para orientar la carrera profesional hacia este tipo de desarrollo con principalmente iguales que los de un profesional de Backend, pero con un fuerte componente interactivo.

Es necesario conocer al dedillo el lenguaje de representación (XAML, HTML, CSS, JS, etc.) para saber dónde están sus ventajas y limitaciones; las virtudes y defectos de los framework que facilitan el trabajo como pueden ser Bootstrap, Angular, etc.; la arquitectura más eficiente en cada caso, aunque ahora está arrasando MVC y MVMVC (View, ViewModel, Controller, Model) y sus sistemas de binding automático y bidireccional.

Y, como nadie nos gana a los desarrolladores en complicarnos la vida para trabajar menos, han aparecido las SPA (Single Page Application) con su cambio de paradigma en donde llevan parte de la lógica de negocio al cliente.

Otra especialización que cada vez se busca más en el mercado es la de maquetador (web). Es decir, un desarrollador con gusto visual que sea capaz de hacer que los diseños gráficos que han producido la gente de arte se conviertan en una interfaz plenamente funcional. Este profesional es el puente entre dos mundos difícilmente coordinados, y que demasiadas veces se olvida el uno del otro.

Por último, entre las profesiones relacionadas con el desarrollo de Front End está el de diseñador gráfico, originario del campo de las Bellas Artes, pero que debe tener conocimientos de las limitaciones de los navegadores Web. Y el diseñador de UX (de experiencias de usuario), que es un compendio de psicología, sociología y otras ramas del saber.

Ninguno de estos perfiles tiene porqué ser informático, pero si entender y comprender las complejidades tecnológicas de la plataforma donde se va a construir el software y la interacción del usuario final.

Persistencia de datos

Ardilla

Como comentaba anteriormente, la programación orientada a objetos es la que reina actualmente en el desarrollo de software. Pero la persistencia de la información (generalmente sobre base de datos) no utiliza lenguajes que sigan este paradigma para la explotación del contenido.

Por ello existe un perfil profesional específico, también a su vez compuesto por especializaciones, que es el desarrollador de aplicaciones de datos.

Si estamos hablando de bases de datos relaciones como las grandes MS SQL, OracleDB, MySQL o similares, el conocimiento profundo del lenguaje SQL con sus diferentes sabores es imprescindible.

Si entramos en repositorios NO SQL como MongoDB o Haddop, nos internamos en territorios mucho más complejo porque no hay un único estándar de lenguaje, lo cual, por otra parte, es imposible dada las diferencias de conceptos, estrategias y objetivos de cada plataforma; obligando al desarrollador a especializarse y formarse para cada tecnología.

Esta soltura en obtener conjuntos de datos lleva a que el mercado laboral lo asimile como constructor de informes, por lo cual manejarse con las herramientas de los fabricantes (MS Reporting Server u Oracle Reports) o construir software propio que los genere es también parte de la labor de este profesional.

Lo cual desemboca en los especialistas en Bussines Inteligent y minería de datos, por ejemplo creando cubos OLAP para extraer métricas complejas. Que a su vez gana volumen con la llegada del Big Data en donde se multiplica exponencialmente la cantidad de información almacenada y de la que extraer conocimiento. Y que está desembocando en el nacimiento de los Científicos de Datos, profesionales con una formación en las ciencias matemáticas, estadísticas, que domina la programación y sus diferentes lenguajes, ciencias de la computación y analítica.

Pero aún hay más

Los tres grandes sectores en que he dividido de forma generalista y grosera la profesión de programador, no son más que una aproximación inicial a decenas de especialidades que emergen de estas tres básicas.

También existen grandes en el perfil profesional de acuerdo al mercado al que está orientado el desarrollo, como juegos, representaciones visuales, arte, etc. Y también debo tener en cuenta los profesionales especializados en aplicaciones de nicho de mercado vertical u horizontal como son SAP, SharePoint, Office, CMS, etc.

Y, además, existen múltiples plataformas auxiliares que también son parte del conocimiento y experiencia exigidos a los programadores actuales, como son los repositorios de código, los CSV y CSVD, las herramientas de gestión, seguimiento y control de proyectos, y el estudio de metodologías de producción clásicas y agiles.

Es mi intención desglosar todo ello en un próximo capítulo de este especial sobre la profesión de informático en general, y de desarrollador en particular.

En GenbetaDev | Sección de empleo, Las mil carreras del informático profesional

Comentarios cerrados
Inicio