17 de agosto de 2012
Stroustrup me ha convencido
Hace unos meses me compré "The C++ Programming Language" y he estado empollándome el pedazo de tocho en mis pocos ratos libres. Yo creo que Stroustrup compite con Donald Knuth por el cetro del cabezón más sesudo de la informática mundial. Son acojonantes las honduras en las que se mete, pero en este caso me he convencido prácticamente de todo. Qué equivocado estaba yo cuando decía que la programación orientada a objetos era pura cancamusa.

El libro trata todo el C++, el macrolenguaje que engloba los tres estilos de programación: procedimental, orientada a objetos y genérica. Y además, te invita a mezclarlos los tres como te convenga. No es un libro fácil ni dinámico como el de Ritchie, es una obra de peso, de densidad epistémica. Dice Stroustrup que se inspiró en Kierkegaard, yo más bien veo un planteamiento aristotélico entre el "ser en potencia" (clase abstracta) y "ser en acto" (clase concreta). Al final, la cosa va del noúmeno kantiano, objeto no fenoménico y suprasensible, toda la jerarquía de clases.

Son conceptos hechos a imagen y semejanza de nuestra percepción del mundo. Se pueden encontrar también en la gramática: sustantivo (clase), adjetivo (estado), verbo (función o método), adverbios (argumentos de las funciones), conjunciones (interfaces), subordinación (herencia múltiple), pronominalización (programación genérica)...

Pero de entrada Stroustrup no se anda mucho por las ramas. En lugar de la típica explicación mediocre aquella de "un objeto es por ejemplo una nevera: la nevera tiene propiedades y puede hacer cosas", usa una explicación más concreta: una clase es un tipo de dato, como hay datos fundamentales y hay estructuras de datos. La única diferencia es que esta estructura de datos incluye punteros a funciones adecuadas para ella. Un objeto es una variable que se ha declarado con un tipo de dato que es una clase. Esto es explicar con modestia aquello que se entiende bien, lo contrario de lo que hacen los profesores españoles.

Pero después de esta explicación, queda claro que se abre la puerta a algo mucho más potente, que es la herencia de otras clases, lo que viene más o menos a resumirse en la casi total flexibilidad del C++ para aprovechar el código que ya tienes escrito, y esto es una maravilla. Con el C siempre se acaba escribiendo código muy parecido pero no exactamente igual, lo que lleva a un crecimiento del código y a un muy difícil manejo a posteriori. El C++ bien diseñado y bien encapsulado es infinitamente más fácil de mantener.

Otra de las ventajas capitales es el tener las funciones a mano, no como en el C que comparten todo el espacio de nombres y tienes que ir buscando nombres raros, o incluso a veces no te acuerdas ni de que ya hiciste una función igual. En el C++ con el Visual Studio pones el nombre del objeto, le das al puntito y sale la lista de funciones a utilizar, sin tener que andar pasando parámetros para arriba y para abajo.

Es un lenguaje realmente de bolígrafo y papel, lo planificas todo como un arquitecto. Stroustrup te enseña a hacerlo en uno de los capítulos: primero encuentra las clases según tu concepto y percepción de ese mundo virtual que quieres crear, luego añádeles datos y funciones, luego establece la interacción que tendrán estas diversas clases, finalmente implementa las funciones. Pasas más tiempo en la planificación y menos en la implementación, por eso para mí es más divertido. Está hecho para adaptar el ordenador a la forma de pensar de tu mente, y no al revés. El C la verdad es que tiene una curva de aprendizaje inicial más baja, pero luego en el día a día es cansado y da lugar a inadvertidos errores con las consiguientes depuraciones.

Yo diría que el C es como el trabajo artesanal, que lo disfruta hasta un niño, mientras que el C++ es como tener la cadena de montaje, que al principio parece un fárrago pero luego la productividad es bestial. El C en un trabajo individual todavía puede pasar, en un trabajo en equipo es casi inviable porque cuando uno la caga los demás sufren las consecuencias. Con el C++ cada clase expone unas funciones que devuelven unos datos concretos, sin que alguien que pasa por allí pueda meter la zarpa más de lo necesario. Y además, casi no se pierde nada de rendimiento, cosa que para Stroustrup es fundamental.

Entonces, no voy a caer en la euforia de algunos que quieren usar los objetos hasta para hacer un script en PHP, ni por supuesto seré nunca partidario de esas soluciones jacobinas de "lenguaje único" tipo Java, pero sí que todo lo nuevo que le estoy metiendo ahora al GIMAD lo estoy haciendo en C++. Es como si hubiese encontrado la programación humanística, el "arte de programar", como decía el bueno de Knuth.



22:39:38 ---------------------  

2016 en Denia (Alberto Noguera)
El implacable retrato del desencanto y la corrosión de las ilusiones en la España de principios de siglo.
Comprar por 3,59€ en Amazon.


© A. Noguera

"Mirar el río hecho de tiempo y agua
y recordar que el tiempo es otro río,
saber que nos perdemos como el río
y que los rostros pasan como el agua".
Jorge Luis Borges


Leer los archivos

Entradas destacadas:
Pepito Relámpago - Pepita Nuncabaja - Seis meses en meetic - Etapas de la burbuja