Hackers & Painters: Big ideas from the computer age

Postado por Osvaldo Santana

Hackers & Painters: Big ideas from the computer ageEsse livro é uma coletânea revista de alguns artigos escritos por Paul Graham, desenvolvedor famoso, entusiasta da linguagem de programação Lisp, fundador de uma empresa de e-commerce adquirida por muito dinheiro pelo Yahoo! na era pontocom e o primeiro a sugerir o uso de técnicas bayesianas no combate ao spam.

Paul Graham também é conhecido por ter opiniões radicalmente diferentes daquelas que pregam as idéias de “fábricas de software”, “engenharia de software” entre outras tantas que tentam transformar o desenvolvimento de software em algo que pode ser mecanizado e rigidamente estruturado.

O autor desse trabalho defende a idéia de que o desenvolvimento de software se assemelha mais à arte do que à engenharia e demonstra, ao longo de seus artigos, as razões que justificam essas idéias.

Concordando com ele ou não, é um livro que trás a reflexão sobre o desenvolvimento de software e só por isso já o transforma em leitura obrigatória para todo profissional dessa área.

Boa parte do material contido no livro pode ser visto diretamente no site do autor. O livro apenas reedita os artigos do site unindo-os alguns deles em apenas um capítulo e também apresenta alguns ensaios inéditos e dados mais atualizados.

Para comprar: Hackers & Painters: Big ideas from the computer age


Expressões Regulares - Uma abordagem divertida

Postado por Osvaldo Santana

Expressões Regulares - Uma abordagem divertida (ISBN 8575221000)Essa será, sem sombra de dúvidas, a resenha de livro mais complicada de se escrever que já apareceu por aqui. As razões para isso são:

  1. O autor deste livro é um grande amigo meu.
  2. O meu nome consta na lista de agradecimentos da obra.
  3. Eu sinto uma inveja infinita da forma com que o esse autor escreve.
  4. Eu tenho uma edição do antigo guia de referência, que deu origem à este livro, autografada pelo autor.

O livro chegou pra mim via correio e a ansiedade fez com que o prazo de entrega da Livraria Cultura se tornasse insuportável. Mas agora que estou com ele em mãos e já tive tempo de avaliar o material e até mesmo ler uma parte significativamente grande dele eu me sinto apto a fazer essa resenha.

Primeiro de tudo o livro é pequeno (em dimensões e volume) e após folheá-lo eu pude notar que boa parte do antigo guia de referência de expressões regulares estava lá. Ótimo sinal. O guia de ER é o melhor que eu tenho.

As novidades ficam por conta de revisões e correções de “bugs” e à algumas extensões ao capítulo que trata das ferramentas. A forma de utilizar expressões regulares em novas linguagens importantes, como Ruby, fazem parte desta nova obra.

A capa é muito legal e representa fielmente a forma com que o conteúdo é exposto no livro. Diversão. Expressões Regulares são um assunto chato e por vezes complexo e a forma com que o Aurélio lida com isso é impressionante. Ele realmente transforma em diversão.

Costumo ouvir que é fácil escrever de maneira didática sobre um assunto que você domina. Eu discordo disso porque eu, modestia à parte, entendo bem de Python e não consigo escrever da mesma maneira. Outros dizem que a prática da escrita a aprimora mas também acho isso bobagem porque eu e o Aurélio costumamos escrever em quantidades muito semelhantes (ele só me ganha nesse livro :) ).

Mas deixando a rasgação de seda de lado e voltando ao livro eu posso afirmar que esta obra faz parte da minha lista de “Leitura Obrigatória” que eu vinha publicando até pouco tempo atrás.

Na verdade eu acho que esse livro deveria ser dado por empresas da área de informática a seus funcionários porque as expressões regulares são uma ferramenta extremamente útil para todo tipo de profissional de nossa área, podendo ser usada por administradores de rede, e programadores.

A diagramação da editora Novatec, como sempre, é primorosa e o artifício das ilustrações melhoram ainda mais a linguagem do livro.

