¿Cómo saber los algoritmos de programación de computadora puede ayudarnos a ser productivos?

Todos queremos hacer más cosas de manera eficiente y rápida. Las computadoras son mejores en eso. Entonces, tratemos de comprender algunos algoritmos de programación de computadoras para ver cómo podemos aplicarlos a nuestras vidas diarias para ser más productivos en nuestras tareas.

¡Lo primero es lo primero! No quieres llegar tarde.

¿Cómo terminar antes de los plazos?

Si atiende a clientes, querrá atender a cada cliente lo más rápido posible. Asumiendo que el servicio de cada cliente toma casi la misma cantidad de tiempo, entonces puede ayudarlos para que lleguen. El compromiso ideal o el debido tiempo para un cliente es tan pronto como entren a su puerta.

Aplicando la misma estrategia a las tareas:

 Debe comenzar con la tarea que se debe realizar lo antes posible y avanzar hacia la tarea que le corresponde 

Esta estrategia, conocida como la fecha de vencimiento más temprana. que funciona mejor para minimizar la tardanza. Pero tenemos un problema si cada tarea requiere una cantidad de tiempo variable para completarse.

Cómo reducir la lista de tareas pendientes?

Volviendo al ejemplo de servicio cutomer, si atender a cada cliente toma diferentes cantidades de tiempo, entonces le conviene dar servicio a la mayoría de los clientes. Digamos que podemos dividir clientes por tipo de servicio y sabemos el tiempo típico de finalización para cada tipo de servicio. Entonces, el mejor enfoque sería seleccionar al cliente que necesita el tipo de servicio con el tiempo de finalización más rápido.

Esta estrategia se basa en el algoritmo de Moore que dice:

 Comenzamos igual que con la Fecha de vencimiento más temprana: programando tareas a medida que llegan, pero cuando decida qué tarea hacer a continuación, elija la más rápida y repita este proceso. 

Es como centrarse sobre todo en reducir la longitud de su lista de tareas pendientes. Además, cada tarea inacabada podría ser como llevar una carga mental. Volar a través de los objetos más fáciles traerá cierta medida de alivio.

No es sorprendente que este enfoque sea compatible con la recomendación del libro Getting Things Done de realizar inmediatamente cualquier tarea que tarde menos de dos minutos.

Esta es una gran manera de hacer más cosas, pero todo el trabajo no puede ser igualmente importante.

¿Cómo funciona la mayoría de los objetos de valor?

Probablemente se deba apagar un incendio real en la cocina antes de "apagar un incendio" con un correo electrónico rápido a un cliente, incluso si el primero demora un poco más.

En la programación, esta diferencia de importancia se captura en una variable conocida como weight . Cuando revises tu lista de tareas pendientes, este peso puede ser literal: la carga que te cuesta al terminar cada tarea. El tiempo de finalización de una tarea muestra cuánto tiempo lleva esa carga, por lo que minimizar la suma de los tiempos de finalización ponderados (es decir, la duración de cada tarea multiplicada por su peso) significa minimizar su opresión total a medida que trabaja en toda su agenda.

La estrategia óptima para este objetivo es una modificación simple del algoritmo de Moore:

 Divida el peso de cada tarea por cuánto tiempo tardará en terminar, y luego trabaje en orden desde la mayor importancia resultante por unidad de tiempo hasta la más baja. 

Por ejemplo, si usted es un consultor, el peso puede deducirse del dinero que recibe. Así que simplemente divida la tarifa de cada proyecto por su tamaño, y avance desde la tarifa más alta por hora hasta la más baja.

Puede ser difícil asignarle un grado de importancia a cada una de sus tareas, pero hay una regla general rápida:

Solo priorice una tarea que requiera el doble de tiempo si es dos veces más importante.

Pero si las tareas dependen de otras tareas, esto nos traerá nuevos problemas.

¿Cómo despegarse?

Podríamos quedarnos atascados a veces porque no se puede hacer una tarea importante hasta que se termine otra tarea menos importante. En informática este problema se llama inversión de prioridad.

La inversión prioritaria es un escenario problemático en la programación en el que una tarea de alta prioridad es indirectamente sustituida por una tarea de menor prioridad que efectivamente "invierte" las prioridades relativas de las dos tareas.

La solución práctica a este problema es Herencia de Prioridad . Es decir

 Despegarse es tratar las cosas sin importancia como algo tan importante como lo que sea que esté bloqueando. 

¿Cómo trabajar a través de tareas entrantes continuas?

La vida podría ser fácil, si tenemos una lista finita de tareas. En realidad, no lo es. Si las asignaciones son lanzadas sobre usted en momentos impredecibles. El enfoque eficiente es cambiar las tareas que se conoce como prioridad en la informática.

Preemption es el acto de interrumpir temporalmente una tarea que se lleva a cabo por un sistema informático con la intención de reanudar la tarea en un momento posterior.

Se puede usar en la programación de trabajos como

 Cada vez que una nueva obra entra, divida su importancia por la cantidad de tiempo que tomará completar. Si la cifra es más alta que para la tarea que está haciendo actualmente, cambie a la nueva; de lo contrario, mantente con la tarea actual. 

Pero la prioridad no es gratis. Viene a costa del cambio de contexto.

