Las 4 habilidades más importantes para un desarrollador de software
Con la amplia gama de opciones de tecnología, idioma y plataforma disponibles en la actualidad, puede ser muy difícil determinar dónde invertir mejor el tiempo en la capacitación de sus habilidades como desarrollador de software.
A menudo me piden consejos sobre cómo ser un mejor programador.
- ¿Qué empresa ofrece la mejor seguridad de aplicaciones web con un precio mínimo?
- ¿Cuál es el mejor ingreso adicional para el ingeniero de software?
- ¿Por qué debería aprender a querer leer como ingeniero de software?
- ¿Por qué Java está separado en Core Java y Enterprise Java (Java EE)?
- ¿Cómo pueden ganar dinero los autores de marcos de código abierto?
La mayoría de las veces la pregunta que alguien hace se basa en si deberían o no invertir su tiempo en un lenguaje de programación o tecnología en particular frente a otro.
He pensado mucho en esto últimamente y he llegado a lo que creo que son las habilidades más importantes e intemporales que un desarrollador de software puede lograr y que les brindarán las mejores oportunidades profesionales y las harán más efectivas.
Habilidad 1: Resolver problemas
He hablado sobre la necesidad de aprender cómo resolver problemas antes e incluso he dado algunos pasos sobre cómo aprender a resolver problemas, porque creo que esta habilidad es crítica para cualquier desarrollador de software.
El desarrollo de software es 100% sobre la resolución de problemas.
Sin problemas no habría necesidad de software.
Todo el software está diseñado para resolver algún problema del usuario y dentro de esa solución general hay una amplia gama de problemas más pequeños que lo componen.
Realmente no importa qué lenguaje de programación o tecnología use, si no puede resolver los problemas, no será muy bueno en el desarrollo de software.
Es sorprendente lo mal que la mayoría de los desarrolladores están resolviendo problemas.
Constantemente escucho quejas sobre entrevistas de trabajo que son demasiado difíciles porque le piden al desarrollador que resuelva algún problema difícil.
He hablado sobre por qué las entrevistas duras son buenas y parte de la razón es porque prueban la capacidad de un desarrollador para resolver problemas.
Sé que muchos desarrolladores todavía no están de acuerdo conmigo sobre este punto y no entiendo por qué un sitio como TopCoder mejoraría tanto sus habilidades de desarrollo, pero sé por experiencia personal que fue la práctica de resolver problemas en TopCoder lo que fue el cambio. punto en mi carrera
Piensa en un carpintero. Si quieres ser un carpintero exitoso, probablemente deberías ser bueno cortando madera. Probablemente debería haber practicado hacer todo tipo de cortes y usar muchas herramientas diferentes para cortar madera.
No importa cuántos años de experiencia haya tenido en carpintería o qué tan bien pueda diseñar muebles o gabinetes si cada vez que intenta cortar madera tiene dificultades para hacer los cortes.
Cortar madera es una habilidad básica de la carpintería, al igual que la resolución de problemas es la habilidad básica del desarrollo de software.
Habilidad 2: Enseñarte a ti mismo
Probablemente no haya una habilidad más importante en la vida que aprender a aprender.
Esta habilidad es especialmente importante en el desarrollo de software, porque no conozco ningún campo de cambios más rápidamente que el desarrollo de software.
No se puede saber todo sobre todo. Ni siquiera puede invertir el tiempo que se necesita para dominar un marco o tecnología en particular: ¡las cosas se mueven demasiado rápido!
En cambio, necesita la capacidad de adquirir rápidamente el conocimiento que necesita para la tarea en cuestión.
Si realmente desea tener una habilidad que lo impulse a través de su carrera de desarrollo de software, aprenda a aprender por sí mismo.
La única forma de desarrollar esta habilidad es ponerla en uso. Sal y aprende un nuevo lenguaje de programación o tecnología, incluso si crees que nunca lo usarás. Se sorprenderá de lo rápido que puede recogerlo debido a la base que ya tendrá en lo que sabe.
Si puede adaptarse rápidamente al mercado de desarrollo de software que cambia rápidamente y a las tecnologías y plataformas asociadas con él, tendrá habilidades que siempre estarán en demanda.
Aunque soy un poco escéptico de algunas de las afirmaciones de Tim Ferris, él tiene un excelente libro llamado 4-Hour Chef, que tiene excelentes técnicas sobre cómo aprender las cosas rápidamente. (Quería escribir un libro sobre este mismo tema).
Habilidad 3: Nombramiento
Cuando la gente me pregunta qué hago todo el día, en general digo “lee cosas que otras personas nombran y nombran cosas”.
Ok, nadie realmente me pregunta eso y realmente no respondería de esa manera, pero ciertamente podría.
El desarrollo de software se trata de describir lo metafísico. La mayor parte de lo que estamos construyendo no se puede ver.
Tenemos que construir en nuestras mentes un mundo entero con gerentes de autorización que acepten solicitudes de autorización y escupan la respuesta de autorización junto con repositorios de usuarios utilizando fábricas de usuarios para reunir nuevos usuarios.
Cada vez que escribes código estás nombrando cosas. Cuando lee el código que usted u otra persona ha escrito, obtiene la mayor parte de su comprensión sobre ese código a partir de los nombres de las cosas en ese código.
La mayoría de las veces puedo predecir con precisión el nivel de habilidad de un desarrollador mirando cómo han nombrado los métodos, variables y clases en el código que han escrito.
Un desarrollador que carece de la capacidad de dar buenos nombres a conceptos y datos en su código es como un traductor mudo. No importa si puedes entender algo, si no puedes explicarlo adecuadamente, en el momento en que deja tu cabeza, se va.
La mejor manera de mejorar esta habilidad es ponerla siempre en práctica. A menudo renombraré las cosas en el código que estoy leyendo para entenderlo. Cuando empiece a entender lo que está haciendo un método, cambiaré el nombre para que coincida con esa comprensión. Lo haré mientras leo el código, sin hacer cambios lógicos.
Cuanto más te centres en dar buenos nombres a las cosas, mejor te volverás.
Esto también es lo más visible de su código. Es difícil saber si su código es correcto o eficiente al mirarlo, pero si lo leo y puedo entenderlo, voy a asumir que sabe lo que está haciendo.
Habilidad 4: Tratar con personas
Enumero esto como el último, pero en muchos casos se podría decir que es la primera habilidad o la más importante.
Donde quiera que vayas hay gente.
A menos que trabaje solo y desarrolle software solo para usted, otras personas influirán en su carrera como desarrollador de software.
He hablado acerca de por qué es posible que no quieras criticar a alguien antes, pero hay mucho más para tratar con las personas que no molestarlas.
Siempre vuelvo al famoso libro de Dale Carnegie, “Cómo ganar amigos e influir en las personas”, porque este libro es muy importante para aprender a ser un ser humano exitoso.
Lo dije antes, pero si quieres desarrollar las habilidades de las personas, ¡lee este libro!
El problema básico es que los humanos no son criaturas lógicas, somos emocionales. Claro, nos gusta enorgullecernos de nuestra capacidad de razonar, pero la realidad es que la mayoría de las decisiones que tomamos están más influenciadas por la emoción que por la razón.
Lo que esto significa para usted como desarrollador de software es que, a menos que pueda tratar eficazmente con otros desarrolladores, gerentes e incluso clientes, enfrentará problemas constantemente a pesar de lo buenas que sean sus ideas o lo valiosas que sean sus habilidades.
Ser activo e involucrarse en la comunidad de desarrollo de software en general también puede ayudarlo inmensamente en su carrera. No se trata solo de redes, sino de dar a conocer su nombre y construir un buen Karma.
Hacer esto con éxito depende directamente de su capacidad para tratar con las personas. (¿Quiere tomar un gran atajo para aprender a tratar con las personas? Es simple. ¡Sea amable!)
¿Qué pasa con las habilidades prácticas?
¿Observe que no incluí nada en mi lista sobre una tecnología en particular o incluso una habilidad tan amplia como el desarrollo web o el desarrollo móvil?
Ciertamente es importante tener una base sólida en un par de áreas tecnológicas, pero cuáles son esas áreas no es tan importante como las 4 habilidades que menciono anteriormente.
Si puede resolver problemas, aprender cosas rápidamente, nombrar bien las cosas y tratar con la gente, tendrá un nivel de éxito mucho mayor a largo plazo que en la especialización en cualquier tecnología en particular.
Dicho esto, por supuesto, es importante aprender a fondo uno o dos lenguajes de programación y tener un área general de especialización, pero siempre y cuando no te alejes demasiado de lo habitual con esas opciones y te concentres en estos 4 habilidades importantes, estarás bien. (Incluso podrías aprender C ++.