Aliás, eu preciso deixar aqui os meus parabéns para a editora Novatec e a sua política de apoio aos autores nacionais. O Rubens Prates (dono da editora) é o tipo de brasileiro que deveria ser usado como exemplo de empreendorismo num segmento de mercado tão importante e tão pouco valorizado pelo nosso povo. Eu só acho que ele deveria publicar um livro sobre Python na editora dele :P (além do guia que já foi publicado e atualmente saiu de circulação)

Uma outra observação para a Novatec fica por conta da distribuição: eu moro em Recife, uma das maiores cidades do nordeste brasileiro, e não pude encontrar o livro em nenhuma livraria daqui onde temos a Saraiva mega-store e a Livraria Cultura mega-store (entre outras).

Para comprar (não perca tempo): Expressões Regulares - Uma abordagem divertida.


Fundamentos do desenho orientado a objetos com UML (Fundamentals of Object-Oriented design in UML)

Postado por Osvaldo Santana

Fundamentals of Object-Oriented design in UMLComo eu já havia comentado na minha resenha anterior (Padrões de Projeto) este livro foi fundamental para o meu entendimento sobre programação orientada à objetos. De todos os livros que considero leitura obrigatória este entrou na lista este entrou na lista mais por “gratidão aos serviços prestados” do que por ser um livro “matador”.

É bem provável que existam livros que tratam sobre o desenho orientado à objetos que são mais completos do que este mas esse me cativou pela forma como foi escrito. Ele é um livro que trata de assuntos realmente chatos e complicados de se explicar usando uma dose muito sutil de bom-humor.

Em um dos capítulos o autor, Meillir Page-Jones, lista uma série de erros comuns que são cometidos por programadores de primeira viagem e explica porque esses erros ocorrem. O exemplos citados por eles são bastante capciosos e em alguns casos a gente consegue perceber que estão errados mas não conseguimos imaginar como consertaríamos esses erros. Neste caso então ele nos acompanha passo a passo até a solução do problema listado.

Outros assuntos tratados de forma mais séria e profunda no livro são relacionados à idéia básica da POO que é desenvolver sistemas com:

  • Alta coesão
  • Baixo Acoplamento

Desenvolver componentes de software com alta coesão, baixo acoplamento e pensando em interfaces no lugar de tipos (como sugerido no livro Padrões de Projeto) certamente farão com que seus sistemas fiquem extremamente robustos. Se eles forem acompanhados de Testes automatizados (XP), refatorados constantemente (Refatoração) não consigo pensar em um adjetivo melhor do que “perfeito” para atribuir ao seu trabalho.

Eu li a versão traduzida para o português deste livro. A tradução foi feita pela editora Makron e achei a tradução razoável. Não é uma boa tradução mas a leitura e o entendimento do assunto não fica comprometida por causa dela. Me parece também que a versão traduzida saiu de circulação e por essa razão pode ser mais complicado achar a versão traduzida para comprar.

Para comprar: Fundamentos do desenho orientado a objetos com UML ou Fundamentals of Object-Oriented design in UML


Padrões de Projeto (Design Patterns)

Postado por Osvaldo Santana

Padrões de Projeto (Design Patterns)Programo computadores há muito tempo. Quando iniciei minha ‘carreira’ usava a linguagem BASIC e LOGO em meu MSX Expert (BASIC) e um TK3000 (LOGO). A linguagem BASIC causou alguns estragos gigantescos em meu cérebro tornando superdifícil aprender a programar em uma linguagem estruturada futuramente. Foi difícil eu perder o meu apego ao “GOTO”.

Mas depois de ter lido um livro sobre Turbo Pascal, cujo nome do autor infelizmente não me recordo, todo o que eu já tinha visto sobre o paradigma procedural se encaixou magicamente e aquilo começou a fazer sentido pra mim. Eu gosto de chamar isso que aconteceu comigo de ‘iluminação’.

Então esse livro sobre Turbo Pascal me iluminou para que eu compreendesse o paradigma procedural.

Mas então os programadores gritaram: “Faça-se a OO” e a OO “se fez”. Lá fui eu novamente correr atrás de entender como essa tal de “Programação Orientada a Objetos” funcionava.

Li muita coisa. Vi muito hype em cima do assunto. Vi muita mágica sendo feita e muita mágica sendo desfeita usando-se POO. Mas aquilo ainda não fazia muito sentido pra mim.

