Lo que los desarrolladores de software necesitan saber

Hoy en día los desarrolladores de software no tienen que preocuparse de tantas cosas a diferencia de sus predecesores, como la codificación para reducir al mínimo el consumo de memoria RAM, incluso si esto significa mucho más tiempo de ejecución, o de las conexiones WAN yendo a una velocidad excesiva de 14,4 kilobits por segundo. (Aunque, puede haber algunas habilidades fuera de moda que podrían beneficiarlos o que podrían recuperar relevancia).

 
Sin embargo, lo contrario también es cierto: hay muchas nuevas habilidades y áreas de experiencia que los desarrolladores de software, los desarrolladores de hardware, sistemas y administradores de red y otros profesionales de TI necesitan, y que simplemente no existían en el pasado. (Donde "el pasado" puede ser cualquier cosa, desde "más de tres meses" a cinco, diez, veinte o más años). O solo eran pertinentes para las organizaciones y aplicaciones con presupuestos enormes.
 
"La lista de lo que necesita hoy y que no era necesario antes depende de hace cuánto tiempo que fue a la escuela, cuánto ha trabajado para mantenerse al día en la tecnología, la industria del software y la ingeniería de software", señala David Intersimone, vicepresidente de relaciones con desarrolladores y principal evangelizador de Embarcadero Technologies.
 
Saber lo que necesita importa, si está empezando como desarrollador de software (o tiene intención de convertirse en uno), o es un "experimentado" profesional que quiere mantenerse actualizado en su carrera, volver a ella o adelantarse.
 
Aquí están las "habilidades encontradas" que un número de profesionales de TI consideran nuevas áreas para los desarrolladores de software que desean añadirlas a su cartera de conocimientos. (Aclaración: En su mayor parte, he dejado fuera sugerencias acerca de los lenguajes de programación específicos, ya que es demasiado obvio).
 
El uso de las bibliotecas
"Una cosa que me parece una nueva habilidad es la necesidad de trabajar con librerías pre-empacadas y en plantillas en todos los nuevos lenguajes, como Java o C++ o Python", señala el consultor y desarrollador de software, Jeff Kenton. "Solía pasar que una vez que usted conocía el idioma y un pequeño conjunto de llamadas al sistema y llamadas matemáticas o encadenadas de la biblioteca, se establecía el programa. Ahora puede escribir aplicaciones complejas al encadenar juntas las llamadas de biblioteca y ponerles un poco de pegamento para que se sostengan juntas. Si solo conoce el idioma, no está listo para producir nada".
 
El desarrollador de aplicaciones para el iPhone, Hwee-Boon Yar, que ha estado escribiendo y vendiendo software durante diez años, señala: "Ahora están disponibles en línea más recursos de programación gratuitos. Saber hacia dónde mirar, como stackoverflow.com, así como los buenos hábitos que hay que adoptar en el largo plazo es importante. Por ejemplo, si se convierte en alguien que Googlea buscando una solución a un problema de programación y copiar y pegar todo el tiempo, nunca mejorará sus habilidades".
 
Factorice en sus usuarios
Meredith Anderson, arquitecto empresarial y de información, añade, "en el 2008, las palabras clave como "arquitectura de la información" e "ingeniería de la utilidad" eran escasas en las ofertas de trabajo en línea. En el 2010 hubo muchos anuncios de empleo con estas palabras clave. No estoy seguro si el mercado reconoció la necesidad y las habilidades existentes, o si la necesidad se unió en torno a estas palabras para encontrar las habilidades. En cualquier caso, las habilidades de ingeniería de la experiencia del usuario -ingeniería de utilidad, diseño de interfase de usuario y arquitectura de la información, todos diferentes del diseño gráfico -se han convertido en un área formal de la experiencia, descrita por un vocabulario específico. Y en el último par de años la demanda de estas habilidades se ha disparado".
 
Merryl Gross, arquitecto de la interfase de usuario en el área de las tecnologías de la información en salud, agrega: "si bien es cierto que es importante conocer su tecnología, el conocimiento de las personas que utilizan su software, cómo la utilizan, y lo que es importante para ellos sobre el software es fundamental en estos días, cuando la gente espera más de sus dispositivos. Esto evitará que cometa muchos y costosos errores. Y donde no tenga este conocimiento, asumiendo que pasará parte de su tiempo de planificación entendiendo por qué a sus usuarios o público objetivo les gustan o quieren las cosas que quieren -y saber cómo reunir y evaluar esta información".
 
Programación asincrónica y otras técnicas
"Debido a la transición a la computación en la nube, mayormente a través de interfases basadas en web, estamos viendo un énfasis en la programación asincrónica", señala Itai Danan, fundador de Cybernium, una empresa de desarrollo de software y consultoría en diseño web. "Hace diez años, esto era utilizado principalmente por los sistemas transaccionales, como bancos, hoteles y reservas de vuelos. En la actualidad, todas -excepto las aplicaciones más sencillas- requieren de programación asincrónica, sobre todo debido a AJAX. Este es un estilo muy diferente de la programación -la mayoría de cosas que se enseñan sobre optimizaciones de software no se aplican a través del límite de la red".
 
Brian Fino, director general de Fino Consulting, una firma de consultoría TI que se especializa en el desarrollo de aplicaciones para empresas, la nube y móviles para el entorno empresarial moderno, destaca la necesidad de comprender el impacto de las infraestructuras de distribución, red, hardware multi-core, etc
 
"La infraestructura barata y fácilmente asequible ha hecho que la mayoría de las aplicaciones sean multi-dimensionales y distribuidas", explica Fino. "Los ingenieros de software tienen que tener una buena comprensión de cómo trabajan los sistemas distribuidos desde los funcionales hasta los paquetes en el cable y la forma en que están encaminados".
 
Además, añade Fino, entendemos el diseño multi-amenaza. El hardware hoy en día es multi-núcleo, los ingenieros de software tienen que entender cómo diseñar software que pueda aprovechar las capacidades del hardware disponible hoy en día".
 
Amplitud del conocimiento
"Es más importante tener una amplitud de conocimientos", señala Ben Curren, co-fundador de Outright.com, que ofrece software de contabilidad en línea fácil de usar, especialmente para pequeñas empresas. "Por ejemplo, los desarrolladores web en estos días necesitan entender a los clientes, facilidad de uso, HTML, CSS, Javascript, API, frameworks del lado del servidor, y hacer pruebas/control de calidad".
 
"Los programadores no saben que alguien más va a cuidar el código que escriben", critica Sarah Baker, directora de operaciones de una compañía de medios de Internet. "Ellos no aprenden sobre el manejo de la liberación, la evaluación del riesgo de desplegar su código en una infraestructura, o el análisis de fallas de su código en el entorno de producción -todo lo que sucede después de escribir el código. No aprenden que un registro es una comunicación a una persona de operaciones, y debe ayudar a que una persona de operaciones determine qué hacer al leer el registro".
 
Craig Schwartz, senior engagement manager en Freeborders, compañía global proveedora de servicios, contempla tres competencias básicas demandadas: el desarrollo móvil, entrega global y experiencia de desarrollo ágil. "Con el crecimiento de la informática móvil, la capacidad de crear aplicaciones web diseñadas para funcionar en dispositivos móviles, aplicaciones de Internet enriquecidas (RIA) para el mercado de telefonía móvil, y las aplicaciones que se ejecutan directamente en los dispositivos móviles (Android y el IOS) será una habilidad necesaria para los desarrolladores a medida que ese mercado crezca".
 
Jane Gilligan Hamner, vicepresidente de desarrollo de negocios de Harvey Nash USA, una firma de búsqueda y reclutamiento profesional de ejecutivos y de outsourcing TI, informa, "en el mercado de Chicago nos encontramos con que los clientes están pidiendo experiencias más ricas en las aplicaciones, como Windows Presentation Foundation (WPF) con ASP.NET, una programación Ajax como jQuery y las herramientas de Dojo Javascript.
 
Tampoco se trata solo de lo que usted sabe bien. Se trata también de seguir añadiendo conocimientos y habilidades, comenta Amy Wilson, gerente de servicios al cliente en la forma de diseño de aplicaciones móviles Accella. "Con el rostro de la tecnología en constante cambio, y las habilidades necesarias para mantenerse al día con nuevo hardware/software, los programadores y desarrolladores tienen que ser mucho más flexibles en el mercado actual. Aprender un idioma o habilidad no corta el lugar de trabajo de hoy. Ser flexible y estar al día en nuevas versiones de software es la clave para ser un recurso muy exitoso.
 
Dominio de conocimientos para nuevos puestos de trabajo
Muchos puestos de trabajo piden "dominio" de conocimientos, además de la experiencia con software.
 
Mary-Anne Wolf, quien es un ingeniero senior de software, líder del proyecto técnico y arquitecto, me envió una lista de habilidades -con una puntuación de cuatro- y focos de trabajo, aquí hay algunas opciones:
 
* Diseñador de reconocimiento de voz basado en una interfase de usuario no-visual.
* Diseñador de software para dispositivos móviles con pantalla grande y sin disco duro.
* Diseñador de aplicaciones de localización y orientación.
* Especialista en software de exploración de petróleo, gas natural y geología.
* Especialista en el diseño de dispositivos médicos que estén incrustados en el cuerpo humano.
 
