¿Eres un desarrollador con principios?
Es curioso como existen algunos principios que son de aplicación en todas las facetas del desarrollo de software, desde la escritura de código, pasando por el diseño y el diseño arquitectónico, hasta la gestión de proyectos.
No son patrones, sino algo mucho más etereo y que no tiene una instanciación directa como estos, aunque, en cierto modo estos principios de los que hablo son los que, para mí, diferencian a un buen desarrollador. En esencia estos pincipios son la base de la 'cultura' del desarollo de software, son sus memes. En mi opinión los desarrolladores experimentados tenemos la obligación de preservar y transmitir estos gnes de información.
Son princpios universalmente aceptados, pero no universalmente conocidos. Pequeñas perlas de conocimiento y experiencia que debemos transmitir como medio para mejorar el nivel de conocimientos en nuestra profesión. Agunos son universales, se aplican en todas las facetas del desarrollo de software, como por ejemplo
KIIS (Keep It Simple Stupid), principio que mantiene la conveniencia de buscar las solución más simple posible a un problema.
DRY (Don´t Repeat Yourself), principio que sostiene lo dañino de las repeticiones.
SoC (Separation of Corcerns), principio que propugna la conveniencia de asociar responsabilidades claras a las partes que componen un sistema.
Orthogonality, principio que defiende la conveniencia de que los diferentes componentes de un sistema puedan variar sus comportamientos sin afectar al resto de componentes.
Otros son más especificos del dominio concreto, por ejemplo, relativos a la gestión de proyectos:
Involucra al cliente
Gestiona tus riesgos
Haz de la integración un habito
Libera pronto software
Haz de la calidad un preocupación continua
Evita la optimización prematura
etc...
Los desarrolladores de Microsoft Solution Framework se han dado cuenta de la importancia de los principios y tanto MSF for CMMI como MSF Agile, contienen una lista de los principios en los que están fundadas estas metodologías.
Lo que tienen en común todos estos diferentes tipos de principios es que sirven para transmitir conocimiento de una manera rápida y concisa. Son un arma que yo utilizo de la siguiente manera, que alguien se esta complicando la vida al hacer una arquitectura, le suelto: "Te estas saltando el principio KISS", si sabe de que va el principio perfecto, ya sabe lo que estas diciendo, sino, le remites a la Wikipedia y en 20 minutos sabe lo que tratas de decirle en un sentido más amplio que si se lo explicas detalladamente. Además si quiere profundizar hay miles de artículos y libros que justifican el contenido de este principio.
Estos principios, tambien sirven para facilitarnos la toma de deciones en nuestro trabajo como desarrolladores de manera rápida, directa y basandonos en fundamentos ferreos, pero sin tener que tomarnos excesivo tiempo en analizar la situación. Básicamente, si tienes dos opciones y una viola alguno de tus principios, tomar la decisión adecuada, es inmediato.
Pero claro, si eres un desarrollador nobel y en el proyecto en el que estas nadie se preocupa de transmitirte estos principios, la pregunta imediata es ¿Por donde puedo comenzar para construir mi lista de principios?. Pues bien, un buen inicio es 'The pragmatic programmer' de Andrew Hunt y David Thomas, un libro que hace una recopilación y una explicación de los principios adoptados por estos dos experimentadisimos programadores. Puedes ver una lista de estos principios. Existen alguan otras listas de principios universalmente conocidas y aceptadas, al menos en algunos ambitos, como por ejemplo 'El Manifiesto Ágil'. Otra lista de principios recomedable es Los 10 mandamientos del programador ágil. Y existen muchas más...