4.4 ¿Qué he aprendido de las máquinas?
- 5 min de lectura
El hecho de trabajar con máquinas durante todos estos años me ha enseñado unos valores que intento aplicar en mi vida diaria: ser metódico y constante. Si empiezo una tarea me obligo a terminarla para evitar la tendencia a empezar cosas y dejarlas a medias. Recuerda que la perseverancia es una de las mayores virtudes. Tal y como dijo Lao Tse: «Un viaje de mil millas empieza con un primer paso».
Muchas veces, mientras desarrollo, pienso que si todo ese trabajo lo tuviera que hacer una persona en vez de una máquina nos denunciarían por esclavitud. Nosotros desarrollamos programas y, cuando son correctos, las máquinas los ejecutan sin pausa y sin protestar. Aunque sean tareas que para un humano serían monótonas y como un castigo, ellas van haciendo sin parar. Les da igual si se trata un proceso infinito o si lo van a ejecutar en unos pocos milisegundos, lo hacen y punto, porque no saben qué es la pereza y además no se cansan nunca.
Cuando ves pilas de tareas por hacer te puedes desmotivar, pero ese es un momento ideal para «pensar en modo máquina», ver de forma objetiva los hechos y aplicar una evolución de las 5W llamada 5W+2H: ¿qué?, ¿quién?, ¿cuándo?, ¿dónde?, ¿por qué?, ¿cómo? y ¿cuánto? De hecho, en más de una ocasión, he resuelto problemas de mi vida diaria planteándomelos como si fueran problemas técnicos para poder analizarlos de una forma más objetiva y metódica.
¿Qué hay que hacer?
Lo primero de todo es decidir qué hay que hacer. Si no sabemos qué hay que hacer estamos perdidos. Como ya he explicado, a una máquina le decimos qué tiene que hacer en todos los casos y si se nos escapa alguno, podemos obtener errores o resultados inesperados. En la vida real es imposible contemplar todos los casos, pero sí tenemos que tener las ideas claras de lo que hay que hacer.
¿Quién lo va a hacer?
El siguiente paso es decidir quién lo va a hacer. ¿Voy a hacerlo yo solo?, ¿con la ayuda de alguien?, ¿lo va a hacer otra persona o grupo de personas?, ¿lo vamos a delegar en máquinas?, etc. Por otro lado, ¿quién o quiénes tengan que realizar la tarea estarán suficientemente capacitados para realizarla, o bien delegarán en otro(s)? Recuerda que a veces no es más sabio el que más sabe, sino el que tiene el teléfono del que más sabe.
Además de todo esto, a la hora de asignar o delegar una tarea a alguien, hay que asegurarse de que disponga de la información adecuada y de la suficiente capacidad de tomar decisiones. Si no, en vez de conseguir aumentar la productividad, esta persona se convertirá en una fuente de interrupciones constantes.
A las máquinas siempre hay que especificarles quién va a ejecutar las tareas, por ejemplo, usuarios del sistema encargados de ejecutar los procesos. También tenemos que asegurarnos de que tienen los permisos suficientes para realizarlas (leer, escribir y/o ejecutar). A su vez, también pueden delegar y, de hecho, es algo habitual.
¿Cuándo?
Hay que planificar bien las tareas y saber si se van a ejecutar de forma inmediata, se van a posponer en el futuro, dependen de otras tareas, van a ser recurrentes, etc. La planificación de tareas es compleja porque suelen suceder acontecimientos inesperados que nos pueden hacer retrasar respecto a lo previsto. Por este motivo, es importante dejar un margen prudencial de tiempo para poder solventar incidencias y ser realistas con las planificaciones.
En las tareas de las máquinas también existen sistemas de planificación e incluso sistemas de colas, donde hay uno o varios workers que van procesando las tareas encoladas en las distintas colas de ejecución. Lo que puede ser realmente complejo en las máquinas es controlar tareas que se ejecutan de forma concurrente y sincronizarlas para que se esperen entre ellas y respeten las precedencias. Si no se hace bien, podemos tener una tarea que ha entrado en un bucle infinito y otra que esté esperando a que termine la primera para continuar con el proceso. En la vida real asignamos unos tiempos para realizar las tareas, en informática se llaman «timeouts» y es conveniente usarlos para no tener tareas colgadas de forma indefinida.
¿Dónde?
No es lo mismo bañarse en una piscina climatizada que en la playa en pleno invierno. Este ejemplo puede resultar evidente, pero, a veces, la falta de concreción a la hora de especificar dónde está el problema o dónde hay que realizar una determinada acción puede llevar a serios malentendidos.
En informática es habitual que te digan que hay un problema, pero no te digan dónde. No es lo mismo que caiga el servidor de desarrollo que el servidor de producción. La tarea a realizar no tendrá la misma prioridad ni se le van a asignar los mismos recursos.
¿Cómo?
Si sabemos lo que hay que hacer, quién lo va a hacer, cuándo y dónde, el siguiente paso es saber cómo hay que hacerlo. Si asignamos una tarea a alguien que no sabe o no puede llevarla a cabo, tendremos un problema. Por lo tanto, tenemos que asegurarnos de que disponga de todo lo necesario, como formación y herramientas. Puede haber muchas formas de realizar una tarea, eso dependerá de cada caso concreto y de los recursos, tiempo y dinero de los que se disponga.
Como ya he dicho, los ordenadores son tontos muy rápidos, con lo cual, se les tiene que decir exactamente cómo tienen que resolver las tareas. Hay que ser concreto, sin ambigüedades y no se puede dejar nada al azar. Si para procesar una tarea se necesita conexión a Internet, pero no la hay, no va a ser posible realizarla. Por lo tanto, nos tenemos que asegurar de que tenemos los medios para llevarla a cabo.
¿Cuánto?
Hay dos preguntas clave a la hora de planificar tareas y gestionar recursos: ¿cuánto tiempo se va a tardar? y ¿cuánto va a costar? Es decir, el tiempo y el dinero son dos elementos clave básicos a la hora de llevar a término cualquier proyecto y por este motivo hay que saberlos gestionar adecuadamente. Además, hay que tener presente que con dinero podemos adquirir recursos e incluso contratar a los mejores profesionales para cada caso, pero, por desgracia, no podemos recuperar el tiempo pasado.
Cuando hablamos de las máquinas en sí, los factores clave suelen ser el tiempo (otra vez) y los recursos disponibles de nuestros sistemas: CPU, memoria RAM, capacidad de almacenamiento, ancho de banda, etc. Es decir, tenemos que cuantificar el uso de estos recursos y el tiempo durante el que se va a hacer uso de ellos. Por ejemplo, no es lo mismo necesitar 8 GB de RAM de forma constante que de forma puntual para poder ejecutar una determinada tarea con una duración de treinta minutos una vez al día.
No hay un porqué
Está muy bien plantearse el porqué de las cosas. De hecho, me considero una persona curiosa, me gusta saber la causa de las cosas y no me gustan las respuestas del tipo «porque sí», «porque lo digo yo» o «porque siempre se ha hecho así». Pero también hay que ir con cuidado y no irse por las ramas porque al final acabamos filosofando y nos alejamos de lo que realmente tenemos que hacer. Dicho de otro modo, no digo que sea malo preguntarse el porqué; sin embargo, tampoco debe ser una excusa para no hacer nada.
Las máquinas, por otro lado, no tienen estos dilemas morales y no se plantean el porqué de las cosas. Simplemente lo hacen sin rechistar y exactamente como se les ha dicho que lo hagan. No se plantean cosas como: ¿Por qué tengo que hacerlo yo? ¿Por qué es tan difícil? ¿Por qué va tan lento? ¿Por qué no funciona?
${ commentsData.total } comentario comentarios
Todavía no hay comentarios. ¡Sé el primero!
Inicia sesión para publicar, responder o reaccionar a los comentarios.
Inicia sesión para publicar, responder o reaccionar a los comentarios.
Respuesta para ${ replyToComment?.user.full_name }