Flexibilidad de software en tiempos de internet

Si buscamos aprender programación en internet en nuestro bello 2019 encontraremos blogs, videos y páginas enteras dedicadas a enseñar programación. En mi experiencia, me he topado con cientos de anuncios y páginas donde te enseñan los fundamentos de la programación: crear variables, funciones, algun lenguaje de programación. librerías… pero algo que no he encontrado, si no lo busco específicamente, es un curso de creación de software. Creación de software refiriendome al proceso completo de lo que es la programación, no solo el código, si no la parte de requerimientos, análisis y diseño. El problema empieza por aqui: no todos quienes aprenden a programar tienen la suficiente práctica para aprender sobre estos temas, y no es que sea algo malo, solo que puede dificultarles la tarea de crear software chido.

peña
Tomada de: Mientras tanto en México https://www.mientrastantoenmexico.mx/los-memes-que-nos-dejo-pena-nieto-durante-su-sexenio/

Introduciendo a Juan Godínez

Oficinistas Cigarra y Hormiga

Supongamos la siguiente situación: Juan Godínez estuvo varios meses aprendiendo programación con cursos en línea. Tomo muchos cursos de Python, Java y C++. Está lo suficientemente capacitado para crear su primer aplicación en Android. Como Juan es un emprendedor, crea la app YoSoyGodín, en la que cualquier persona puede suscribirse y encontrar memes de godínez.

Su aplicación consta de solo tres clases: login, inicio y conectividad. En el login solo se valida la contraseña y el usuario. En el inicio es donde funciona TODA la aplicación y la conectividad, pues, permite conectarse a la red.

Juan Godínez visita al Doctor Profesor Alexis Freud

DSC_2892
Tomada de Flickr

YoSoyGodín se lanza al público y alcanza los 50,000 usuarios. Juan Godín quiere agregar reacciones (como las que tiene Facebook, su principal competidor del mercado Godín) para que sus usuarios puedan tener la máxima diversión compartiendo lo mucho que les entristece tener que trabajar en puente o lo mucho que les divierte que su compañero deba trabajar en Navidad. ¿El problema? Juan Godínez hizo su aplicación en una semana y desconocía por completo el concepto: diseño, por lo que el código de su app es un verdadero desastre y decidió visitar el consultorio del Doctor Profesor Alexis Freud.

El código que escribió Juan funciona casi a la perfección, pero es imposible entender que fue lo que hizo y le es difícil agregar algo nuevo sin destruir su app.

Se le recetó Diseñum deus codigus (un poco de diseño) para curar su app.

¡Manos a la obra!

Para crear un programa tenemos muchas metodologías, que en general incluyen una fase de diseño antes de crear el código de la aplicación o programa. ¿Qué es esta fase de diseño? Es donde se modela lo que se va a crear. Un arquitecto o un ingeniero Civil hace un plano antes de construir, un artísta hace bocetos antes de crear sus obras y un programador hace modelos antes de crear su código. Consiste en diseño de clases, diagramas, dibujos e incluso prototipos que muestren a grandes razgos y sin palabras técnicas el funcionamiento de un programa.

Esto se refiere a describir el comportamiento de la aplicación desde antes de escribir el código. Un buen diseño nos permitirá, sin ver el código, entender como funciona el programa, por lo que hacer cambios será una tarea simple. Esto se le conoce como flexibilidad. Un software flexible es aquel que permite hacer cambios siempre que requiera. Una buena flexibilidad desemboca en una buena escalabilidad. La escalabilidad se refiere a la capacidad que tiene nuestro software de hacerse más grande.

Si creamos un programa que calcule areas y le decimos como calcular el area de un triángulo y después como calcular el área de un triángulo, tendremos que repetir el proceso para calcular areas de pentagonos y hexágonos. En cambio, si modelamos que puede ser una figura de cualquier tamaño con N lados, será fácil calcular áreas de figuras de 200 y 5000 lados sin problema.

Es un ejemplo un poco vago, pero nos permite ver una primera aproximación al tema del diseño: todo depende del ¿para qué? y ¿por qué?

¡Suficiente teoría!  Volvamos al caso Juan Godínez. Nuestro heroe debe entonces planear mejor el diseño de su aplicación. En su caso, lo mejor sería separar un poco más su conjunto de clases. La clase inicio sería como el feed de Facebook, por lo que podríamos separar esto en:

  • Contenedores: los recuadros que muestran la imagen, el texto, el enlace, el video…
    • Anuncio: un «caso especial» de contenedor que tiene un anuncion.
  • Botones: botones de compartir, comentar o dar me gusta.

Esto solo para dar una primera aproximación. No es lo mismo buscar entre 5,000 lineas de código donde hacer el cambio que tener un poco más de orden. Con esta pequeña separación veremos que es más fácil agregar la funcionalidad que Juan Godínez desea. Con este modelo solo necesitamos crear una nueva clase, que sea el Botón de reacción, que se comportaría casi igual que el botón de me gusta. De esta manera no tenemos que tocar lo demás (ni siquiera abrir las clases en el editor).

Conclusión

  • Es deseable encontrar flexibilidad en nuestro código.
  • La flexibilidad nos permite hacer cambios facilmente. Ya sabemos que los cambios son cosa de todos los días. Si no lo has leído o te interesa repasar lo que sabes, da click aquí.
  • La flexibilidad nos permite un código escalable.
  • Si no tenemos los fundamentos teoricos para hacerlo, ahora sabemos que los necesitamos. Los cursos en internet no pueden abarcar todo el contenido, por lo que saber que mejorar es una oportunidad de mejora.

No olvides seguir leyendo al Doctor Profesor Alexis Freud para siempre seguir aprendiendo.


Una respuesta a “Flexibilidad de software en tiempos de internet

Deja un comentario