Hemos leído: John Lakos: Large-Scale C++ Software Design

clip_image002

Bueno, realmente no lo hemos leído del todo, ya que nos quedan cien de las ochocientas páginas que componen este mamotreto, pero que si no pasa nada caerán esta noche de forma rápida, ya que son varios apéndices.

¿Por dónde empezar? Uf. Es un libro difícil de leer, no por la prosa, sino por el contenido, altamente –muy altamente- técnico. El autor parte de que ya sabes C++, pero no el C++ que puedas aprender en la escuela, sino C++ de verdad. No se entretiene en explicarte esto o aquello, sino que parte a saco, suponiendo que eres un programador profesional.

Como el título indica, el libro está destinado a los desarrolladores de grandes proyectos en C++, aunque ciertamente si eres uno que trabaja en solitario o con poco acompañamiento como yo el libro también te va a servir, y no poco, aunque haya partes que en principio no estén dedicadas a ti, pero siempre se pueden sacar buenas ideas y conceptos.

John comienza con el hecho de que la mayoría de libros sobre diseño de C++ se centran en la parte lógica en lugar de la física, es decir, mucha clase, mucho encapsulamiento, mucha jerarquía de objetos, pero sin tener en cuenta el coste de compilación que supone usar tales abstracciones en un lenguaje como C++. Y nos da ejemplos prácticos y nos muestra cómo un cambio trivial en una línea de un fichero puede suponer la compilación completa de un sistema que puede tardar horas o incluso días.

Después de estudiar métricas sobre el tema, el nivel de acoplamiento entre componentes, etc., comienza lo bueno: técnicas, sesudamente razonadas, para mejorar el diseño, no lógico, sino físico, de forma que los tiempos de compilación y la estabilidad de los interfaces públicos mejoren en gran medida.

Algunos conceptos son triviales y reducen drásticamente el tiempo de compilación, otros son más complejos y requieren una refactorización completa (o casi) del diseño. Lo bueno del libro es que siempre, siempre, vamos guiados por razonamientos formales y por ejemplos completamente válidos, de modo que la conclusión es obvia: el autor tiene toda la razón.

El núcleo del libro son los capítulos 5, 6 y 7, en los que nos habla de los tres niveles a considerar: el de los componentes (entendidos como una unidad física), el de los paquetes y el de los grupos de paquetes. Ciertamente en los tres capítulos se repiten casi las mismas las técnicas aplicadas a cada nivel, pero vienen destinadas a diferentes roles dentro de un teórico grupo de desarrollo. De hecho, he estado prácticamente como un mes y medio dedicado a leer, anotar y releer parte de estos capítulos, aunque el 7 se me quede un poco grande.

La tercera parte del libro trata sobre conceptos lógicos, y es más un compendio de reglas sueltas relativamente razonadas que un todo coherente. No obstante, resulta un buen complemento a lo anterior. Por ejemplo, nos explica la mejor forma de sobrecargar los operadores y por qué otras sobrecargas son generalmente incorrectas aunque formalmente válidas, el uso de tipos y de parámetros, por qué no sobrecargar el operador new de forma global y un largo etcétera.

Se nota que el libro es algo viejo. Nos habla de los espacios de nombres como novedad, y de las plantillas como algo ineficaz y peligroso y que de momento los compiladores no saben tratar adecuadamente, pero sin embargo, nos da razonadas ideas sobre su uso.

Aunque no es un libro para tener sobre la mesa de trabajo, sí que puede resultar útil su lectura periódica y su consulta cuando nuestro proyecto se vuelva un poco inmanejable. Además, al final de cada capítulo y del propio libro, viene un interesante resumen de todos los temas tratados en cada uno de ellos.

En fin, que se trata de un libro muy recomendable para aquellos profesionales de C++ o amateurs que quieran serlo.

Un comentario sobre “Hemos leído: John Lakos: Large-Scale C++ Software Design”

  1. O como pasar de muchas horas de compilación a media… qué tiempos 🙂

    Hace 5-6 años era un libro de «las biblias de C++», junto a los Effective C++, Exceptional C++, alguno de STL… estoy convencido de que siguen siéndolo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *