La crisis que experimenta el desarrollo de apps.

El mundo del desarrollo software experimenta una pequeña crisis. Este mundo globalizado en que vivimos con las redes sociales e internet en todas partes tiene un costo de horas de desarrollo de millones de personas. Y sencillamente no hay suficientes programadores en el mundo para hacer todo el trabajo que queda por hacer.


Cuando las grandes compañías de software (IBM, Apple, Microsoft...) comenzaron a crear centros de operaciones en mercados emergente como la india, no lo hicieron solamente por una cuestión de abaratar costes, sino para asegurarse la formación de mas personal cualificado que pudiesen llevar a cabo sus proyectos en el futuro en estos mercados.

El problema del desarrollo

Hemos llegado a un punto en el que el tiempo de programación es exponencialmente más caro que el tiempo de computación. Por lo general, hace falta mucho tiempo de programación para ofrecer una mejora en el rendimiento que un 98% de los usuarios no acabarán notando.

@Tom Eastman tiene una genial forma de exponer este problema.

He escrito un programa en python que ejecuto una vez al día y tarda 1.5 segundos en ejecutarse.


Ayer estuve seis horas re escribiéndo el programa en un lenguaje más rápido y complicado y ahora tarda 0.06 segundos.


Esta mejora en la eficiencia comenzará a ahorrarme tiempo en 41 años y 24 días. :-)

¿Comprarías un coche que consumiese 49 litros cada 100 km ? ¿Y si te digo que consume 8000 litros por cada 100km? Con los ordenadores y el software hacemos eso todos los días.

Todo es insufriblemente lento

El móvil desde el que llamas por teléfono a diario es mil veces más potente que los ordenadores que se enviaron a la luna en los años 60. Como diseñador web, a menudo me encuentro con el problema de hacer que una página web se vea de forma fluida en un ordenador personal. Cuantas mas animaciones y más se van moviendo las cosas en la pantalla, más difícil es lograr que el movimiento se vea fluido en las pantallas.


Esto es algo que no me acabo de creer del todo. ¿Es una broma?¿Podemos jugar a videojuegos que renderizan en tiempo real millones de polinomios en computación gráfica por segundo , y ver películas a 120hz  y 4k , y no puedo renderizar una sencilla página web?


Google Inbox, por ejemplo (gmail) , es una app que ha realizado google, y abriéndola en chrome (su propio producto) aun tarda 13 segundos en inicializarse. También renderiza las páginas con las cajitas en blanco en lugar de renderizar la web de forma fluida.


La última actualización de windows 10 tarda 30 minutos en actualizarse. ¿Que demonios está haciendo en tu computadora y de que manera lo está realizando para que tarde 30 minutos en actualizarse? En ese tiempo , podría formatear mi disco duro SSD , instalar una versión nueva desde un usb e instalar windows como cinco veces seguidas.

Y no estamos hablando de cualquier compañía. Estas son las grandes, saben lo que hacen y lo saben perfectamente. Saben que a un usuario no le importará esperar 30 minutos para que su computadora se actualice automáticamente, y programar esto de una manera más eficiente para que lo hiciese en cinco costaría millones de dólares en recursos humanos.


Nadie comprará un sistema operativo cuya mejor funcionalidad sea que se actualiza en cinco minutos. Especialmente si para descargar la actualización tarda 30 o 40 según la conexión a internet.

Todo es gigantesco

Y luego llega todo el software externo. Las apps webs podrían cargar diez veces más rapido si sencillamente bloqueases todos los anuncios. Google insiste a todo el mundo de usar su propia tecnología AMP - una solución tecnológica a un problema que no necesita ninguna tecnología sino un poquito de sentido común. Si eliminas todas las cosas que no necesitas, una app irá mucho más rápida y fluida. Pero en este mundo tan globalizado e interconectado, con tantas cosas relacionadas entre si,  y dando trabajo a tantísima gente, es complicado determinar lo que es necesario de lo que no.

Para ponerlo en perspectiva, windows 95 ocupaba 95 megabytes. Windows 10 ocupa 4 gigabytes. Android  son casi 6gb la última versión . Pensad en lo increíblemente enorme que es esa cifra. ¿Que tienen pelis de alta resolución? Supongo que será solamente código. El código se escribe para ser utilizado de alguna manera en una forma u otra. Fijaos el tamaño que ocupa un archivo .txt de 10000 lineas, y después imaginaos 6 gigabytes solamente de eso. Todo ese código debe de ser procesado por nuestra computadora en algún momento .


