Como conduzir pré-mortem eficazes
Não pergunte ao grupo o que pode dar errado
Um algoritmo é um processo definido a ser seguido para alcançar o resultado desejado. Grande parte de nossas vidas é decidida por algoritmos. Saber quais algoritmos seguir pode resultar em decisões mais eficientes e eficazes.
Recentemente reli Algorithms to Live By, um livro de Brian Christian e Tom Griffiths sobre como algoritmos podem nos ajudar a ser mais eficazes em nossas vidas. Tendo aprendido programação no ano passado, aproveitei mais desta vez.
Um algoritmo é um processo, e você pode pensar nele como instruções a seguir para completar uma tarefa. Por exemplo, aprender a somar números é um algoritmo simples 1.
Instruções mais complexas podem calcular resultados para outros problemas da vida. Taxas de juros, rankings de buscas na web ou feeds de redes sociais são todos baseados no resultado de algoritmos. O livro aborda muitos desses algoritmos e os relaciona a problemas que você pode enfrentar pessoalmente.
É muito difícil explicar todos os algoritmos que eles mencionam 2, então, em vez disso, farei pequenos destaques de alguns e geralmente me concentro nos pontos qualitativos, não quantitativos.
Além disso, a maioria dos algoritmos depende de certas suposições; em vez de especificar isso toda vez, considere isso dado ao ler. Vou adicionar algumas das suposições em notas de rodapé para quem se interessar.
Alguns dos problemas discutidos incluem:
Vamos analisar nosso primeiro algoritmo, sobre quando você deve parar de trabalhar em um problema.
Se você está avaliando opções (candidatos a emprego, ofertas de moradia, vagas de estacionamento etc.), há um equilíbrio entre o tempo que você gasta escolhendo e a chance de escolher a “melhor” opção. Isso é conhecido como secretary problem - Suponha que você estivesse contratando uma secretária, quantas entrevistas deveria fazer para ter a melhor chance de encontrar a melhor?
Nesse caso, há uma porcentagem precisa a ser usada. Você deve esperar depois de ver 37% do grupo de candidatos e então escolher o próximo melhor candidato que encontrar 3. Por exemplo, se você teve 100 candidatos, espere depois de ver os primeiros 37 e então escolha o próximo que seja melhor do que todos os que você viu até agora.
Esse é o ponto matematicamente ótimo com maior chance de escolher a melhor pessoa para o trabalho. Se você parar cedo demais, pode perder alguém na entrevista mais tarde. Se parar tarde demais, perde tempo 4.

Semelhante à situação ótima de parada, há um equilíbrio entre coletar informações (explorar) e aproveitar (explorar). Suponha que você esteja em um cassino e queira decidir quais máquinas jogar. Você quer maximizar seus ganhos, mas não sabe as chances exatas das máquinas (se soubesse, jogaria a melhor).
Neste caso, existe um número, conhecido como Gittins Index, que te dá a máquina ideal para jogar 5. Se você souber o número de vitórias, perdas e quanto valoriza os ganhos futuros, pode calcular valores precisos para cada escolha. Algumas propriedades interessantes:
Algumas outras implicações relacionadas:
O livro deu alguns exemplos de algoritmos de ordenação, que são comumente usados em programação. Por exemplo, retornar resultados de busca exige uma ordenação dos mais relevantes para você.
Vou deixar discussões mais detalhadas sobre algoritmos de ordenação para outro dia, já que eles exigem compreensão time complexity. Aqui estão algumas lições qualitativas:
A ideia de ter um cache é ter 1) uma pequena seção de memória rápida (armazenamento) e 2) uma grande seção de memória lenta. Depois, alternamos entre as duas dependendo da nossa intenção. Isso nos permite obter tanto alguma velocidade quanto algum tamanho para a atividade que desejamos.
Por exemplo, você pode ter suas roupas favoritas no guarda-roupa e as que não usam no sótão. Você teria acesso rápido às peças que mais usou, mas ainda teria espaço para aquele suéter de Natal feio, se quisesse. Guardar cache parece complicado, mas você vai perceber que fazemos isso naturalmente na maior parte do nosso dia a dia.
Como você decide quais itens devem ser colocados na seção rápida e quais na seção lenta? Você pode colocar itens aleatórios, o item mais novo, o maior item etc.
Nesse caso, manter os itens mais usados recentemente na seção pequena e rápida é a escolha ideal, devido a algo conhecido como temporal locality. É mais provável que você precise de algo novamente que tenha usado recentemente. Por exemplo, o Google Drive destaca seus arquivos usados com frequência para acesso rápido.

A maioria de nós precisa decidir como priorizar os itens da nossa lista de afazeres. Isso geralmente exige fazer um equilíbrio entre resposta (quão rápido você responde) e throughput (quanto você pode fazer).
Um ponto chave sobre escalonamento e priorização é definir sua métrica de meta, pois isso determina qual algoritmo você quer usar 7. Maximizar a resposta vem às custas do quanto você pode fazer:
Se quiser minimizar o atraso máximo de todos os seus projetos 8, o Earliest Due Date O algoritmo diz para você começar com o projeto que vence mais cedo.
Se você quiser minimizar o tempo total de conclusão, o Shortest Processing Time O algoritmo diz para você fazer a tarefa mais rápida primeiro.
Se suas tarefas não forem iguais em importância, então colocar um peso em cada tarefa e calcular a proporção de peso ao longo do tempo necessário vai te ajudar a decidir qual tarefa realizar; escolha o projeto com maior peso ao longo do tempo.
Na prática, isso significa que provavelmente vale a pena conversar com seu gerente sobre como a equipe pensa sobre essa troca e qual método eles preferem que você adote.
Há outro conceito importante na programação, que é a ideia de context switching - sempre que você precisa alternar entre tarefas. Troca de contexto é tempo perdido, pois não é trabalho real, mas consome tempo e esforço da sua parte.
Por exemplo, se você estava escrevendo um e-mail e foi interrompido por uma mensagem no Slack, leva tempo para vocês responderem à mensagem do Slack e depois lembrarem o que queriam fazer para o e-mail.
No pior dos casos, a troca de contexto vira thrash, quando você não faz nada produtivo porque está ocupado demais só mudando. Maneiras de evitar thrash incluem:
Explicar a regra de Bayes provavelmente exigiria um artigo sozinho, então vamos encarar isso como uma regra que ajuda a prever a probabilidade de algo acontecer 9. O que os autores querem destacar é que isso depende da distribuição de onde seus eventos vêm. Existem três distribuições principais a considerar:

A maioria de nós provavelmente já ouviu falar de teoria dos jogos, que é uma forma de pensar qual é a estratégia ideal ao jogar um jogo. Alguns destaques:
Além dos algoritmos mencionados acima, os autores também abordam:
No geral, achei que o livro valia a pena para ter uma visão geral das formas interessantes como algoritmos aparecem na vida. Eu realmente entendi melhor depois Mas estou aprendendo um pouco de ciência da computação, então tenha isso em mente. Também gostaria que tivessem incluído exemplos mais práticos 10, já que tentar aplicar as descobertas à vida pode ser difícil quando você precisa partir de suposições diferentes.
Fácil o suficiente ensinar crianças, dizendo para memorizar somas e quando carregar um número, mas surpreendentemente não é óbvio ao tentar implementar em um computador, veja full adder logic gate ↩
Você pode dizer que, quando eu explicar tudo, é como se eu tivesse explicado written the entire book ↩
The percentage is 1 divided by e, euler’s number. A chance não muda conforme o número de candidatos cresce, mas muda conforme diferentes informações que você recebe ↩
O problema da secretária base assume que você não pode voltar para um candidato que rejeitou, mas há variações que se assemelham um pouco mais à vida real. ↩
Esse problema é insolúvel se as probabilidades de um retorno em uma máquina mudarem ao longo do tempo; essencialmente significando que ela é insolúvel. Alguns problemas são insolúveis. Nesses casos, relaxar algumas restrições e aceitar soluções que sejam “suficientemente próximas” nos ajuda significativamente a estruturar o problema. ↩
Ou March Madness, para os americanos ↩
Apenas 9% de todos os problemas de agendamento podem ser resolvidos de forma eficiente. ↩
Ou seja, pegue todos os seus projetos atrasados e o máximo deles. Esse é o critério que você quer minimizar. ↩
Veja here para um artigo que explica Bayes. Bayes é pouco intuitivo (pelo menos para mim), o que também significa que é bom saber ↩
Para ser justo, há uma boa quantidade de informações nas notas de rodapé que elaboram mais ↩
What did I miss?
Discordâncias ponderadas, evidências adicionais e outras formas de ver o problema são bem-vindas.
Carregando a discussão…
Prefere uma conversa privada? Enviar e-mail para Leon.