Depois de ler um livro chamado “Fundamentos do Desenho Orientado a Objetos” (que falarei no futuro) o meu cérebro começou a criar as conexões entre todo o conhecimento que eu já tinha adquirido. Mas faltava a faísca para produzir o fogo que me iluminaria.

Com a popularização da linguagem Java vários hypes surgiram (e continuam a surgir) e entre eles estavam os “Design Patterns“. Nem dei muita atenção porque as ‘modinhas’ produzidas no universo javanista são tão duradouras quanto a fama que o grupo musical “Polegar” teve no passado.

Certo dia um livro chamado “Design Patterns” caiu em minhas mãos e resolvi folheá-lo. Notei que não tinha uma única linha de código em Java e então percebi que aquilo ali já existia antes mesmo de Java ter começado a lançar suas modinhas.

Comecei a ler o livro e em uma passagem encontrei uma frase que dizia algo parecido com: “No desenvolvimento Orientado à Objetos não desenvolva para tipos, desenvolva para interfaces.” e aí então a faísca foi lançada.

Devorei o livro rapidamente e adquiri uma cópia (uma tradução para o português que estava muito mais barata do que o original em inglês) e devorei o conteúdo em uma semana.

O livro tem alguns capítulos que introduzem o conceito de padrões, fala sobre o modelo MVC (Model-View-Controller) para separação dos componentes de uma aplicação e fala sobre alguns conceitos de OO que são bem interessantes. A partir daí temos os padrões que são catalogados de maneira a possibilitar uma rápida consulta.

Cada padrão acompanha uma descrição, um diagrama explicativo, os casos de uso, os casos onde não devemos usar tal padrão, o relacionamento desse padrão com outros e exemplos em Smalltalk e C++.

Esse livro não é adequado para pessoas que ainda não conhecem os conceitos básicos da Programação Orientada a Objetos pois ele assume que o leitor já conheça ao menos o básico sobre este assunto.

A cópia traduzida que eu tenho é editada pela Bookman e tem uma tradução excelente onde os nomes dos padrões são preservados na forma original em inglês.

Esse livro é um clássico da literatura técnica e algumas pessoas o chamam de “GoF” que é a abreviação para “Gang of Four“, uma alusão aos quatro renomados autores do livro: Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides.

Para comprar: Padrões de Projeto ou Design Patterns


Programação Extrema Explicada (Extreme Programming Explained)

Postado por Osvaldo Santana

Programação Extrema Explicada (Extreme Programming Explained)Nunca gostei de estudar metodologias de desenvolvimento. Também não gostava das chatíssimas aulas de “Análise de Sistemas” que costumava assistir no curso de Processamento de Dados que fiz. E eu nunca gostei de estudar isso porque tudo que as metodologias diziam nunca se aplicava ao universo onde eu trabalhava.

Eu não trabalhava com coisas muito especiais. O tipo de software que eu costumava desenvolver era tão comum quanto os atuais sistemas de gestão para os quais essas metodologias de desenvolvimento dizem servir.

Um exemplo da minha experiência com essas metodologias ‘tradicionais’ tem relação com a análise de requisitos. Eu estudava tudo o que era dito sobre análise de requisitos e tentava aplicar no meu dia-a-dia mas nada funcionava. Eu me sentia o mais burro dos programadores por não conseguir fazer isso dar certo. Achava que o problema era comigo até perceber que o problema era do cliente.

A análise de requisitos ensinada pelos métodos convencionais não funciona porque nenhum cliente tem noção do que realmente precisa em um sistema. Eu percebi que o cliente sabe o que é o problema mas não sabe como resolvê-lo e em alguns casos ele sequer tem uma noção exata do problema a ser resolvido.

Se nem o cliente sabe do que precisa, para que serviria a melhor das análise de requisitos? De nada. E esse é o caso que se aplica apenas à análise de requisitos. Acredite em mim: eu tenho um caso desses para cada uma das etapas do desenvolvimento de uma aplicação.

Uma coisa que as metodologias de desenvolvimento atuais também assumem, de maneira errada, é que um software é algo estático. Isso é uma visão extremamente equivocada do que é software. Software é flexível, software muda (o tempo todo), software evolui, software cresce…

