Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Cuida tu obra de arte. ¿Por qué desperdiciar tu vida desarrollando software sino te
preocupas en hacerlo bien?
No vivas con ventanas rotas. Corrige malos diseños, decisiones equivocadas y el código
mal escrito cuando lo veas.
Sé un catalizador para cambios. No puedes forzar que la gente cambie. En vez de eso,
muestra cómo podría ser el futuro y ayúdalos a participar en tu creación.
Recuerda el “Gran Cuadro”. No te obsesiones con los detalles porque hacen olvidarte de
lo que ocurre alrededor.
Analiza de forma crítica lo que lees y escuchas. No te dejes convencer por vendedores,
dogma o medios. Analiza la información en tus términos y en basada en tu proyecto.
Importa tanto lo que dices como la forma de decirlo. No tiene sentido tener buenas ideas
sino las transmitimos con eficacia.
Elimina los efectos entre cosas no relacionadas. Los componentes de un diseño son
autónomos, independientes y tienen un único propósito bien definido.
No hay decisiones finales. Las decisiones no se deben grabar en una piedra, sino en la
arena de la playa. Cualquier decisión debe ser susceptible a cambio.
Tracea para llegar a to objetivo. Haz distintas pruebas y tracea los resultados para ver
cómo se van compenetrando para llegar a nuestro objetivo.
Usa prototipos para aprender. Crear prototipos es un experiencia para el aprendizaje. Su
valor no reside en el código generado, sino en las lecciones que aprendes al crearlo.
Programa cerca del dominio.. Diseña y programa usando el mismo lenguaje usado por el
usuario.
Haz estimaciones para evitar sorpresas. Haz una estimación antes de empezar. Podrás
adelantarte a los posibles problemas futuros.
Sincroniza tu agenda con el código. Usa la experiencia que vayas ganando para refinar las
escalas temporales de entrega del proyecto.
Guarda tu conocimiento en texto plano. El texto plano nunca será obsoleto. Ayuda a
aprovechar tu trabajo y simplifica la depuración así como las pruebas.
Usa el poder de la línea (Shell) de comandos. Usa la línea de comandos (Shell) para
resultados seguros que no sean interferidos por las interfaces gráficas.
Utiliza un único buen editor. El editor debe de ser una extensión de tu mano. Asegúrate
que es configurable, ampliable (plugins) y programable.
Siempre controla el código fuente. El control del código fuente es una máquina del
tiempo, siempre puedes volver atrás.
No asumes nada, pruébalo. Prueba tu hipótesis en el entorno actual que tengas, con datos
reales y condiciones límites.
Aprende un lenguaje para manipular texto. Gastas una gran parte del día peleando con
texto. ¿Por qué no hacer que el ordenador haga el trabajo por ti?
Escribe código que escriba código. Los generadores de código aumentan la productividad
y evitan la duplicación.
Error tempranero. Un error cuanto antes sea detectado mejor, hará menos daño que aquel
que se detecte tarde, hará que creemos que la aplicación funciona.
Usa excepciones para los problemas excepcionales. El abuso del uso de excepciones
pueden convertir tu aplicación en poco legible y sotenible. Usa las excepciones para casos
excepcionales.
Acaba lo que empiezas. Siempre que sea posible, la rutina o el objeto asignado a un
recurso debe de ser borrado cuando ya no sea necesario.
Configura, no integres. Implementa las opciones para una tecnología usando opciones de
configuración, no a través de integración ó ingeniería.
Separa las vistas desde los modelos. Gana flexibilidad a bajo coste diseñando tu
aplicación en términos de modelos y vistas.
Usa pizarras para coordinar el flujo de trabajo. Usa las pizarras para coordinar agentes
y hechos dispares, manteniendo la independencia y el aislamiento entre los participantes.
No programes por coincidencia. Confíe sólo en las cosas confiables. Ten cuidado con la
complejidad accidental, y no confundas una feliz coincidencia con un plan organizado.
Haz una estimación del orden de tus algoritmos. Ten una idea de la longitud de las cosas
antes de empezar a escribir código.
Prueba tus estimaciones. El análisis matemático no te lo dice todo. Prueba el tiempo
consumido por tu código en su entorno final.
Refactoriza pronto, refactoriza a menudo. Así como quitas las malas hierbas de un jardín
y lo reorganizas, reescribe, haz de nuevo y rediseña el código cuando sea necesario. Arregla
la raíz del problema.
Diseño a prueba. Empieza a pensar en las pruebas antes de escribir una línea de código.
Prueba tu software, o lo harán tus usuarios. Prueba sin piedad. No hagas que los
usuarios encuentren los errores por ti.
No reunas requisistos, búscalos. Los requisitos rara vez están en la superficie. Están
enterrados bajo capas de supuestos, conceptos erróneos y política.
Trabaja como un usuario para pensar como un usuario. Esta es la mejor forma de
conocer cómo funciona el sistema que utilizarán realmente.
Usa un glosario del proyecto. Crea y mantén una única fuente de todos los términos y
vocabulario específico de un proyecto.
Empieza cuando estés listo. Has ido adquiriendo experiencia toda tu vida. No ignores las
dudas que te puedan surgir.
Algunas cosas son mejores cuando las acabas que cuando se describen. No caigas en la
espiral de las especificaciones, en algún momento tenemos que empezar a programar.
No seas un esclavo de los métodos formales. No adoptes ciegamente cualquier técnica sin
suponerla en el contexto de tus prácticas de desarrollo y capacidades.
Las herramientas costosas no producen mejores diseños. Ten cuidado con las
exageraciones de los proveedores, el dogma de la industria, y el precio. Juzga las
herramientas en función a sus méritos.
Organiza los equipos alrededor de la funcionalidad. No separes diseñadores de
programadores ni los probadores (testers) de los modeladores de datos. Construye equipos
en función de tu manera de construir código.
No uses el procedimientos de manual. Un Shell script o fichero por lotes se ejecutará las
mismas instrucciones, en el mismo orden, una y otra vez.
Prueba pronto. Prueba a menudo. Prueba de forma automática. Las pruebas que se
ejecutan cada vez que compilas son más efectivas que los planes de pruebas teóricos.
La programación no está terminada hasta que todos los tests hayan pasado. Queda
todo dicho.
Usa saboteadores para probar tu prueba. Introducir “bugs” a propósito en una copia
separada de la fuente para verificar que las pruebas detectan dicho error.
Encuentra errores una sola vez. Una vez que los probadores (humanos) encuentran un
error, esta debe de ser la última vez que se encuentra. A partir de ahora tienen que ser las
pruebas automáticas las que comprueben los errores.
De forma gradual, aumenta las expectativas de los usuarios. Cuando comprendas las
expectativas de los usuarios, entonces es el momento de ofrecer un poco más.
Update: Welcome, Javalobby readers! You might be interested in the followup to this post.
Thanks for the great feedback and suggestions.
by Kent Beck and Cynthia Andres When I first read XP: Explained, so many of the concepts
made me nod my head in agreement and wonder how typical software development goes
against so many of its principles. XP and agile isn't rocket science or a silver bullet, its just
good common sense. "Take small steps, one at a time. Communication is vital. Feedback is
important. Change is constant, so work with it instead of fighting it." It sounds like advice
your mom or grandpa gave you when you were eight years old, so why does it take a
"revolution" or a "movement" to put these things into practice for software development?
That might be a topic for another essay, so for now just get this book. Its essential for
understanding the ideas behind XP and agility. Note that the second edition is quite
different from the first - it has a broader, less technical apporach. They are both worth
reading, the first moreso for programmers and the second for customers and managers.
Note what isn't on the list: any of the Java 5 reference books or any of the tens (hundreds?)
of J2EE books. Its important to keep up with the language and the platform, but I think
thats better done through programming with the JDK and examples as reference. The
reference books can be helpful for getting up to speed for day to day work, but I don't think
they are essential for furthering your knowledge or your craft. Long after your J2EE
1.4.x.niner book is collecting dust on the shelf, Effective Java will still be a reference you
consult regularly.