miércoles, 20 de octubre de 2010

Ben Ari contra la Orientación a Objetos, pero no apunta bien

Ben-Ari
es un profesor de informática de los de siempre, conocido fundamentalmente en el ámbito de la concurrencia. Para mí está asociado al lenguaje Pascal y a Niklaus Wirth por su intérprete BACI de Pascal Concurrente (con su libro asociado de "Principles of Concurrent Programming" del 82. Por cierto que se puede conseguir usado en Amazon solo por 13 céntimos de dólar :-)).

El caso es que últimamente tiene una postura bastante crítica con la Orientación a Objetos (OO), que se puede comprobar en el artículo "Objects Never?. Well, Hardly Ever!" (publicado en Communications of the ACM), y que puede consultarse completo en su página web.

El resumen de su postura:
"I claim that the use of object-oriented programming is not as prevalent as most people believe, that it is not as successful as its proponents claim, and, therefore, that its central place in the CS curriculum is not justified."
Sin embargo, tras leer el artículo, en mi opinión el mismo no da soporte a esas afirmaciones y comete precisamente los mismos fallos que él mismo critica.

En esencia, dice que lo de que "todo el mundo usa OOP" es mentira, o más bien, que es algo que se da por hecho, pero que en realidad nadie enseña datos de que sea un paradigma extendido. Sin embargo, tampoco él mismo ofrece datos de lo contrario.

Como apoyo dice que por ejemplo, opina que en el campo del software empotrado no se usa la OO. Está seguro de que este software no se desarrolla usando OO. De nuevo tampoco ofrece datos de que sea así, con lo que también es una suposición o intuición suya.

Posteriormente confunde el número de unidades instaladas de un sistema software desarrollado con el esfuerzo en el desarrollo del mismo: si el software empotrado de un coche (ej: el control de frenada) no se desarrolla con OO, y se venden millones de coches, el paradigma con el que esté desarrollado el software empotrado (que no sabe en cualquier caso cuál es) es mucho más prevalente que el de la OO. En mi opinión, la difusión de un paradigma no es el número de copias distribuidas del software generado, sino el tamaño de los proyectos desarrollados con el mismo. En último extremo una aproximación sería el número de desarrolladores que lo utilizan.

También cita ejemplos anecdóticos de su experiencia personal (o que él supone que sean así) en la que la POO no tiene beneficios o más bien inconvenientes. Está claro que la POO no es milagrosa (No Silver Bullet), pero en mi opinión son eso, anécdotas, y además los inconvenientes son más bien problemas del diseño OO más que de la POO.

Sí, es cierto que usando OO se pueden hacer malos diseños que tengan inconvenientes. Con la OO y con cualquier otro paradigma, pero la cuestión es si bien utilizada mejora otros sistemas (lo cual yo sí que creo cierto). Este es el quid de la cuestión, y en lo que debería centrarse Ben-Ari para poder afirmar que la OO es peor que otras técnicas. Pero eso Ben-Ari no lo trata en su artículo.

Sin embargo, sí que coincido con él en la mayor parte de sus conclusiones:
- Proponents of OOP should publish analyses of successes and failures of OOP, and use these to clearly and explicitly characterize the domains in which OOP can be recommended.
Efectivamente, más que por intuición o consenso, deberían hacerse más estudios en torno al éxito (relativo) o fracaso (relativo) de la OO. También los proponentes de otras técnicas deberían hacerlo, porque están en la misma situación :-)
- Software engineers should always use their judgment when choosing tools and techniques and not be carried away by unsubstantiated claims. Even if you are constrained to use a language or tool that supports OOP, that in itself is not a reason to use OOP as a design method if you judge that it is not appropriate
Esto es de cajón. Nadie puede llamarse Ingeniero si no evalúa las alternativas para escoger la más adecuada al problema que debe resolver, tanto en técnica de diseño como en lenguaje, herramientas, etc.
- Educators should ensure that students are given a broad exposure to programming languages and techniques. I would especially like to see the education of novices become more diverse. No harm will come to them if they see objects very, very, late.
Efectivamente, exponer al estudiante a distintas técnicas y lenguajes es importante. Esto es lo que intentamos en los planes de estudio de Ingeniería Informática, aunque hay que reconocer que por falta de tiempo muchas veces no en la profundidad que se requeriría.
En cuanto a dejar para el final la exposición a la Orientación a Objetos, probablemente no haga daño, pero tampoco lo hace hacerlo al contrario (hay opiniones a favor y en contra). Especialmente cuando hay limitaciones de tiempo hay que decidir cuál es el orden más efectivo y con qué profundidad se trata cada paradigma.

En las circunstancias actuales, creo que la OO es la técnica prevalente en la Informática, que todos los Ingenieros en Informática deben conocerla bien y que sigue siendo mejor la estrategia de enseñanza con "Objetos Primero"...

No hay comentarios: