Como saber algorítmos de programação de computadores pode nos ajudar a ser produtivo?

Todos queremos fazer mais coisas de forma eficiente e rápida. Os computadores são os melhores. Então, vamos tentar entender alguns algoritmos de programação de computadores para ver como podemos aplicá-los às nossas vidas diárias para nos tornar mais produtivos em nossas tarefas.

Primeiras coisas primeiro! Você não quer chegar atrasado.

Como terminar antes dos prazos?

Se você estiver atendendo clientes, você gostaria de atender cada cliente o mais rápido possível. Assumindo a manutenção de cada cliente leva quase igual quantidade de tempo, então você pode ajudá-los na ordem em que chegaram. O compromisso ideal ou o tempo devido para um cliente é tão logo eles entram em sua porta.

Aplicando a mesma estratégia às tarefas:

 Você deve começar com a tarefa devido o mais rápido possível e trabalhar o caminho para a tarefa devida na última 

Esta estratégia, conhecida como Data de vencimento inicial. o que funciona melhor para minimizar o atraso. Mas, temos um problema se cada tarefa leva uma quantidade variável de tempo para ser concluída.

Como reduzir a lista de tarefas pendentes?

Voltando ao exemplo de manutenção do cutomer, se o atendimento de cada cliente demorar diversas quantidades de tempo, então você gostaria de atender a maioria dos clientes. Digamos que podemos dividir os clientes por tipo de serviço e conhecemos o tempo de conclusão típico para cada tipo de serviço. Então, a melhor abordagem seria escolher o cliente que precisa do tipo de serviço com o tempo de conclusão mais rápido.

Esta estratégia baseia-se no Algoritmo de Moore, que diz:

 Começamos como a data de adiantamento inicial - agendando as tarefas à medida que elas chegam, mas ao decidir qual tarefa fazer a seguir, escolha a mais rápida e repita esse processo. 

É como concentrar-se sobretudo na redução do comprimento de sua lista de tarefas. Além disso, cada peça de tarefa inacabada poderia ser como um carregamento de carga mental. Voar pelos itens mais fáceis trará alguma medida de alívio.

Não é surpreendente que essa abordagem seja compatível com a recomendação em Obter o livro feito para executar imediatamente qualquer tarefa que demora menos de dois minutos.

Esta é uma ótima maneira de fazer mais coisas, mas todo o trabalho não pode ser igualmente importante.

Como fazer a maioria dos objetos de valor?

Colocar um fogo real na cozinha provavelmente deve ser feito antes de "apagar um incêndio" com um e-mail rápido para um cliente, mesmo que o primeiro demora um pouco mais.

Na programação, essa diferença de importância é capturada em uma variável conhecida como weight . Quando você está passando por sua lista de tarefas, esse peso pode se sentir literal – o peso que você tira dos ombros ao terminar cada tarefa. O tempo de conclusão de uma tarefa mostra quanto tempo você carrega esse fardo, minimizando a soma dos tempos de conclusão ponderados (isto é, a duração de cada tarefa multiplicada pelo seu peso) significa minimizar sua opressão total enquanto você trabalha em toda a sua agenda.

A estratégia ideal para este objetivo é uma simples modificação do algoritmo de Moore:

 Divida o peso de cada tarefa por quanto tempo demorará para terminar e, em seguida, funcionará em ordem da maior importância resultante - por unidade de tempo para o menor. 

Por exemplo: Se você é consultor, o peso pode ser deduzido do dinheiro que você obtém. Então, simplesmente divida a taxa de cada projeto pelo seu tamanho, e trabalhe o seu caminho a partir da taxa horária mais alta para o mais baixo.

Pode ser difícil atribuir um grau de importância a cada uma das suas tarefas, mas existe uma rápida regra geral:

Apenas priorize uma tarefa que demora duas vezes mais se for duas vezes mais importante.

Mas se as tarefas dependerem de outras tarefas, isso nos trará novos problemas.

Como desatar?

Podemos ficar presos às vezes porque uma tarefa importante não pode ser feita até que uma tarefa menos importante seja concluída. Na informática, esse problema é chamado de inversão de prioridade.

A inversão de prioridade é um cenário problemático no agendamento em que uma tarefa de alta prioridade é indiretamente antecipada por uma tarefa de menor prioridade efetivamente "invando" as prioridades relativas das duas tarefas.

A solução prática para este problema é Priority Inheritance . Isso é

 Desprezar é tratar as coisas sem importância como sendo tão importantes quanto o que quer que esteja bloqueando. 

Como trabalhar com tarefas recebidas contínuas?

A vida pode ser fácil, se tivermos uma lista finita de tarefas. Na realidade, não é. Se as tarefas forem jogadas em momentos imprevisíveis. A abordagem eficiente é trocar tarefas que é conhecida como preempção em ciência da computação.

A préemissão é o ato de interromper temporariamente uma tarefa que está sendo realizada por um sistema informático com a intenção de retomar a tarefa mais tarde.

Ele pode ser usado no agendamento de trabalho como

 Cada vez que entra um novo trabalho, divida sua importância pela quantidade de tempo que demora para completar. Se a figura for maior do que para a tarefa que você está fazendo atualmente, mude para a nova; de outra forma ficar com a tarefa atual. 

Mas a preempção não é gratuita. Ele vem ao custo da mudança de contexto.