E é nessa diferença fundamental que a metodologia XP (eXtreme Programming) se difere das outras. Ela assume que software muda.

A algum tempo atrás, comecei a trabalhar em uma empresa que utilizava a metodologia XP para desenvolver alguns projetos. Por curiosidade fui dar uma olhada nessa metodologia e descobri que finalmente alguém, que trabalhou com desenvolvimento de software, tinha criado uma metodologia que reflete a realidade de um ambiente de desenvolvimento de software.

O livro “Programação Extrema Explicada” foi escrito por Kent Beck que é o idealizador dessa metodologia e que é o ponto de partida para muitos outros livros que detalham essa metodologia. É um livro curto, de leitura leve, e que fala direto com o desenvolvedor utilizando histórias reais no lugar de usar documentos formais e densos e chatos.

Ao mesmo tempo é um livro que ‘cutuca’ o desenvolvedor e levanta polêmicas sobre assuntos que deveriam ser debatidos por todos os desenvolvedores que já trabalharam em projetos que fracassaram.

Atualmente estou lendo a versão em português, traduzido pela editora Bookman, mesmo já tendo lido a versão original em inglês. Usando XP e relendo o livro estou confirmando que aquela sensação agradável que tive ao ler essa obra pela primeira vez é verdadeira.

Por essa razão considero a leitura desse trabalho obrigatória para todos os desenvolvedores, mesmo para aqueles que já conhecem XP e não gostam de algumas de suas propostas.

Para comprar: Programação Extrema Explicada - Acolha as mudanças ou Extreme Programming - Embrace Change


Leitura Obrigatória (Refatoração / Refactoring)

Postado por Osvaldo Santana

Quem me conhece sabe que adoro livros. Compro eles aos montes e quase sempre tenho uma fila interminável de leitura que nunca diminui.

Gosto de livros porque encontrei neles a melhor forma de aprender as coisas. Nunca gostei de salas de aulas e treinamentos mas sempre fui muito curioso e graças ao meu pai, que sempre lia muito, descobri que, no meu caso, a melhor forma de aprender algo novo é através dos livros.

Tendo lido vários livros eu consegui montar uma lista de livros que todos os desenvolvedores de software deveriam ler ou ao menos ter em suas prateleiras para uma rápida consulta. Sei que o Google é uma excelente ferramenta de ajuda, mas em certas situações o bom e velho livrinho repousado ao lado do teclado nos inspira para o trabalho como se fosse alguém lhe dizendo o que deve ser feito.

Como a lista é razoavelmente grande e pode crescer ainda mais vou adotar a tática de postar um de cada vez (talvez dois, quando tiver mais inspirado) aqui no blog. Assim que um novo post surgir eu irei fazer uma cópia do conteúdo dele para na página de resenhas que ficará permanentemente nos links da barra lateral.

A lista que será apresentada não é definitiva e é formada por livros que eu li e por alguns que eu ainda não li mas sei que são indispensáveis. Também tenho livros que não servem para serem lidos de ponta-a-ponta, mas simplesmente para uma rápida referência.

Refatoração (Refactoring) - Martin Fowler

Refatoração (Refactoring)Esse livro é fundamental para aqueles programadores que começaram há pouco tempo a trabalhar mas que já possuem alguns sistemas desenvolvidos. Refatorar um sistema é o nome que o autor dá à prática de aprimorar e/ou mudar o código da aplicação sem que o comportamento visível dela se altere. O funcionamento da refatoração é assegurado pela construção de testes para o sistema que será refatorado. Esses testes servem justamente para garantir que o funcionamento do sistema não será modificado pela refatoração.

O capítulo que fala sobre ‘bad smells‘ já vale a compra do livro. É um dos melhores apanhados de problemas encontrados em código fontes existentes. Depois de falar sobre os ‘bad smells‘ do código um amplo catálogo de táticas e técnicas para refatorar o sistema é fornecido.

Este livro pode ser usado para a leitura de ponta-a-ponta e deve ser guardado para referências futuras. A tradução para o português foi feita pela editora Bookman e é muito caprichosa (como quase todas as traduções da editora).

Para comprar: Refactoring e Refatoração