Reflexión del 16 de marzo de 2021
16 de marzo 2021Hoy he terminado A Philosophy of Software Design de John Ousterhout. Me ha gustado. Como siempre, hay ciertos puntos con los que no comulgo del todo. Recuerdo que un chico me dijo “es interesante hablar contigo pero me irrita un poco que nunca terminas de estar de acuerdo con nadie”. En esta ocasión no me queda otra que ser humilde, seguro que hay mil cosas que se me escapan.
No voy a hacer una crítica exhaustiva del libro, otra gente ya lo hace muy bien. Sin embargo, me gustaría resaltar este extracto de los primeros párrafos:
(…) the core problem of software design is still largely untouched. David Parnas’ classic paper “On the Criteria to be used in Decomposing Systems into Modules” appeared in 1971, but the state of the art in software design has not progressed much beyond that paper in the ensuing 45 years.
The most fundamental problem in computer science is *problem decomposition: how to take a complex problem and divide it up into pieces that can be solved independently. Problem decomposition is the central design task that programmers face every day, and yet, other than the work described here, I have not been able to identify a single class in any university where problem decomposition is the central topic. We teach
for
loops and object-oriented programming, but not software design.*
Esto último no me parece solo propio del diseño de software, sino de todas las ingenierías. Creo que es a lo que se refiere la gente cuando habla de pensar como un ingeniero, aunque puede que sea más central en el diseño de software. La verdad es que no trabajé mucho como ingeniera química pero lo que me llega de mis ex-compañeros de carrera es que no tienen que construir cosas desde cero o pensar en diseños creativos, que creo que son las labores donde la descomposición de un problema es más paradigmática.
Lanzando una reflexión obvia al aire, me parece tremendo el beneficio de leer este tipo de libros. Clean Code está genial, pero a la hora de la verdad muchas decisiones de diseño son complejas, necesitas tener un poso de posibles soluciones en tu cabeza (no necesariamente para aplicarlas directamente) pero o tienes mucha experiencia programando o “haces trampa y lo aprendes en libros”. Yo he empezado tarde a programar así que me dedico a hacer muchas trampas, y aún así soy muy consciente de que este conocimiento de segunda mano no sustituye al haberse pegado con algo. El majo del autor ha creado un grupo de Google para poder comentar y he visto que responde siempre, aunque tristemente no hay mucha actividad.
Es mi primera publicación en tres meses. Como veis mi intención de escribir más este año va genial. Igual lo siguiente que escribo es una serie de posts sobre MLOps, que es de lo que más estoy leyendo últimamente. Igual no.