Programación imperativa vs declarativa I

En general, que el futuro de la programación será (casi seguro) programación declarativa, es algo que difícilmente puede negarse. Ya sólo la gestión eficiente del flujo de eventos en una sencilla aplicación de escritorio puede dar algún que otro quebradero de cabeza y si nuestros procesos consumen algo de procesador, hacerlo eficiente para diversas condiciones (pocas o muchas CPU, memoria, …) requiere paciencia y talento (una buena paralización no es “poner una tarea en cada núcleo”), aderecemos el plato con flujos sincronizados de datos a través de la red y disco y ya tenemos el “comerecursos” perfecto.

Parece que la programación imperativa es cada vez más costosa, mientras que la programación declarativa nos atrae cada vez más con sus cantos de sirena. Si te apetece, pensemos sobre ello en nuestra “programación imperativa vs declarativa” particular.



 

Los costes de la programación imperativa

Desde hace mucho tiempo me pregunto cómo es posible que en mi 8088 a 12 MHz con 512Kbytes de RAM las aplicaciones corrieran maravillosamente (había aplicaciones muy buenas, de editores de texto, suites ofimáticas más que aceptables y fue esa época [hasta el 386] mi época dorada de los videojuegos). Hoy en día es evidente que los ordenadores hacen muchas más cosas (eg. la memoria de vídeo que tienen que gestionar es ahora 1920×1080×32 / 640×200×2 = 259.2 veces más que antes), pero la capacidad de cálculo se ha multiplicado en muchas más veces; por ejemplo, la calidad de las arquitecturas ahora es muchísimo mejor (a igual velocidad de reloj, los procesadores actuales son decenas y centenas de veces más eficientes), tienen tamaños de palabra 8 veces mayores (de 8bits a 64bits), los compiladores generan código muchísimo más optimizado sobre algoritmos más sofisticados (que antes no existían) y aún sin tener todo ésto en cuenta, ahora la cantidad de proceso es 2×2500 MHz / 1×12MHz = 417 veces más, pero es que resulta ¡que la CPU no renderiza, pues hay otra GPU sólo para eso!. ¿Porqué entonces mi ordenador (¡para ver una simple página web!) no va raudo como el rayo?, ¿por dónde se está yendo esa capacidad de cálculo de mi ordenador?.

La respuesta la tenemos en “la complejidad combinada”, dicho rápidamente sería como que: “la complejidad total resultante, es mucho mayor que la suma de la complejidad de las partes”. Por ejemplo, si tenemos que hacer un programa, solemos dividir grosso modo, la funcionalidad total del programa en pequeñas partes que vamos resolviendo individualmente. Así, resolvemos eficientemente las pequeñas partes, pero al combinarlas, obtenemos soluciones ineficientes.

Por un lado, nosotros no somos capaces de abarcar una visión global pero precisa simultáneamente del sistema y por otro, el compilador no puede ayudarnos a suplir este problema. Así, todo problema (medianamente complejo) que nosotros no seamos capaces de resolver, la programación imperativa tampoco lo conseguirá.

[...]
>>> Ver artículo original completo (se recomienda) en: http://www.genbetadev.com/

No hay comentarios:

Publicar un comentario

Related Posts Plugin for WordPress, Blogger...