Effective Programming: More Than Writing Code

1559_thumbComo programador que sou, dedico boa parte do meu tempo escrevendo para um computador e tentando me aperfeiçoar nisto. No entanto, isto não é tudo que se espera de mim como profissional. Grande parte do meu trabalho não está relacionada ao código que escrevo. Por mais que me tornar um escritor de código melhor seja essencial para o meu trabalho, existem outros pontos tão essenciais quanto (ou mais) e é disto que Effective Programming: More Than Writing Code se trata.

Este ebook é um apanhado de posts do famoso blog Coding Horror de Jeff Atwood  — um dos meus blogs favoritos, devo admitir — é comercializado pela hyperink por justos US$ 2,99, e você ainda pode enviar para os amigos de graça no momento da compra! Claro que tudo isso é possível porque a “editora” sabe que você já tem esse conteúdo gratuitamente, mas acredite, só o trabalho de separar e organizar estes posts já vale mais do que o simbólico preço.

O Coding Horror é um blog publicado desde sempre 2004 e embora eu até já conhecesse alguns dos posts no livro, a maioria foi inédita para mim. Eu recomendo muito a leitura, mas se você não estiver planejando comprar, considero os seguintes posts altamente interessantes:

I Repeat: Do Not Listen to Your Users: Muito perceptível no dia-a-dia. Ouvir cegamente seu usuário chega a ser frustrante, mas isto não significa que devemos ignorá-lo.

Listen to Your Community, But Don’t Let Them Tell You What to Do: Sobre como receber o feedback da comunidade ao redor do seu software ou projeto.

Low-Fi Usability Testing: “You don’t know if your application truly works until you’ve performed usability tests on it with actual users.”.

I Pity The Fool Who Doesn’t Write Unit Tests: “Whenever you are tempted to type something into a print statement or a debugger expression, write it as a test instead.”

The Ultimate Unit Test Failure: Seu usuário não liga muito para sua cobertura de testes de 100%.

Meetings: Where Work Goes to Die: Me fez fazer a minha “lição de casa” antes das reuniões do trabalho.

Sharpening the Saw: “Sharpening the saw is shorthand for anything you do that isn’t programming, necessarily, but (theoretically) makes you a better programmer.”

Como o próprio título do livro já diz, eu aprendi mais do que escrever um código melhor.

Introdução à Arquitetura e Design de Software

Em virtude dos projetos em que eu estava envolvido, decidi aprender um pouco mais sobre Java. É comum no meu dia-a-dia escrever algumas linhas de código nessa linguagem — normalmente acompanhado por alguém com mais experiência do que eu. Foi exatamente um desses programadores mais experientes, o Thiago Caiubi, que me indicou o livro “Introdução à Arquitetura e Design de Software — Uma visão sobre a Plataforma Java”. Excelente indicação, por sinal.

Me lembro de ter ouvido um colega de faculdade dizer que uma das partes de se aprender uma nova linguagem é entrar no “eco-sistema” dela. Um grande acerto do livro é começar exatamente por este ponto. O capítulo 1 — A plataforma java — nos introduz ao glossário da linguagem, nos explica como a linguagem tem evoluído e mostra como funciona o sistema de especificações com a tal “burocracia”  em se incluir uma funcionalidade na plataforma. Embora seja um livro focado em uma tecnologia, fiquei impressionado com o grau de imparcialidade apresentado. Foi muito bom ver que nenhuma das ferramentas é apresentada como “a solução definitiva para o problema X” (nem mesmo o próprio Java). Os autores se esforçaram para apresentar pontos a favor e contra cada tecnologia, assim como possíveis casos de uso.

O livro se faz valer também por suas referências. Pausei a leitura várias vezes para poder lê-las e refletir com calma. Essas pausas, no entanto, se tornaram um pouco incômodas com o tempo. Porque as referências ficam listadas todas no final do livro (NBR 14724, ou parecido). Aliás, por que não colocá-las no rodapé da página?

Como a própria descrição já diz, o objetivo deste livro não é te ensinar a linguagem e sim te introduzir ao pensamento arquitetural, e de design, de software que utiliza a plataforma Java nos dias de hoje. Isso faz com que o livro aborde temas como frameworks, REST, conceitos de orientação a objetos, dentre outros. Ainda assim, enriquece estes tópicos mais “comuns” com a experiência dos autores — Não necessariamente recomendando algo, mas estimulando seu raciocínio.

Visto que a última vez que li um livro de Java foi em 2008 — durante a minha faculdade — este livro me ajudou a me atualizar com o desenvolvimento Java desta década e estudar conceitos de arquitetura e design. Não sei se o livro gerará tanto interesse aos que já tem mais experiência com a linguagem, mas acho bem possível que ele te leve a uma reflexão.

Pro Javascript Design Patterns

Mais um livro de JavaScript lido. Desta vez foi Pro Javascript Design Patterns de Dustin Diaz e Ross Harmes. Fiquei interessado pelo título logo de cara, não conseguia enxergar como certas convenções populares em  outras linguagens iriam se encaixar no estilo “diferente” do JS.

O livro cumpre bem seu papel de apresentar os Design Patterns de forma fácil e mostrar como é possível adaptá-los ao Javascript. Confesso que resisti bastante às concessões feitas para tornar possível a implementação de alguns conceitos, como namespaces, ainda que seja claro o potencial benéfico que têm.

Embora os exemplos sejam bem enfáticos quanto à separação de responsabilidades, o que já era esperado dado que o intuito é ensinar Design Patterns, fiquei incomodado com o estilo do código-fonte. Boa parte das funções e métodos são bem extensos e sem boa legibilidade. Algumas vezes eu simplesmente desisti de entender o que cada linha de código fazia e deduzi pelo nome do método. Provavelmente, não há algum problema de design neles, mas o jargão do Uncle Bob ecoou na minha cabeça algumas vezes.

Se você já não gosta de JavaScript, por qualquer motivo, provavelmente este livro não vai mudar a sua opinião. Mas, se você já conhece a liguagem, está acostumado a desenvolver tudo o que precisa sem muita orientação a objetos e separação de reponsabilidades, e já percebeu que isto não é suficiente, este livro pode te ajudar muito.

Professional JavaScript for Web Developers, 2nd Edition

Professional JavaScript for Web Developers - 2nd EditionJavascript é uma linguagem que tem se tornado cada dia mais importante. Ela percorreu um grande caminho desde os longínquos tempos em que servia apenas para validar formulários e impressionar os amigos, passando pela revolução do AJAX e interfaces ricas, até chegar nos dias de hoje com novas possibilidades do HTML5 e Node.js. Diante de todo este movimento, eu precisava aprofundar meus conhecimentos na linguagem.

Muitos são os livros que abordam o Javascript, mas o Professional Javascript for Web Developers me pareceu ser aquilo que eu precisava. Em seu índice, encontrei desde conceitos básicos, como variáveis e escopo, até outros mais novos, como Client-Side Storage.

Durante a leitura, me surpreendi ao descobrir pequenas armadilhas e pormenores interessantes mesmo em capítulos onde eu não esperava novidades. Pude entender conceitos como: O que é ECMAScript, DOM Levels, Como evitar alguns memory leaks, melhorias de performance, boas práticas, etc.

O autor, Nicolas C. Zakas, trabalhou por bastante tempo no Yahoo! como front-end engineer e contribuiu bastante para o desenvolvimento da YUI. Recentemente, ele ajudou a criar o CSSLint, uma ferramenta de qualidade de código CSS aos moldes do JSLint. Uma boa parte do conteúdo do livro está disponível online nos artigos de seu blog, vale a pena conferir.

De fato, a leitura deste livro me ajudou bastante a conseguir entender a linguagem como um todo e desenvolver boas práticas. Os dois últimos capítulos do livro (Upcoming APIs e The Evolution of JavaScript) tentam adiantar o que estava por vir, aumentando sua vida útil. Naturalmente, dado a evolução a passos largos do HTML5, a implementação de algumas features tomaram hoje um caminho diferente ou perderam parte de sua relevância visto que o livro é de 2009.

Uma atualização com as APIs e funcionalidades mais recentes seria bem vinda. Ainda assim, não perca a oportunidade de ler este livro se você, como eu, quer se aprofundar mais nas “entranhas” do JavaScript.

