Foto: Rob Sinclair / CC BY-SA
Buceando por Quora nos encontramos con la siguiente pregunta: como ingeniero de software, ¿cuál es el mejor conjunto de habilidades que hay que tener para los próximos 5-10 años?. Nos encontramos con dos respuestas que nos llamaron especialmente la atención. Una que trata sobre habilidades no técnicas y otra más centrada en tecnología. Las vamos a compartir aquí con vosotros en español y esperamos que sean de vuestro interés.
Habilidades no técnicas
Empecemos por el testimonio de Brian Knapp, que aboga por cuestiones no técnicas.
Solo hay una única "mejor destreza" que tendrás que tener en los próximos 5-10 años y no es técnica en absoluto.
Déjame que te lo explique...
Una vez había un tipo en una fiesta hablando con su amigo, que era un artista excepcional. Le preguntó a su amigo, cuyo arte estaba en una exposición: "¿cómo es que haces obras tan geniales?"
"Pinto todos los días" contestó su amigo.
Pintar todos los días es la mejor destreza que puedes tener como ingeniero de software.
Obviamente no quiero decir pintar físicamente todos los días, sino que necesitas tener momentos de mucha concentración para practicar tus destrezas y aprender algo nuevo todos los días.
Los mejores desarrolladores de software que he conocido están constantemente creando proyectos personales, probando nuevos lenguajes, ideas de diseño, tecnologías. Son máquinas del aprendizaje continuo.
"Pintan" todos los días, metafóricamente hablando. Al igual que hace el artista.
Si tienes la capacidad, el hábito o un sistema para pulir tu oficio y mejorar cada día, los pequeños avances diarios suman en ganancias, experiencia y habilidades.
El sector del software en particular es cambiante y siempre está evolucionando, así que las probabilidades de que necesites aprender un nuevo lenguaje, framework, plataforma o tecnología cada 10 años simplemente para tener oportunidades laborales son muy altas.
Pero decir que un único lenguaje, destreza, framework o plataforma es clave es un mal consejo. Si hoy aprendes temas web y de un día para otro todas las oportunidades están en el campo de la realidad virtual, quizás te quedes fuera por poner todos los huevos en la misma cesta.
Yo no soy de apostar en una tecnología o destreza para ir tirando. Tengo un sistema.
Mi sistema consiste en pintar todos los días para mejorar mi conjunto de habilidades. A veces estoy aprendiendo un nuevo lenguaje, framework o plataforma. A veces es diseño, gestión, liderazgo, marketing u otros temas "oscuros"...
Todo suma para ser más valioso y estar más cotizado el día de mañana.
La mejora y el aprendizaje continuo es la verdadera destreza que hay que dominar. Una tecnología en concreto es simplemente un detalle.
Habilidades tecnológicas
Este es el punto de vista de John L. Miller, que propone una serie de habilidades tecnológicas.
Siempre estoy esperando a que el mundo de la programación experimente una revolución. Llevo 30 años esperándolo. Estoy seguro de que llegará cualquier día de estos. ¡Quizás sea en los próximos 5 o 10 años!
Salvo que eso suceda, esto es en lo que yo creo que los programadores y diseñadores deben empezar a centrarse:
- Lenguajes de alto nivel como Java e incluso el más reciente y grandioso C++, que incluye unas funcionalidades muy chulas. Acostúmbrate a estos lenguajes, ya llevan mucho tiempo rondando, y se van a quedar un buen rato más. Python también es útil. Lo demás son lenguajes muy guays pero aún no sabemos qué alcance tendrán, quizás con la excepción de JavaScript.
- Siéntete cómodo con Big Data. No es para todo el mundo, pero hay mucho dinero ahí, y es muy útil para las empresas, asistentes digitales e interfaces entre ordenadores y humanos. Los agentes inteligentes (software que aprende cuáles son tus preferencias y encuentra cosas por ti) están a la vuelta de la esquina. El Big data (el tratamiento de datos masivos de Internet para entender qué es lo que te gusta, y lo que te puede gustar) será parte de ello. Acostúmbrate a SQL y lenguajes análogos a SQL de tipo distribuido, para búsqueda y transformación de datos.
- Programación en la nube. Familiarízate con el cloud computing. Piensa que es una forma fácil de ser capaz de escalar y "de-escalar" soluciones, dependiendo de la cantidad de datos / clientes que tengas un mes, una semana, o incluso a una hora determinada. Hazte con las riendas de al menos AWS y Azure. Y por supuesto, de las cosas que salgan del equipo en el que estoy en Oracle ;)
- Interfaces táctiles y otras que no sean QWERTY. No necesitas saber cómo se rastrea lo táctil, ni la mecánica de los sistemas de reconocimiento de voz. Simplemente asegúrate de que eres capaz de incorporar estás técnicas (y otras como el lenguaje gestual) en tus aplicaciones.
- Crea para la pantalla universal. Microsoft está intentando unificar su ecosistema de sistemas operativos desde lo más pequeño a lo más grande, y yo pienso que es BRILLANTE. Familiarízate con las tecnologías que abarcan diferentes categorías de dispositivos.
- Mandan los móviles. En el lado del cliente, mandan la movilidad. Hay más teléfonos inteligentes y tabletas en el mercado que PCs y portátiles. Esta tendencia solo irá en aumento. El tiempo que dediques a aprender a crear aplicaciones e interfaces para dispositivos móviles estará bien invertido.
- Tecnologías web. Ya me rindo. La web no va a desaparecer, pero sí que se aproxima la muerte definitiva de Flash. HTML5 y los protocolos web parecen ser una buena inversión de tiempo para aquellos que se puedan beneficiar de ellos.
Fijaos en que no puse nada del estilo "llegar a ser un genio matemático" o "experto en sistemas distribuidos". Hay valor en esas ramas, pero la realidad es que un grupo muy pequeño de personas solucionarán los problemas más complejos en esos campos, y los adaptarán con un bonito arreglo equilibrando potencia y usabilidad.
Ahora es tu turno, ¿qué respuesta te ha gustado más? ¿Qué añadirías?