¿Y cuanto pesan las apps? Solamente la app del teclado de google ocupa unos 150mb. Sencillamente dibuja 30 caracteres en una pantalla y ocupa 150mb - el coste de la internacionalización y de hacer que un teclado funcione en cualquier idioma del planeta.


Por supuesto, al usuario no le importa tanto que 8 de sus 64 gb de su nuevo iphone estén ocupados por el sistema operativo, y si apple tuviese que invertir el dinero suficiente en reducir este número, probablemente el proyecto no sería rentable. De nuevo aquí influye, el coste del espacio en bits es infinitamente más barato que el tiempo de desarrollo de software. 

Al menos funciona

Y ese es el auténtico problema. La realidad es que más grande no implica mejor. Más grande significa que alguien ha perdido el control. Hace algún tiempo, se popularizó entre desarrolladores el programa sublime text. Un editor de código que destacaba por su increible rapidez respecto a otras herramientas de programación, que tardan siglos en cargar.


La herramienta se convirtió en casi un estándar de una enorme parte de la comunidad de desarrolladores global. Cada vez que lo enseñaba a algún desarrollador que no lo conocía, en seguida lo descargaba.

El programa tuvo tanto éxito que microsoft tomó buena nota y en su útlima versión de su popular Visual Studio Code, replicó exactamente el comportamiento de este editor con funcionalidades mejoradas. La competencia forzó a que microsoft se pusiera las pilas. 


Las cosas caducan rápidamente

Otra de las máximas , hace 3 años un teléfono android con 16GB era perfecto. Hoy con Android 8.1 casi que no llega porque todas las apps ocupan al menos el doble o el triple sin ningún aparente motivo. No funcionan mucho más rápidamente y tampoco es que incluyan muchísimas nuevas funcionalidades... con el paso del tiempo sencillamente...¿crecen en tamaño? ¿Son gremlins?


El iphone4s se lanzó con iOS5, pero apenas mueve iOS 9 ni correrá iOS10.  ¿Es que iOS 10 es ese % tan elevado de mejor? Parece que como el nuevo hardware es más rápido, ellos pueden hacer que su software sea mas lento. Y lo vemos muy normal, que las actualizaciones hagan que todo tenga que ir más despacio parece una meta normal en la informática. ¿Os imagináis que cada vez los coches nuevo consumieran más gasolina? Pues esto es lo que ocurre con los ordenadores.

@jckarter: lo expone de forma soberbia

Un programa en DOS puede ejecutarse sin modificar en prácticamente cualquier computadora que se haya creado a partir de 1980. Una app en javascript podría no funcionar con la actualización de chrome de mañana

Si ... yo compro ordenadores  y móviles que son cada vez más potentes,¿Ahora es que sencillamente el software se ejecuta más despacio?

Lo peor es mejor

Hemos llegado a este punto pero la gente no se ha enterado. Tampoco les interesa. Las cosas pueden fallar por tantos motivos que una página web sencillamente te pide que refresques y vuelvas a cargar para corregir un error. No es necesario saber que es lo que ha ocurrido.

¿En serio? ¿No puedes cargarlo tu todo de nuevo? Al usuario no le importa. En serio, el nivel está tan bajo con la exigencia que hoy es perfectamente normal que en algún punto de tu software para indicarte "Que versión deseas conservar" y que el usuario se sienta contento con esto.

resolve conflict

¿Estamos locos Apple? No lo estan, al usuario final no le importan estas cosas porque ve tanto valor a todo lo demás que hace apple. Y es normal, la pantalla del último iphone X me pareció sacada de una película de ciencia ficción la primera vez que la vi. Hacía el diseño tan elegante y estaba tan bien integrada que casi parecía magia.


En el mundo de las apps "Voy a borrar algo de tu información pero por favor elige cual de las dos deseas conservar" no debería ser un estándar, y aún así...

resolve conflict

La verdad que no estaría mal que, con tanto combatir al cambio climático, el mundo desarrollara productos que fuesen un poco más duraderos.

El desarrollo tiene lo mismo

En cuanto a desarrollo , debo decir que hemos avanzado mucho en las herramientas para programar y desarrollar sistemas, pero en definitiva nada es perfecto. Por mucho que avancen los sistemas y los desarrollos, siempre tendremos los mismos problemas a la hora de programar: Gestión de dependencias, compilación de sistemas, diseño de lenguajes, interfaces de programación...