¿Cómo se quema el trabajo?

Cada vez que cambia de tarea, paga un precio, conocido en informática como un cambio de contexto. Cuando un procesador de computadora desvía su atención de un programa determinado, siempre hay una cierta cantidad de sobrecarga necesaria. Necesita marcar efectivamente su lugar y dejar de lado toda su información relacionada con ese programa. Luego necesita averiguar qué programa ejecutar a continuación. Finalmente debe extraer toda la información relevante para ese programa, encontrar su lugar en el código y ponerse en marcha. El cambio de contexto rápido y repetido causaría la degradación o el colapso de la computadora. Este fenómeno llamado como golpeteo .

Puedes pensar que es como hacer malabares con un juego de bolas. Si el malabarista toma una bola más de la que puede manejar, no deja caer esa bola; él deja caer todo .

Thrashing es un estado humano muy reconocible. Si alguna vez tuviste un momento en el que quisiste dejar de hacer todo solo para tener la oportunidad de escribir todo lo que se suponía que debías hacer, pero no pudiste perder el tiempo, te has regodeado. No estás logrando nada en absoluto. Te sientes agotado y agotado.

¿Cómo reducir la carga de la multitarea?

Algunos consejos para reducir la carga del cambio de contexto.

No guardes tus platos llenos.

La mejor estrategia para hacer las cosas podría ser, paradójicamente, frenar. Una forma de evitar la agitación antes de que comience es aprender el arte de decir NO.

A veces el orden aleatorio es mejor que el horario perfecto

Una de las mayores fuentes de metawork en contextos de conmutación es el acto de elegir qué hacer a continuación. De modo que incluso realizar tareas en el orden incorrecto es mejor que no hacer nada en absoluto.

Pensando en la misma línea, el equipo central de Linux, hace varios años, reemplazó su programador con uno que era menos "inteligente" sobre el cálculo de las prioridades del proceso, pero lo compensaba más al tomar menos tiempo para calcularlas.

Por ejemplo: en lugar de responder primero a los correos electrónicos más importantes, lo que requiere una evaluación de la imagen completa que puede llevar más tiempo que el trabajo en sí, quizás debería responderlos en orden aleatorio o en cualquier orden en que aparezcan en pantalla. .

Comprometerse a hacer una sola tarea por un tiempo mínimo

Los planificadores del sistema operativo de la computadora normalmente definen un "período" en el que se garantiza que cada programa se ejecutará al menos un poco, y el sistema dará un "corte" de ese período a cada programa.

Para utilizar esta estrategia, debe aprender a equilibrar entre la capacidad de respuesta y el rendimiento de dos principios: qué tan rápido puede responder a las cosas y cuánto puede hacer en general.

La idea general es que:

 Permanezca en una sola tarea el mayor tiempo posible sin disminuir su capacidad de respuesta por debajo del límite mínimo aceptable. Decida qué tan receptivo debe ser, y luego, si desea hacer las cosas, no sea más receptivo que eso. 

El método para lograr esto es el Timeboxing, es decir, asignar un período de tiempo fijo, llamado un cuadro de tiempo , a cada actividad planificada.

Otra técnica muy útil es el Pomorado que usa un temporizador para dividir el trabajo en intervalos, tradicionalmente de 25 minutos de duración, separados por descansos cortos.

Proceso por lotes tareas similares

Si te encuentras haciendo un gran cambio de contexto, también puedes emplear otra idea de la informática: interrumpir la fusión . Las computadoras hacen esto esperando hasta un intervalo fijo y verifican todo, en lugar de cambiar el contexto para manejar interrupciones separadas y no coordinadas de sus diversos subcomponentes.

Por ejemplo, si tiene cinco facturas de tarjeta de crédito, no las pague a medida que llegan; cuídalos a todos de una vez cuando llegue el quinto proyecto de ley.

Otro ejemplo es: para evitar la distracción causada por la revisión frecuente de los correos electrónicos, revísela cada 4 horas más o menos.

En el lugar de trabajo, la celebración de horas de oficina es una forma de unir las interrupciones de los compañeros de trabajo. Las reuniones programadas regularmente son una de nuestras mejores defensas contra la interrupción espontánea y el cambio de contexto no planificado.

Resumen

Además del tipo de problema de programación que desea resolver, también debe elegir la métrica correcta para optimizar. Debido a que la métrica que elegimos afectará directamente qué métodos de programación son los más adecuados.

En informática: antes de poder tener un plan, primero debe elegir una métrica.

Aquí está la guía rápida que resume cuándo elegir cada estrategia en función de las métricas para optimizar.

Estrategias de programación

Créditos

Este artículo está inspirado en el maravilloso libro Algoritmos para vivir . Si disfrutaste este artículo, considera leer el libro que proporciona estrategias similares para

  • Parada óptima: ¿cuándo dejar de buscar?
  • Explore cosas nuevas y explote lo que funcionó mejor.
  • Clasificación
  • Almacenamiento en caché
  • La regla de Bayers: predecir el futuro.
  • Sobreajuste: cuándo pensar menos.
  • Relajación: déjalo deslizar.
  • Aleatoriedad: cuándo dejarlo al azar.
  • Redes – Cómo nos conectamos.
  • Teoría de juegos: las mentes de los demás.