Bruce Douglas, jefe de evangelización de IBM Rational Software, sugiere varias áreas de especialización de dominio, incluyendo:
 
Mecánica de vehículos eléctricos: "A medida que los fabricantes de automóviles actualizan las funciones de electricidad, la cantidad de código de software en cada vehículo aumentará en la misma cantidad. Los ingenieros de software con conocimientos y fundamentos en los vehículos eléctricos estarán en mejor posición para crear sistemas complejos de batería, unidades de propulsión eléctrica y electrónica para la cabina".
 
Ingeniería ambiental: "El movimiento verde seguirá siendo un tema candente para los futuros ingenieros. Encontrar nuevas formas de mejorar el medio ambiente, suministrar agua saludable, aire y tierra para la vida humana, y remediar sitios contaminados son áreas importantes de la experiencia para los ingenieros del software".
 
Métodos de desarrollo ágiles y colaborativos
"Los desarrolladores de hoy necesitan tener conciencia de los procesos más ágiles de desarrollo de software", señala Jeff Langr, propietario de Langr Software Solutions, una consultora de software y empresa de capacitación. "Muchos equipos modernos han aprendido poco a poco, a construir y entregar software de alta calidad en una forma altamente colaborativa, de acuerdo con las cambiantes necesidades empresariales. Esta capacidad de adaptación y entrega a menudo puede resultar en una ventaja competitiva importante en el mercado.
 
"Con el fin de hacer frente a las continuas demandas de cambio provenientes de la empresa, y mantener los costos razonables de mantenimiento de sus sistemas, los desarrolladores de hoy en día necesitan entender cómo hacer crecer gradualmente sus sistemas con las prácticas apropiadas de calidad técnica", señala Langr. "Algunas de estas prácticas son las siguientes: desarrollo basado en pruebas (TDD), pruebas de aceptación automática, refactoring, integración continua, y prestación continua".
 
Desarrollo de la capacidad de despliegue, escalabilidad y manejabilidad
"Es probable que los administradores de sistemas sean propietarios del software por mucho más tiempo que los desarrolladores ¿Qué está haciendo para que su gestión sea bastante agradable como para que vean más allá de su próximo despliegue?", pregunta Luke Kanies, fundador y CEO de Puppet labs: "Esto incluye la capacidad de despliegue y de gestión. Las nuevas tecnologías son a menudo mucho más difíciles de implementar en la infraestructura existente, ya que los desarrolladores no han tenido tiempo para resolver problemas como el envasado, que se ejecuta en su viejo sistema operativo de producción, o en la conexión a los diferentes servicios que tiene que utilizar en la producción".
 
Además, señala Kanies, la manejabilidad importa, "la parte más importante de toda la vida de una aplicación es cuando se está ejecutando en la producción, pero los desarrolladores no se detienen mucho tiempo a pensar en cómo mantener la aplicación mientras se ejecuta. Por ejemplo, ¿hay depuración o instrumentación del desempeño? Si se está ejecutando lentamente, ¿puede decir por qué? Si hay fallas, ¿se puede rastrear la falla sin dar de baja al servicio? ¿Se pueden ocultar los fracasos de los usuarios, pero todavía pasar la información de depuración a los administradores de sistemas y desarrolladores? ¿Se puede ajustar la aplicación o desplegar más copias, sin darla de baja?".
 
Y, por último, algunos artículos cortos
Walter Gillett, un desarrollador de la consultora de software Twenty Geese Software, sugiere:
*Las tecnologías de computación distribuida como Hadoop para la computación escalable en la nube en serio
* "Big data" – la capacidad analítica para hacer frente a la avalancha de datos científicos y de la Web, por ejemplo, clickstreams de un gazillion de usuarios de un sitio web a gran escala.
* Marcos de aplicaciones web, por ejemplo, Ruby on Rails, Grails, para una alta productividad.
* "Lenguajes de scripting" dinámicos que hacen hincapié en la productividad del desarrollador sobre el rendimiento en el tiempo de ejecución, tales como Python, Ruby, Perl, JavaScript, y Groovy (una alternativa a Java).
 
La ingeniero senior de software, Amy Unruh, añade, "para los desarrolladores de hoy es útil entender los problemas de búsqueda en tiempo real, y las técnicas de segmentación y análisis de datos para la gestión de flujos de actividad. Y debe poder explotar el modelo de las piezas mal pegadas, incluyendo el uso de microformatos, y entender cómo utilizar las API de otros servicios y el soporte API correspondiente a su servicio, basándose en los principios de la computación REST".