Em 1973, Peter Drucker [1] identificou uma categoria de trabalho na qual as pessoas passaram a ser chamadas de “trabalhadores do conhecimento”. Diferente de outros trabalhadores, o principal material de trabalho é algo intangível: o intelecto próprio de cada um. Os desenvolvedores de software certamente estão classificados como tal e, conforme os demais trabalhadores do conhecimento, seu trabalho inclui inovação, aprendizado contínuo e geração de informação.
Um trabalhador braçal, diferente do trabalhador do conhecimento, tem como característica a repetição. Por exemplo, numa linha de montagem, o mesmo movimento é repetido inúmera vezes. Em outro exemplo, o pedreiro repete o procedimento de colocação de um tijolo, um após o outro. Em especial, o desenvolvimento de software é não repetitivo na sua essência. O computador é justamente uma ferramenta criada para evitar repetições de cálculos. Em código não existe “copiar e colar”, quando um programador faz isso, é porque está programando errado. De fato, a criação do software é sempre um processo único a cada produto.
Quando ensinamos programação a alguém que está aprendendo pela primeira vez, uma das dificuldades do aluno está na percepção sobre o processo criativo que existe ao programar. Cada vez que um problema é exposto, não existe solução única, o resultado vai depender da criatividade de quem implementa. Não basta esse aluno ter feito todos os cem exercícios da lista, pois na prova sempre haverá uma questão nova que depende da sua criatividade para propor uma solução. Ao corrigir, não existem duas provas iguais (a não ser em caso de cola), mesmo que esses alunos só saibam comandos básicos. Cada um dará nomes diferentes às variáveis, a condição do loop varia, em uns a atribuição vem antes, em outros a condição é que vem primeiro, etc.
O trabalho de um programador pode ser comparado ao de um artesão. Cada programador, usando ferramentas conhecidas, desenvolve um produto que é único. Esse produto é bastante maleável, talvez comparável ao da argila molhada. O manifesto ágil [2] também reflete essa ideia ao afirmar que “indivíduos e suas interações estão acima de processos e ferramentas”. Estendendo essa linha, foi criado até o manifesto do software artesanal [3].
CONCLUSÃO
O desenvolvimento de software traz algumas características inerentes a todo trabalhador do conhecimento: processo criativo, intangibilidade em boa parte desse processo, complexidade intelectual, alta variabilidade e imprevisibilidade, e múltiplas soluções corretas para o mesmo problema (por isso não deveria ser comparado à Engenharia Civil). Quando o movimento ágil surgiu, as pessoas estavam tomando consciência dessas características da nossa área e resolveram ir contra a ideia de um processo unificado para todo o desenvolvimento de software, que era a onda vigente naquela época. Era o início do surgimento de uma sequência de quebras de paradigmas, tais como: entrega em iterações curtas; times auto-organizados; e escopo flexível.
Nos próximos posts pretendo abordar alguns desses pontos.
[1] Drucker, Peter F, 1973. Management: Tasks, Responsibilities, Practices. Harper & Row, New York
[2] https://agilemanifesto.org/
[3] http://manifesto.softwarecraftsmanship.org