Como ocorre o burnout?

Toda vez que você troca de tarefas, você paga um preço, conhecido em ciência da computação como uma mudança de contexto. Quando um processador do computador desloca sua atenção para longe de um determinado programa, sempre há uma certa quantidade de despesas gerais necessárias. Ele precisa efetivamente marcar seu lugar e deixar de lado todas as informações relacionadas a esse programa. Então, precisa descobrir qual programa será executado em seguida. Finalmente, deve retirar todas as informações relevantes para esse programa, encontrar seu lugar no código e entrar em marcha. O swiching de contexto rápido repetido causaria a performance do computador para se degradar ou desmoronar. Esse fenômeno chamou-se de bater .

Você pode pensar que é como fazer malabarismos com um conjunto de bolas. Se o malabarista toma mais uma bola do que ele pode lidar, ele não deixa cair aquela bola; ele cai de tudo .

Thrashing é um estado humano muito reconhecível. Se você já teve um momento em que você queria parar de fazer tudo apenas para ter a chance de escrever tudo o que deveria fazer, mas não podia poupar o tempo, você bateu. Você está realizando nada. Você se sente exausto e queimado.

Como reduzir o ônus da multitarefa?

Algumas dicas para reduzir o ônus da mudança de contexto.

Não mantenha seus pratos cheios.

A melhor estratégia para fazer as coisas pode ser, paradoxalmente, diminuir a velocidade. Uma maneira de evitar a debater antes de começar é aprender a arte de dizer NÃO.

Às vezes, a ordem aleatória é melhor do que a programação perfeita

Uma das maiores fontes de metawork em contextos de mudança é o próprio ato de escolher o que fazer a seguir. Por isso, mesmo fazer tarefas na ordem errada é melhor do que não fazer nada em todos os termos.

Pensando nas mesmas linhas, a equipe do núcleo do Linux, há vários anos, substituiu seu agendador por um que era menos "inteligente" sobre o cálculo das prioridades dos processos, mas mais do que compensou por menos tempo para calculá-los.

Por exemplo: Em vez de responder primeiro aos e-mails mais importantes – o que requer uma avaliação da imagem inteira que pode demorar mais do que o trabalho em si – talvez você devesse apenas respondê-los em ordem aleatória, ou na ordem em que aparecem na tela .

Compromete-se a fazer uma única tarefa por um período mínimo de tempo

Computador Os agendadores do sistema operacional geralmente definem um "período" no qual cada programa é garantido para executar pelo menos um pouco, com o sistema dando uma "fatia" desse período para cada programa.

Para utilizar esta estratégia, você deve aprender a equilibrar entre dois princípios de capacidade de resposta e throughput : com que rapidez você pode responder às coisas e quanto você pode fazer no geral.

A idéia geral é que:

 Mantenha-se em uma única tarefa o maior tempo possível sem diminuir sua capacidade de resposta abaixo do limite mínimo aceitável. Decida o quão sensível você precisa ser - e então, se você quiser fazer as coisas, não seja mais receptivo do que isso. 

O método para conseguir isso é Timeboxing, ou seja, alocar um período de tempo fixo, chamado caixa de tempo , para cada atividade planejada.

Outra técnica muito útil é o Pomorado que usa um temporizador para quebrar o trabalho em intervalos, tradicionalmente de 25 minutos de duração, separados por intervalos curtos.

Processo em lote tarefas semelhantes

Se você se encontra fazendo muita mudança de contexto, você também pode empregar outra idéia da ciência da computação: interromper o coalescimento . Os computadores fazem isso esperando por algum intervalo fixo e verificam tudo, em vez de mudar o contexto para lidar com interrupções separadas e não coordenadas de seus vários subcomponentes.

Por exemplo: se você tiver cinco contas de cartão de crédito, não as pague à medida que chegam; Cuide-os de uma só vez quando chegar a quinta conta.

Outro exemplo é – evitar distrações causadas pela verificação de emails com freqüência, verificá-la a cada 4 horas ou mais.

No local de trabalho, o horário de funcionamento é uma forma de coalescer as interrupções dos colegas de trabalho. Reuniões regularmente agendadas são uma das nossas melhores defesas contra a interrupção espontânea e a mudança de contexto não planejada.

Resumo

Além do tipo de problema de agendamento que você deseja resolver, você também precisa escolher a métrica certa para otimizar. Como a métrica que selecionamos afetará diretamente quais abordagens de agendamento são melhores.

Em ciência da computação: antes de poder ter um plano, você deve primeiro escolher uma métrica.

Aqui está o guia rápido que resume quando escolher cada estratégia com base em métricas para otimizar.

Estratégias de agendamento

Créditos

Este artigo está inspirado no livro maravilhoso Algorithms to live by . Se você gostou deste artigo, considere ler o livro que fornece estratégias similares para

  • Parada ótima – Quando parar de olhar?
  • Explore novas coisas e explore o que funcionou melhor.
  • Classificação
  • Cache
  • Regra de Bayers – Previsão do futuro.
  • Overfitting – Quando pensar menos.
  • Relaxamento – Deixe-o deslizar.
  • Randomness – Quando deixá-lo ao acaso.
  • Rede – Como nos conectamos.
  • Teoria dos jogos – As mentes dos outros.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *