Arquivo da tag: Brian Christian

Algorithms to Live By – Brian Christian and Tom Griffiths (11/2017)

Este livro tem basicamente a mesma proposta de “Os Botões de Napoleão“: trazer para o grande público a aplicação prática de conceitos, teorias e descobertas científicas. No caso do Algorithms, o foco é em matemática, estatística e tecnologia da informação (três áreas de conhecimento muito interligadas) e em como alguns modelos e algoritmos podem ser aplicados na vida cotidiana de qualquer pessoa (isto quando já não são aplicados, intuitivamente e involuntariamente).

Cada um dos capítulos, dedicado a um algoritmo / modelo, inicia-se com a descrição do problema e os fatos históricos que levaram especialistas a se debruçarem sobre a questão em busca de alguma solução. Isto quando a solução é possível, pois em alguns casos existem problemas insolucionáveis (ou intratáveis).

Como contratar a melhor secretária, encontrar a pessoa com quem voce quer passar o resto da sua vida ou a melhor vaga para estacionar envolvem optimal stopping. Escolher entre um novo restaurante (com 50% de chances de se surpreender, mas também com 50% de chances de se decepcionar) ou um restaurante do qual voce ja gosta pode ser tratado com “explore/exploit” (explorar/usufruir). Aumentar as chances de ganhar num caça-níqueis, ou mesmo descobrir qual o tratamento mais eficiente para uma doença envolvem randomização e probabilidades. Resolver problemas muito complexos envolvem flexibilização (mudar o problema para encontrar uma solução mais facilmente). Mais pro final do livro aparecem alguns algoritmos mais voltados para a tecnologia em sí (em networking, por exemplo, que explica muito bem o funcionamento da internet).

O livro também inclui entrevistas com pessoas que participaram (e eventualmente participam) da resolução do problema (as vezes existe a melhor solução encontrada até agora, o que não quer dizer que seja a solução definitiva). Tudo muito bem documentado: entre notas (que poderiam estar no rodapé), referências, bibliografia e índice remissivo, são quase 100 páginas (1/3 do livro).

Dentre todos os modelos apresentados dois me atraíram mais a atenção: buffering e sorting (ordenação).

Buffering é um termo que não tem tradução para o português, mas explicando rapidamente: é uma área intermediaria (memória) do computador onde ficam alocados os programas mais usados (ou efetivamente em uso) afim de otimizar a inicialização (ou uso) destes programas. O HD de um note, além de ter uma quantidade grande de informações, o que dificulta a busca de algum dado específico, também é um mecanismo mais lento. Por isto existe a memória RAM (um dos vários tipos de buffer) que trabalha mais rápido que um HD, porém tem um custo por capacidade bem maior, e é onde os programas em uso são carregados. Com a internet funciona da mesma forma: toda vez que um site é visitado o browser salva alguns “pedaços” do site (imagens, mídias, etc.) localmente no computador. Da próxima vez que voce acessa o mesmo site, ele compara o que está na sua máquina com o que está no servidor (usando nome, data de atualização, tamanho de cada um dos arquivos, etc.) e baixa novamente somente o que foi alterado, usando as cópias locais para reduzir o tempo de carga da página.

Normalmente mantêm-se na area de buffer aquilo que foi usado recentemente, pois a chance de ser usado de novo é sempre maior do que algo que não é usado há muito tempo. Todo mundo tem aquela roupa que usa ao menos uma vez por semana, e aquela outra que a gente até esquece que tinha. E é ai que um buffer faz diferença: ao invés de perder tempo arrumando ou procurando em todo o seu armário, quando voce mantêm uma parte pequena para roupas que voce usa normalmente, tanto a organização quanto a procura se tornam mais rápidas. Eu sempre fiz isto e nunca liguei o ato a um algoritmo em específico (e eu sou da área de TI!).

No caso do sorting (ordenação, classificação), o livro traz um principio interessante: ordenar algo que você não vai precisar pesquisar é perda de tempo (despedício de recursos), procurar algo que não está ordenado é apenas ineficiente. Em computação sempre é necessário fazer escolhas que envolvem recursos limitados (bem, é assim na vida também). Eu sempre tive uma mania de manter as coisas bem organizadas: livros, CDs e DVDs em ordem alfabética, por exemplo. Só que cada vez que ia organizar algo, perdia uns 30 minutos, as vezes bem mais, sendo que mesmo fora de ordem, em alguns poucos minutos eu conseguiria encontrar um item. O investimento, não vale o retorno.

Comecei, desde que li este trecho, a não mais classificar e-mails, por exemplo. É um hábito que eu tenho desde que comecei a usar e-mail (há uns 20 anos atrás). Só que os mecanismos de busca dos aplicativos evoluiram tanto nos últimos anos que é bem mais fácil usá-los do que classificar itens no computador (e-mails, arquivos, etc.). E posso dizer, por esta pouca experiência, que realmente os 30 minutos perdidos por dia no trabalho, só classificando e organizando os e-mails, são um completo desperdício de tempo, já que raramente eu preciso procurar algo em e-mails antigos, e quando preciso, o próprio aplicativo faz isto em poucos segundos.

Be happy 🙂