¿Cuáles son las 3 mejores habilidades blandas que hacen un buen programador de software?

Las líneas parecen desdibujarse cada vez que trato de definir qué diferencia exactamente las habilidades difíciles de las blandas, pero si no estamos mirando de cerca, nominaré estas:

1. Un fuerte dominio del idioma nativo
Creo que esto refleja una tendencia a inventar muchas formas diferentes de expresar un significado único y seleccionar el más elegante, efectivo o eficiente. Es una habilidad valiosa para poetas, autores y programadores.

2. Capacidad para explicar cosas a personas con diferentes mentalidades.
Quienes leen documentación / comentarios para comprender una solución nunca aprecian por qué funciona como quienes la desarrollaron. Levantar la mente de los pozos de detalles alucinantes para describir útilmente el panorama general es un salto de imaginación que es útil para los maestros, oradores públicos y programadores.

3. Capacidad para leer las intenciones de las personas.
Si quienes encargan un sistema de software pudieran especificar su funcionamiento de manera completa e inequívoca, también podrían programarlo ellos mismos. Descubrir exactamente qué los hará felices requiere cierta cantidad de conjeturas educadas utilizando lo que pueden decirle como pistas, esta es una habilidad útil para gerentes, vendedores y programadores. Y psíquicos.

No me atrevería a sugerir que todo esto es crítico para cada programador (es un campo diverso, eh), pero diría absolutamente que son muy útiles, ciertamente desearía ser mejor en ellos.

Creo que una de las cosas más importantes es el conocimiento de que la codificación y la programación no son lo mismo. MUCHAS personas quieren codificar, pero pocas personas quieren pasar 6 meses aprendiendo los conceptos básicos de la programación antes de escribir una línea de código.

En cuanto a pensar fuera de la caja, si ves una caja, la programación no es para ti. Nunca pensé fuera de la caja porque no hay ninguna caja para mí. “No se puede hacer” era solo “eso lo hará más difícil”. Por supuesto, se puede hacer, siempre que haya hardware que pueda hacerlo, y se pueda controlar mediante software. La única “caja” era donde entraban los suministros.

¿Pensamiento analítico? No, vida analítica. Veo el mundo como cosas para analizar. Programación, compra de alimentos, elegir qué ver en la televisión, todo. Analizo mi mundo constantemente.

La comunicación efectiva con otros es importante, pero eso se aprende fácilmente. No ver cuadros y ser analítico no lo son. Algunas personas simplemente NO PUEDEN ponerse al día con la programación. Y algunas personas no pueden dibujar una línea recta. Envidio a los niños de 10 años que pueden tomar un lápiz, un trozo de papel y producir lo que parece una fotografía monocroma en 10 minutos. Pero si pudiera hacer eso, probablemente no podría descubrir cómo encajar 18k de código en 16k. O compare 2 valores (sin destruir ninguno) si no hay instrucciones de comparación, sin pensarlo mucho.

1. Respetar las opiniones de todos los demás interesados, incluidos los desarrolladores
Entonces aprendes y te adaptas en el equipo. Todos tienen una opinión, pero eso es válido solo si entiendes a los demás.
2. Sepa cuándo continuar si no se puede llegar a un consenso en el equipo.
3. Comprender que el perfeccionismo no es programático.