MockPress: TDD mais fácil no WordPress

Praticar TDD no WordPress não é trivial. Como utiliza variáveis globais, não é difícil fazer Mocks para vários objetos (o objeto $wpdb de conexão com banco de dados, por exemplo). Mas se você já desenvolveu algum plugin, sabe que é necessário mais do que os objetos globais. A todo momento, é necessário utilizar funções próprias do WordPress. O desafio é testar seu plugin sem precisar testar todo o CMS. Para resolver este problema, existe o MockPress.

MockPress é uma biblioteca de funções mock. O criador, John Bintz, fez um bom trabalho criando uma instalação fácil e uma boa documentação. O código-fonte também está muito bem escrito (e testado). Para instalar a versão mais atual, só é necessário clonar o projeto no github e adicioná-lo ao seu include_path.

Após instalado, inclua o seguinte entre os requires de seus testes:

require_once "MockPress/mockpress.php";

Pronto, agora você pode utilizar as funções do WordPress em seus testes unitários. Recomendo apenas que você dê uma lida no código-fonte para entender quais são os retornos das funções mock.

Nem todas as funções do WordPress estão presentes no MockPress. Se você precisar de alguma função adicional, recomendo que contribua com o projeto. Das duas vezes que enviei uma contribuição, foi aceita bem rápido e sem burocracia.

Lembre-se que este é um projeto ainda em estágio inicial, apesar de muito útil e quanto mais adoção houver, mais completo deverá se tornar.

Finalmente VIM

vim-editor_logoDentre todas as flamewars do desenvolvimento de software, poucas são tão antigas quanto a dos editores de texto (atualmente, editores de texto e IDE’s). De forma alguma quero tentar defender alguma bala de prata. Eu mesmo já mudei de ideia várias vezes quanto a este assunto.

Ainda estou aprendendo a usar o VIM, mas já estou colhendo os resultados deste esforço. Estou impressionado com a extensibilidade e personalização deste editor. Com certeza, é uma excelente ferramenta e tem uma curva de aprendizado fantástica (mas exige esforço, principalmente no começo). Se você ficou interessado, pode começar a aprender a utilizá-lo lendo o vimtutor (Digite vimtutor no terminal ou leia online).

Quando houverem dúvidas, é fácil encontrar informações e dicas em várias fontes. Mas, se você está começando e já leu o vimtutor, recomendo a leitura dos seguintes artigos:

Sugiro que assim que você comece a personalizar seu arquivo .vimrc, faça um backup. O Gist do github é um excelente lugar para isto (O meu já está lá). Se você tiver alguma dica ou comando que costuma adicionar ao seu .vimrc, por favor, me mande. Quanto mais dicas melhor.

A Arte do Desenvolvimento Ágil

Há muito tempo, desenvolvimento ágil é um assunto do meu interesse. Este interesse começou em 2005 quando li um e-book que explicava superficialmente o que é XP. Anos passaram, fiz faculdade, aprendi mais sobre desenvolvimento software,  e meu conhecimento sobre este tema não passou do “superficial”.

Resolvi comprar o livro The Art of Agile Development de James ShoreShane Warden (comprei o original, mas também existe a versão em português). A descrição, na página da amazon, diz que o livro não diz apenas o que é Desenvolvimento Ágil, mas trás informações práticas para adotá-lo por todos os envolvidos no projeto. Isto era exatamente o que eu precisava.

O livro cumpre exatamente o que se propõe. É muito interessante repensar conceitos sobre qualidade e sucesso de um projeto, entender conceitos como TDDDomain-Driven DesignPair Programming,  etc. Além de saber o que é e como fazer, também fui incentivado a descobrir o porquê dos conceitos. O livro te leva à reflexão de uma forma muito interessante, pois depois das explicações, também são apresentadas contra-indicações e alternativas. O livro contém experiências dos autores e exercícios que são usados para que possamos entender melhor algumas práticas.

A cada nova prática utilizada, os benefícios são quase instantâneos. Como dito por um dos participantes da grupo de discussão do XP: O desenvolvimento ágil fez com que o desenvolvimento de software voltasse a ser divertido.