The Pragmatic Programmer - 20nd anniversary edition Este livro é considerado por muitos – eu inclusive – um dos clássicos da computação. Dave Thomas e Andy Hunt escreveram a primeira edição deste livro em 1999 para ajudar seus clientes a escrever software de melhor qualidade e redescobrir o prazer pela programação. As lições contidas no livro tem ajudado gerações de desenvolvedores a melhorar seus skills, independente de linguagem e plataforma.
|
Depois de tratar da filosofia e da abordagem pragmática, no primeiro e segundo capítulos, Thomas e Hunt tratam das ferramentas básicas para um programador pragmático. Isso significa ir muito além das IDEs.
Os fundamentos para as recomendações dos autores tem base no entendimento de que programadores pragmáticos são, antes de tudo, trabalhadores do conhecimento. Seja na explicitação dos requisitos, na elaboração de designs, implementações ou documentações.
Trabalhador do conhecimento
Peter Drucker, pai da administração moderna classificou, há décadas, como trabalhadores do conhecimento (knowledge worker) aqueles profissionais que são valorizados por sua capacidade de atuar sobre o conhecimento de uma dada área e comunicá-lo.
É frequente que eles avancem o conhecimento geral sobre aquele assunto através de suas atividades, que incluem análise, projeto e/ou desenvolvimento.
Trabalhadores do conhecimento usam sua capacidade de pesquisa para definir problemas e identificar alternativas. Motivados por sua especialização e experiência, eles trabalham para resolver esses problemas, no esforço para influenciar as decisões, prioridades e estratégias das organizações onde atuam.
Arquivos em texto simples
With plain text, we give ourselves the ability to manipulate knowledge, both manually and programmatically, using virtually every tool at our disposal.
Dave Thomas e Andy Hunt |
Programadores pragmáticos, apontam Thomas e Hunt, usam arquivos em texto simples em diversas ocasiões, seguindo algumas convenções, como, por exemplo, markdown para escrever documentos, JSON/YAML para configurações, além, é claro, de código.
Ao longo dos anos, aliás, programadores pragmáticos têm desenvolvido ferramentas para manipular melhor texto. Bom exemplo, é a filosofia Unix.
This is the Unix philosophy: Write programs that do just one thing, but do it well. Write programs that work together. Write programs that manipulate streams of text, as this is a universal interface.
Douglas McIlroy |
Técnicas como Diagrams as Code, podem reduzir barreiras para adoção de documentações por times compostos por programadores pragmáticos. |
Linha de comando
A benefit of GUIs is WYSIWYG—what you see is what you get. The disadvantage is WYSIAYG—what you see is all you get. GUI environments are normally limited to the capabilities that their designers intended.
Dave Thomas e Andy Hunt |
Novamente, é fácil observar intimidade do pensamento dos autores com a filosofia UNIX.
Poder das aplicações de linha de comando
Os utilitários de linha de comando no Shell dos sistemas Unix-like são projetadas para operar como filters conectando-se com outras naturalmente.
Um exemplo fascinante do poder dessa abstração é narrado no artigo “More Shell, Less Egg“, que conta como Doug McIlroy recriou, combinando poucos aplicativos Linux, um programa de Donald Knuth com centenas de linhas.
tr -cs A-Za-z '\n' | tr A-Z a-z | sort | uniq -c | sort -rn | sed ${1}q
git
um bom exemplo das ideias de Thomas e Hunt. Há, sem dúvidas boas extensões para as diversas IDEs para facilitar o uso do controle de versão, entretanto, todas absolutamente “limitadas” quando comparadas o poder do utilitário em linha de comando. Ou seja, as mesmas ferramenta gráficas que “facilitam” também “atrofiam”.Declare independência de sua IDE! Saiba, pelo menos, como compilar e controlar a versão de seu código através de utilitários de linha de comando. Dedique, também, algum tempo aprendendo utilitários para manipulação de arquivos em texto simples. |
Controle de versão (ferramentas para version control)
Quando a primeira versão de The Pragmatic Programmer foi lançada, ferramentas para controle de versão ainda não eram universalmente adotadas.
Thomas e Hunt destacam a importância de utilizar adequadamente ferramentas de controle de versão, não apenas como mecanismos de “backup sofisticados”, mas como apoio a produtividade e aceleração dos fluxos de entrega. Por isso, inclusive, apontam uso para muito mais do que código-fonte.
Always use version control. Even if you are a single-person team on a one-week project. Even if it’s a “throw-away’’ prototype. Even if the stuff you’re working on isn’t source code. Make sure that everything is under version control: documentation, phone number lists, memos to vendors, makefiles, build and release procedures, that little shell script that tidies up log files—everything.
Dave Thomas e Andy Hunt |
Prioritizing Technical Debt as if Time and Money Matters Nessa excelente palestra, Adam Tornhill compartilha excelentes insights sobre como utilizar ferramentas para análise de texto e de logs das ferramentas de controle de versão para combater dívidas técnicas.
|
A combinação da utilização de arquivos em texto puro com ferramentas para manipulação e mecanismos de controle de versão potencializam a gestão do conhecimento explícito. |
Debugging
It doesn’t really matter whether the bug is your fault or someone else’s. It is still your problem.
Dave Thomas e Andy Hunt |
Programadores pragmáticos dedicam tempo para aprender a utilizar ferramentas de depuração com profundidade. Mas, de forma alguma, ignoram boas técnicas. Para mitigar as chances de ver um mesmo bug consumindo seu tempo, um programador pragmático escreve testes de unidade.
Todo bug pode ser “representado” em um ou mais testes falhando. |
Finalmente, programadores pragmáticos não entendem que podem resolver todos os problemas de código ou design sozinhos. Os autores descrevem, inclusive, uma técnica identificada como Rubber Ducking (pato de borracha), onde a ideia é que, muitas vezes, simplesmente tentar explicar um problema para um colega seja suficiente para que se encontre a causa daquele problema – sem que o colega precise dizer uma palavra sequer.
Desenvolver (e depurar) software é um “esporte coletivo”. |
Manipulação de textos
Pragmatic Programmers manipulate text the same way woodworkers shape wood.
Dave Thomas e Andy Hunt |
Também é importante aprender linguagens que facilitem manipulação de texto. Que tal Perl?
Daybooks
Programadores pragmáticos, defendem os autores, explicitam suas rotinas, incluindo atividades, materiais interessantes e aprendizados, preferencialmente, em “cadernos” escritos a mão.
Use paper, not a file or a wiki: there’s something special about the act of writing compared to typing. Give it a month, and see if you’re getting any benefits.
Dave Thomas e Andy Hunt |
A sugestão de Thomas e Hunt é que se mantenha uma espécie de diário, obviamente em arquivos texto simples, devidamente versionados, que possam ser consultados mais tarde. Os argumentos para tal prática são 1) apoio a memória (programadores, ou melhor, seres humanos esquecem); 2) permitem que foquemos em tarefas importantes agora deixando “boas ideias” registradas para o futuro e; 3) textos, em si, funcionam como rubber ducks.
Gerencie melhor o seu tempo para, de fato, gerenciar a si mesmo Carreira Tech Peter Drucker ensinou, há muito tempo, que a gestão eficiente do tempo compreende um processo de três etapas. Primeiro, é importante observar como o tempo é, realmente, empregado. Depois, aprimorar o uso do tempo “cortando” demandas improdutivas ou as menos produtivas. Finalmente, consolidar o tempo, estruturando “unidades de trabalho” com a maior duração possível.A observação do tempo fica mais fácil com a utilização de DayBooks como proposto por Thomas e Hunt |
Para pensar…
Se o primeiro e segundo capítulos tratam da filosofia e da abordagem pragmática, tratando da autorresponsabilidade e da busca pela simplicidade para mudar, no terceiro capítulo chegamos as sugestões de ferramentas que direcionam, incontestavelmente, o pragmatismo da ideologia para a prática.
Practices of an Agile Developer Outro bom livro de Andy Hunt, um dos autores de The Pragmatic Programmer é Practices of an Agile Developer – escrito em parceria com Venkat Subramaniam, uma lenda na utilização de arquivos em texto puro, incluindo ótimas apresentações. |
Core Design Principles for Software Developers Nessa palestra, Venkat Subramaniam compartilha insights poderosos sobre o que eu consideraria “design pragmático”. |
Na teoria, teoria e prática são iguais. Na prática, elas são diferentes. |
E você? Leu The Pragmatic Programmer? Tem ponderações sobre o que entendi? Algo importante que ignorei? Te convido a compartilhar suas visões nos comentários. Vamos aprender juntos!
Em breve, retomamos com ponderações sobre o capítulo 4.
Estou adorando essas resenhas de cada capítulo do livro. Simplesmente sensacional
Muito bom !
[…] da abordagem pragmática, no segundo, e das ferramentas básicas para o programador pragmático, no terceiro, Thomas e Hunt tratam da paranóia pragmática – mitigar os impactos das falhas em um […]