26/06/2022

Capítulo 03 – Ferramentas pragmáticas básicas

You need to be comfortable beyond the limits imposed by an IDE. The only way to do this is to keep the basic tool set sharp and ready to use.
Dave Thomas e Andy Hunt

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.

Acessar livro

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.

Se conhecimento é o elemento fundamental de trabalho de um programador pragmático, então, deve ser seu interesse primário utilizar técnicas e ferramentas que o ajude a o desenvolver e manter. 
0
Considerações?x

Arquivos em texto simples

Os autores defendem – e eu concordo – que a melhor representação explícita para conhecimento é texto simples. O argumento central dessa ideia é que, diferente de representações binárias, texto simples mantem combinados conteúdo e significado, independentemente de qualquer ferramenta de parsing.
0
Considerações?x

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

Os autores também defendem – e eu concordo – que programadores pragmáticos devem dominar a utilização de utilitários em linha de comando. Afinal, embora ferramentas gráficas, como nossas IDEs, facilitem e, até certo ponto, colaborem para a produtividade, acabam limitando nossa capacidade de atuação.
0
Considerações?x

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

Pessoalmente, considero a utilização do 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”.
0
Considerações?x
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.

Acessar vídeo

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

Se há algo comum na rotina de programadores pragmáticos, além de produzir código novo, é “procurar e resolver” bugs em códigos existentes. Por isso, obviamente, a combinação de mindset e ferramentas certas para esta atividade alavancam a produtividade.
0
Considerações?x

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.

Outro ponto importante é que, segundo os autores, programadores pragmáticos, por seu alto senso de responsabilidade, entendem que o bug está no código que mantêm, dificilmente em dependências tais como bibliotecas de terceiros ou frameworks.
0
Considerações?x

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

Se nossos designs ficam explícitos em códigos armazenados em textos simples, requisitos em descrições sucintas e documentações em arquivos estruturados, então é importante que aprendamos a utilizar efetivamente editores e ferramentas para manipulação de texto.
0
Considerações?x

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

Ler capítulo

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.

As sugestões de Thomas e Hunt são bastante efetivas e aplicáveis e, adotadas, realmente produzem efeitos positivos – seja na condução do trabalho, seja no desenvolvimento profissional. De fato, programadores que conseguem “conectar ideias e ferramentas” como os autores defendem acabam aprendendo e aplicando meios efetivos que melhoram a produtividade. O desafio é a disciplina…
0
Considerações?x

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.

Acessar livro

Core Design Principles for Software Developers

Nessa palestra,  Venkat Subramaniam compartilha insights poderosos sobre o que eu consideraria “design pragmático”.

Acessar vídeo

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.

Compartilhe este capítulo:

Compartilhe:

Comentários

Participe da construção deste capítulo deixando seu comentário:

Inscrever-se
Notify of
guest
3 Comentários
Oldest
Newest Most Voted
Feedbacks interativos
Ver todos os comentários
Tales Jardim
Tales Jardim
2 anos atrás

Estou adorando essas resenhas de cada capítulo do livro. Simplesmente sensacional

Filipe
Filipe
2 anos atrás

Muito bom !

trackback

[…] 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 […]

Elemar Júnior

Sou fundador e CEO da EximiaCo e atuo como tech trusted advisor ajudando diversas empresas a gerar mais resultados através da tecnologia.

Simplificamos, potencializamos e aceleramos resultados usando a tecnologia do jeito certo.

Elemar Júnior

Sou fundador e CEO da EximiaCo e atuo como tech trusted advisor ajudando diversas empresas a gerar mais resultados através da tecnologia. Clique no botão abaixo para conhecer mais alguns conteúdos desenvolvidos por mim:

55 51 9 9942 0609  |  me@elemarjr.com

55 51 9 9942 0609  |  contato@eximia.co

55 51 9 9942 0609  contato@eximia.co

3
0
Quero saber a sua opinião, deixe seu comentáriox
()
x