Pérolas da programação

Ao ler o livro Programming Pearls (Jon Beltley)
Considero que o tema principal do Programming Pearls é como pensamos sobre problemas, os abordamos e verificamos a solução. O livro apresenta uma visão do artesanal da construção do software. Discute os cuidados que se deve ter com os pequenos detalhes, sempre com uma visão prática. Toda aquela matemática maçante de complexidade de algoritmos das aulas da faculdade se tornam questões do dia a dia a serem consideradas enquanto se está programando. A abordagem é bem "baixo nível", metendo a mão na massa do código e chegando a discutir detalhes como o tamanho do cache do processador no desempenho dos algoritmos.
Pra extrair o máximo do livro é importante ser um leitor "ativo". Tem que parar, pensar nas questões, sugerir soluções, tentar resolver os problemas. Já no início o autor me cativou com o problema da busca binária. Primeiro sugeriu a implementação do algoritmo. Deixei passar. Depois ele informa que 90% dos desenvolvedores profissionais erram ao implementá-lo. Ignorei-o. Me convenceu ao dizer que desde a primeira publicação acadêmica da idéia, demorou-se 16 anos (!) para publicarem uma implementação correta. Durante um almoço peguei um guardanapo e implementei. E não é que tinha um bug? Só o achei porque depois de tantos avisos, revisei o código com mais atenção que o de costume. Desde então tentei fazer todos os problemas e realmente aprendi muito mais assim. Pensar nas soluções dos problemas ao final de cada capítulo é uma das atividades mais importantes. Fiquei até animado em comprar outros livros de puzzles de computação como o Find the Bug: A Book of Incorrect Programs
No fundo o que mais gostei é que, em vez de um livro de programação, acabei encarando-o como um livro de quebra-cabeças (mind teasers). Ao lê-lo você está treinando resolver problemas. Sua mente vai sendo estimulada desde o texto corrido, em que o autor vai destrichando pouco a pouco os problemas e as soluções, até os problemas no final de cada capítulo. O autor acerta de novo nos apêndices finais, há um com dicas para resolver os problemas e depois outro com a solução de alguns deles. Pulei tanto entre estas seções que terminei usando 3 marcadores, um no texto corrente, um no apêndice de sugestões e outro no das soluções.
O trechos que achei campeões foram as colunas de estimativas informais (ele chama de back of the envelope) e de uso de assertions. Sempre fui fã do Design-by-Contract como técnica de controle de qualidade e de documentação, mas a discussão do Bentley envolve seu uso na construção e verificação de código. Confesso que até ler o livro nunca entendi direito a importância dos invariantes no Design-by-Contract. Só estas duas colunas já valem o preço do livro.
Em alguns momentos o livro mostra sua idade. Um exemplo é a preocupação excessiva com desempenho. Hoje em dia são raras as aplicações que desempenho é um problema. Quando o é, normalmente a melhor solução é aplicada na arquitetura do sistema, não no número de operações realizadas dentro do loop. O trecho que falava na construção de código para testar os programas ficou totalmente ultrapassada após o uso ubíquo de frameworks de testes, como o jUnit.
Já os princípios básicos demonstrados durante a leitura são resumidos no epílogo do livro, onde Jon Bentley dá seus conselhos:
- Ataque o problema correto
- Explore o espaço de soluções de design
- Preste atenção às características dos dados
- Faça estimativas informais
- Explore simetrias
- Projete usando componentes
- Construa protótipos
- Faça compromissos (tradeoffs) quando tiver que fazê-los
- Não complique
- Almeje a elegância
Saiba Mais
- Página oficial do livro. Não deixe de ler o capítulo Back of the Envelope. Acho que está todo on-line (menos os ótimos exercícios).
- Compre o livro na Amazon:
- Uma explicação simples de invariantes em loops, ou uma mais detalhada da revista C++ Report: Loop invariants
Marcadores: livros, programação
RSS Feed





