Un poco de surf casual me llevó a este artículo de hace un par de años, titulado “Cómo reconocer a un buen programador”. Fue una buena lectura, pero como muchos de los comentarios señalaron, los criterios que el autor estableció probablemente se describen a sí mismos y no son realmente útiles como reglas generales sobre cómo reconocer a un buen programador.
Sin embargo, me hizo pensar en cuáles son los atributos que considero útiles en otros programadores. Entonces, ¿qué hace un buen programador?
Un pensador analítico
Los programadores deben ser solucionadores de problemas. El proceso de programación requiere que analicemos sistemáticamente los problemas complicados, planifiquemos e implementemos soluciones y busquemos / eliminemos pequeñas inconsistencias en el código (errores).
- ¿Cuáles son algunas cosas que los diseñadores de productos que trabajan con feeds algorítmicos deben saber?
- ¿Qué habilidad requieren para un diseñador de interiores?
- ¿Quién es responsable de un mal diseño web? ¿Es el cliente por no explicar lo que querían a fondo, o el diseñador web al no hacer las preguntas correctas?
- ¿Cuáles son algunas de las principales fallas de diseño en la nueva línea de productos Apple?
- ¿Cuál es la mejor empresa de diseño de camisetas en Singapur?
El pensamiento analítico también se manifiesta en la capacidad de seguir una lógica complicada a través de segmentos de código dispares y comprenderla. Nos permite comprender conceptos abstractos como la metodología orientada a objetos y los patrones de diseño e implementarlos en la práctica.
Tiene sus prioridades claras
Si le pidiera que calificara lo siguiente según la prioridad, ¿cómo los ordenaría?
- Seguridad
- Mantenibilidad
- Usabilidad
- Actuación
- Recuento de LOC (líneas de código)
Tómese un momento para pensar en eso y luego considere:
- Si elegiste el recuento de LOC primero, fallaste a lo grande en mi libro. De hecho, la optimización LOC a menudo puede ir directamente en contra de las otras métricas (como la mantenibilidad). Un recuento de LOC más bajo nunca debería ser un objetivo, solo el resultado de una aplicación cuidadosa de una arquitectura bien factorizada.
- Si eligió el rendimiento primero, probablemente sea el tipo que sigue escribiendo artículos sobre cómo debe usar un ciclo while en lugar de un ciclo for, ya que salió unos milisegundos más rápido en sus puntos de referencia. Es posible que se le inflija un caso de optimización prematura.
Deberíamos olvidarnos de las pequeñas eficiencias, digamos alrededor del 97% del tiempo: la optimización prematura es la raíz de todo mal.
El rendimiento de Donald Knuth solo debe ser lo suficientemente bueno como para satisfacer los requisitos de la aplicación. Además de las advertencias a las trampas conocidas (como la ejecución de consultas en cada iteración de un bucle largo), las optimizaciones de rendimiento se deben diferir hasta el final e incluso se deben usar adecuadamente (perfil … perfil … perfil … optimizar). La excepción a esto es si está desarrollando principalmente aplicaciones dependientes del rendimiento (como controladores de sistema de bajo nivel). - La seguridad está en un terreno intermedio. Dependiendo del modelo de aplicación y distribución, puede ser completamente inútil o de misión crítica. Se encuentra principalmente en algún punto intermedio, y por lo tanto no se puede clasificar como el número uno.
- La mantenibilidad es definitivamente uno de los atributos más importantes de una aplicación de software. La alta capacidad de mantenimiento le permite mejorar otros atributos (como el rendimiento), cuando sea necesario. La capacidad de mantenimiento es el factor más importante para mantener la productividad y los costos bajos. Durante mucho tiempo creí firmemente que este era el atributo más importante del diseño de software.
Sin embargo … - El atributo más importante es la usabilidad . Al final, el valor de su aplicación tiene el mismo valor que ofrece al usuario final. Siempre debemos recordar que el software no está escrito para servir a sus desarrolladores o los sistemas en los que se ejecutan. Están escritos para resolver problemas. Si esos problemas no se resuelven, entonces el proyecto es un fracaso. Escribí usabilidad aquí como un término más general que solo la efectividad UI / UX. Incluso una aplicación de línea de comandos o un servicio en segundo plano tiene su factor de usabilidad en el sentido de qué tan bien responde a una necesidad específica.
Hace las cosas
En principio, es simple. Estás buscando personas que son
1. Inteligente y
2. Haz las cosas.
Joel Spolsky
Posiblemente el rasgo más importante de un desarrollador. Puede sobresalir en todos los atributos anteriores y seguir siendo un programador mediocre si simplemente no puede hacer las cosas . Un desarrollador promedio pero productivo podría reemplazar fácilmente a varios desarrolladores altamente talentosos pero que se mueven lentamente, dependiendo de sus responsabilidades.
Al final del día, definitivamente quieres desarrolladores más productivos que aquellos que tienen una alta teoría pero no un trabajo real.
Hace más que “lo suficiente”
Hacer las cosas es importante. Hacer las cosas “de la manera correcta” es aún más importante.
Pagar constantemente su deuda técnica es crucial: si sigue acumulando deuda “pirateando” soluciones rápidas que funcionan ahora pero no son mantenibles, solo crea la apariencia de progreso. En realidad, el costo de deshacerse de una gran deuda técnica podría volverse prohibitivo antes de que se dé cuenta.
Tomarse el tiempo para refactorizar constantemente el código en un estado más fácil de mantener es la mejor manera de evitar que la espiral se pierda en el proyecto.
Responsable
Una persona podría ser un programador muy capaz solo en habilidades técnicas, sin embargo, si no es responsable de sus errores y no respeta los plazos, podría convertirse en una responsabilidad muy rápidamente.
Responsabilidad también significa saber dónde dejar ir tu ego por el bien del proyecto. Desarrollamos a menudo grandes egos grandes, ya que nos consideramos expertos en muchas cosas. Poner el proyecto primero es una señal de un buen desarrollador.
Buenas relaciones humanas
Otro rasgo útil general, este también se aplica a los programadores. Existe algún estereotipo de que los programadores son criaturas solitarias e insociables; los programadores siguen siendo personas;).
Para ser parte de un equipo o manejar clientes, un programador debe tener habilidades sociales básicas. La grosería, la arrogancia, el mal genio, no tienen lugar en un ambiente de trabajo profesional. Todo lo que se necesita es una manzana podrida para arruinar el estado de ánimo de todos.
Eso es todo
Si responde a todas las preguntas anteriores, probablemente sea un programador bastante bueno (y puede solicitarlo con nosotros :)).
Si lees el artículo que mencioné al principio, podrías notar que no mencioné la pasión o la diversidad tecnológica como rasgos calificativos. En pocas palabras, no creo que sean muy relevantes para la calidad de un programador.
Es agradable tener pasión, sin embargo, he conocido a muchos desarrolladores muy profesionales y de alta calidad que estaban contentos de realizar su trabajo profesionalmente de 9 a 5 y luego irse a casa y tener una vida familiar significativa y satisfactoria. Un programador definitivamente puede ser completamente profesional sin ser un apasionado de la programación.
La diversidad tecnológica es otra buena opción, pero no es un requisito previo: siempre que esté al mando de las tecnologías con las que trabaja, la falta de diversidad no debería afectarlo demasiado. Los tomadores de decisiones deben conocer todas las opciones antes de comenzar un proyecto, sin embargo, hoy en día la elección de la tecnología simplemente no es tan importante.
Puede lograr buenos resultados independientemente del lenguaje de programación y el motor de la base de datos, entre otras consideraciones. La mayor consideración debe ser el tipo de habilidades disponibles para su personal.
Espero ver más sugerencias y pensamientos en los comentarios sobre lo que crees que es un buen programador.