Sunday, January 15, 2012

Pragmatic Programmer

from journeyman to master
De Andrew Hunt y David Thomas. 1999. Publicado por Addison-Wesley Professional. 352 páginas

Me habían recomendado mucho este libro y justamente era la propuesta del Club de Lectura de Agile Barcelona, así que lo inicié con muchas ganas. No en vano es una de las primeras influencias del movimiento de Software Craftmanship.

A lo largo de 7 capítulos, los autores presentan 70 consejos (tips)  para el desarrollo de software.

Los dos primeros capítulos son fantásticos, propios de esos libros de informática que sabes que no caducan. Pero a partir del tercer capítulo la sensación ha sido "lo he leído diez años tarde".
Sin desmerecer el contenido, que es estupendo, gran parte de las ideas que se presentan ya las tenemos más que asumidas: pruebas unitarias, control de versiones, uso de texto plano, etc.

El consejo que más me ha gustado ha sido el 4, "No vivir con ventanas rotas": reparar los pequeños fallos que van quedando en el código para evitar que otros desarrolladores piensen "puedo hacer esta chapuza, ya que he visto esa otra por ahí".

Los cuentos de la sopa de piedras (ser un catalizador del cambio) y de hervir ranas (nadie se da cuenta de los cambios si vienen poco a poco), también son inspiradores, así como el consejo de good enough software (saber cuándo parar), como un pintor que sabe cuándo dejar de poner pintura.

Los dos primeros capítulos también incluyen como consejo 11 el clásico DRY, Don't repeat yourself, una definición de ortogonalidad, y el consejo de utilizar balas trazadoras (tracing bullets) para tener feedback rápido del cliente. Comentándolo con @jaumejornet, @eidrien y @albertcumplido en el club de lectura, no todos entendimos lo mismo por "balas trazadoras". Los autores presentan la idea en contraposición con la idea de "prototipo": un desarrollo exploratorio construido para posteriormente ser desechado. En ese caso yo entiendo una bala trazadora como el resultado de una iteración en metodologías ágiles. Sin más misterios.

El capítulo tres hace una defensa del uso de ficheros de texto plano y de la línea de comandos. Me recordó mucho la lectura de En el principio fue la línea de comandos (también en inglés) de Neal Stephenson, aunque en otro contexto.

En este capítulo también habla de control de versiones, dominar un editor de texto y "rubber ducking": cuando estás tratando de resolver un bug y estás atascado, comentar tus progresos en voz alta (a un patito de goma). A veces, sólo con tratar de explicarlo te das cuenta de algo que no habías tenido en cuenta. En una empresa en la que trabajé a esto le llamábamos "efecto Furby".

En los capítulos 4, 5 y 6 habla de aserciones, diseño por contrato, la Ley de Demeter, diseñar siempre para concurrencia, diseñar para las pruebas y programar por coincidencia. Esto último es el clásico "si funciona, no lo toques".
En estos capítulos también le dedica una sección a hablar del coste de los algoritmos, con aquello del O(n log(n)), aunque me ha parecido un poco fuera de lugar.

Cuando habla de refactoring propone utilizar la metáfora de la jardinería en lugar de la metáfora de la arquitectura a la hora de hablar del desarrollo de software. Muy interesante.

En el capítulo 7 se ríe de la expresión "recogida de requerimientos" y sugiere que se trata más de "excavar a por los requerimientos". También sugiere separar los requerimientos de las políticas de negocio, porque estas últimas pueden cambiar. Y en el consejo 57 dice que algunas cosas es mejor hacerlas que describirlas (por ejemplo "describe cómo hacerte el nudo de los zapatos").

En el capítulo 8 trata de resumir todo lo descrito en los capítulos anteriores poniéndolo en contexto.

He encontrado que es un libro muy interesante y recomendable, pero tenía las expectativas demasiado altas.

No comments: