Traducido del artículo original publicado en phpkitchen.com
Gracias a Braidy Tester a través John Lim por esta gran lista que define a un buen programador.
Planifica antes de codificar
Un gran desarrollador se toma el tiempo necesario para planear una aproximación antes de diseñar o codificar. Un gran desarrollador sabe que el tiempo requerido será mayor para hacer esto, pero que lo recuperará al hacerlo bien la primera vez. Un gran desarrollador planea todos los niveles de desarrollo, desde prever varias versions de un producto a escribir o modificar un pequeño método.
Siempre sabe por qué
Un gran desarrollador siempre sabe exactamente por qué se escribió una línea concreta de código, y por qué se hizo como se hizo. Un gran desarrollador escribe código porque ese es el mejor código para esa situación particular, no sólo porque es la implementación canónica. Un gran desarrollador codifica conscientemente.
Escribe el código adecuado en cada situación
Cualquier desarrollador puede escribir código. Un buen desarrollador escribe código sólido. Un desarrollador muy bueno escribe código elegante. Un gran desarrollador escribe código que es tanto sólido (compacto, bien construido) como elegante (preciso, simple, pulido). Más importante aún, un buen desarrollador puede decir cuando la elegancia no vale el esfuerzo que hay que realizar.
Se desvía donde y cuando es necesario
Un buen desarrollador no sólo conoce la implementación ortodoxa sino que entiende que es la implementación ortodoxa. Un gran desarrollador decir cuando la implementación ortodoxa no es la más adecuada como respuesta a un problema particular.
Sabe cuando no cambiar código
Un gran desarrollador sabe que cambiar código es algunas veces peor que arreglarlo. Arreglar un error puede provocar más inestabilidad en cualquier otra parte del producto, por ejemplo. Un código confuso cuya función no se comprende bien no debería ser reescrito hasta que no se haya tomado el suficiente tiempo para tener la seguridad de que su función se comprende bien. Un buen desarrollador sabe lo que implica dejar el código como está o cambiarlo.
Las tareas de depuración se realizan de forma científica
Un buen desarrollador sabe que depurar no es un arte sino una ciencia y lo realiza como tal. Un buen desarrollador formula una teoría como la causa de un problema, elabora un método para probar la teoría, realiza el experimento, y observa el resultado. Un buen desarrollador registra esta información y utiliza esto como guía para futuros trabajos.
Pasa por su código
Un buen desarrollador sabe que realmente conoce su código hasta que no lo ha pasado. Un buen desarrollador establece puntos de ruptura en cada línea de código como escribe de forma que sabe que líneas no han sido afectadas.
Reconoce el lenguaje y la plataforma de forma inmediata
Un gran desarrollador sabe el lenguaje de programación (y la plataforma) en el uso por dentro y por fuera. Un gran desarrollador sabe por qué cada construcción (API) se incluyó en el lenguaje (la plataforma) y por qué otras construcciones (APIs) se dejaron fuera. Un buen desarrollador está en desacuerdo con ciertos aspectos del lenguaje (la plataforma) pero entiende por qué aquellos aspectos funcionan de la forma en que lo hacen. Un gran desarrollador sabe lo que el lenguaje (la plataforma) puede hacer, lo que no puede, y cómo lograr el mismo efecto por otros medios.
Comprueba las herramientas
Un buen desarrollador sabe lo que son las herramientas disponibles y cómo utilizar cada una de ellas. Un buen desarrollador sabe que una herramienta no puede ser apropiada para una tarea concreta. Un buen desarrollador sabe cómo aprovechar las herramientas para resolver problemas muy duros o imposibles a través de métodos apropiados.
Mejora las herramientas
Un buen desarrollador sabe que sus herramientas siempre pueden ser mejoradas. Un buen desarrollador prefiere obtener estas mejoras de donde sea de forma que pueda concentrarse en resolver el problema del cliente. Un buen desarrollador reconoce cuando es simplemente más rápido o más eficiente escribir una herramienta por si mismo. Un buen desarrollador constantemente busca recursos para aumentar su productividad.
Sabe cuando solicitar ayuda
Un buen desarrollador disfruta con un reto. Un buen desarrollador, por lo tanto, disfruta enfrentándose contra de una pared del ladrillo y abrirse un hueco lentamente a través de ella. Algunas paredes son más gruesas que otras, sin embargo, y algunas veces la pared tiene un hueco que el desarrollador continuamente acaba perdiendo. Un gran desarrollador se da cuenta cuando debe pedir ayuda y hace eso. Un gran desarrollador sabe a quien pedir ayuda. Un gran desarrollador siente tiene vergüenza a la hora de solicitar ayuda.
Siempre tiene un proyecto paralelo
Un buen desarrollador nunca está completamente satisfecho con el proyecto actual. Un gran desarrollador siempre está trabajando sobre un (probablemente muchos) un proyecto paralelo para investigar una idea, comprender un lenguaje o las características de una librería, procesos automatizados, o cualquier otra cosa ya que con el proyecto principal no le satisface.
No hace suposiciones
Un gran desarrollador realmente hace suposiciones, pero un gran desarrollador no se para ahí. Un gran desarrollador inspecciona la suposición, después esa investigación la convierte en conocimiento. Un gran desarrollador no hace esto por sus propias suposiciones sino que también lo hace por las suposiciones de otras personas.
La documentación
Un gran desarrollador documenta todo. Un gran desarrollador sabe que la documentación necesita satisfacer sólo dos metas: educar la audiencia actual, y tener el suficiente conocimiento como para prever que la audiencia actual puede aumentar la documentación lo necesario para una audiencia futura.
Sigue los estándares de codificación
Un gran desarrollador tiene asumidos y usa continuamente un conjunto de normas estándar de codificación. Un gran desarrollador puede no ser capaz de recitar los estándares palabra por palabra, pero cuando se le pregunta sobre un punto concreto inmediatamente da la respuesta adecuada. Un gran desarrollador escribe un código conforme sin la ayuda de herramientas de verificación, pero siempre utiliza esas herramientas con apoyo.
Usa controles de versión
Un gran desarrollador sabe que el control de versiones es importante tanto para proyectos personales como para proyectos empresariales. Un gran desarrollador controla todo con el control de versiones.
Realiza muchas chequeos puntuales
Un gran desarrollador sabe qué control de versión es más útil cuando se modifica código por pequeñas comprobaciones que implican un cambio solo lógico. Un gran desarrollador se afana por comprobar cada cambio con independencia de cualquier otro cambio.
Comprueba su propio código
Un gran desarrollador se avergüenza cuando alguien encuentra un fallo en su código. Un gran desarrollador realiza un chequeo a fondo antes de dar por válido su código. Un gran desarrollador no pretende ser un gran tester pero se afana por ser considerado un buen tester.
Cuidad a su cliente
Un gran desarrollador comprende lo que el cliente necesita hacer y cómo desea utilizar el producto. Un gran desarrollador va más allá de las necesidades del cliente para ver la forma en que el producto puede revolucionar sus tareas. Un gran desarrollador defiende el punto de vista del cliente a lo largo del ciclo del producto, desde la aparición de la primera visión del producto, especificando e implementando funcionalidades hasta recortar características y depurando fallos para alcanzar una versión estable. Un gran desarrollador ayuda al resto del equipo de desarrollo a comprender al cliente tan bien como él.
Tiene gran juicio
Un gran desarrollador comprende el caso del asunto para el que está escribiendo el código. Un gran desarrollador usa esto como base para juzgar qué código escribir y cual no. Un gran desarrollador utiliza esto para equilibrar el diseño par el futuro frente a la necesidad de tener algo hecho de forma adecuada.
No tiene ego
Un gran desarrollador valora el precio de su cliente sobre el precio de sus colegas. Un grna desarrollador quiere hacer lo correcto pero no se preocupa mucho sobre el hecho de que está siendo correcto. Un gran desarrollador expone su opinión razonada en las discusiones de diseño y codificación pero escucha atentamente cuando se ofrecn alternativas, buscando fuera y examinando los detalles de esas otras opciones. Un gran desarrollador aprecia las sugerencias orientadas a mejorar su código o su diseño. Un gran desarrollador sabe que cometerá errores y aprecia el hecho de que le sean reportados. Un gran desarrollador sigue un proceso porque el proceso le protege de él mismo.
Emplea tiempo para aprender
Un gran desarrollador sabe que la única forma de ser un gran desarrollador es para de aprender. Un gran desarrollador no limita su educación a temas que están ligados a la programación, sino también a investigaciones de testeo, gestión de programas, marketing, y cualquier cosa que está remotamente relacionada con el proceso de la creación de software.