Los sistemas de compilación son por lo general bastante impredecibles y a menudo requieren que se limpien completamente, aunque toda la información para invalidar los datos está ahi mismo. Nada nos detendría de hacer sistemas de compilación mucho más efectivos y 100% predecibles, pero de nuevo a nadie le importa. Borrar todos los archivos de compilación para una app en muchas tecnologías es un comando que se debe de utilizar casi todas las veces "por si las moscas".


¿Y que me deciis de los tiempos de compilación? Si no eres un programador no entenderás esto, pero básicamente compilar es a partir de código construir una versión de tu app. Todos los nuevos y modernos procesos de precompilación  de hoy en día añaden tiempo adicional al desarrollo de un desarrollador (que sencillamente está esperando a que el ordenador ejecute cosas) y rara vez aportan ningún tipo de ventaja.

¿Estamos locos Apple? No lo estan, al usuario final no le importan estas cosas porque ve tanto valor a todo lo demás que hace apple. Y es normal, la pantalla del último iphone X me pareció sacada de una película de ciencia ficción la primera vez que la vi. Hacía el diseño tan elegante y estaba tan bien integrada que casi parecía magia.


En el mundo de las apps "Voy a borrar algo de tu información pero por favor elige cual de las dos deseas conservar" no debería ser un estándar, y aún así...

resolve conflict

Y ahora todo utiliza inteligencia artificial, que es el sinónimo de buscar entre un numero exageradamente elevado para obtener resultados que a veces son precisos  y a veces no. Por lo general desconfío en casi todas las empresas que me venden sus proyectos como algo de IA porque haría falta tantísimo dinero para hacerlo bien que no puedo evitar pensar. ¿Que me intentas vencer con aura movistar? ¿No eres capaz de mantener mi linea conectada 24 horas al día y has desarrollado una interfaz digital que me permite hablar contigo?( La de cosas que se inventa el marketing). 


Los servidores web son una locura, ponemos máquinas virtuales dentro de sistemas linux, y luego ponemos sistemas docker dentro de esas maquinas virtuales, porque nadie se ha tomado el tiempo de arreglar todos los errores que presentan todos los sistemas. Si la gente que no comprende la informática pudiese entender lo costoso que es - computacionalmente hablando - tener un ordenador con varios ordenadores simulados, que a su vez ejecutan microordenadores simulados... Hace que todo sea 10 veces más lento, y aun así parece ser el estándar de hoy en día y del futuro por la comodidad que me ofrece a mi como desarrollador tener una herramienta que me permite olvidarme de esos problemas con un par de lineas de código nada más.


Los programas ya no pueden funcionar sin reiniciarse de vez en cuando. Alguna vez incluso poder tener un sistema funcionando durante días parece mucho pedir. Ocurren un montón de cosas que parecen aleatorias y que nadie realmente comprende, y tienes que invertir (y perder) muchas horas de desarrollo en ellas.


La mágia de amazon web services

Y para que molestarse en averiguar que es lo que puede estar ocurriendo, si puedo lanzar una máquina virtual nueva a través de amazon web services que solucione el proceso y reiniciar el sistema sin que los usuarios se enteren de lo que acaba de ocurrir . Ocurre a diario, borrar y restaurar una base de datos entera, escribir registros de sistema tan largos que te forzará a reiniciar tu servidor cada 3 o 4 horas, o incluir las mismas imagenes varias veces incluso con zips dentro de cada app de forma repetida, sencillamente compilar y enviar... hay que moverse rápido, no hace falta arreglar, el público no lo necesita.

Si me preguntas a mi, eso no es ingeniería sino pereza. Es nuestro deber como ingenieros, realizar sistemas embedidos más eficaces y estables, y apurar el estado de las máquinas hasta un punto que permita conservar nuestros productos durante años sin que queden obsoletos. No caer en el capitalismo tan barato y desmedido que acabará por destruir el planeta. 


Si eres ingeniero o tienes curiosidad  y hablas inglés, te recomiendo que le eches un vistazo a este artículo , que es el que he utilizado para crear este pequeño resumen para dummies y que explica con más detalle los problemas.


Entre tanto si te interesa el tema y quieres saber de que manera puede afectar esto a tu idea o proyecto, ya sabes...

Be the first to comment

Lo más popular entre los lectores

Email *
Suscribirme

¿De qué va esto?

Lo más reciente

Las categorías

Te puede interesar...