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