Scott Koon escreveu recentemente sobre a importância da disciplina como uma característica de desenvolvedor:
Todo mês surge uma nova linguagem ou metodologia de programaçãoseguida por devotos que a elogiam em todos os cantos da Internet. Todos prometem aumentos na produtividade e na qualidade. Mas há uma qualidade que todos os desenvolvedores bem-sucedidos possuem. Um traço que fará com que todos os projetos sejam bem ou mal sucedidos.
Disciplina.
Um desenvolvedor indisciplinado não conseguirá entregar o produto no prazo e não escreverá um código que seja fácil de manter. Um desenvolvedor disciplinado não só possibilitará o sucesso de um projeto, como também aumentará o nível de produtividade de outros. Os arquitetos e desenvolvedores de software prestam um desserviço a si mesmos quando atribuem seu sucesso a qualquer metodologia que tenham adotado. Na verdade, tudo se resume à disciplina do senhor.
É uma coincidência interessante, porque recentemente fiz uma apresentação para um grupo de desenvolvedores sobre o tópico de controle de código-fonte e me vi repetindo essa mesma palavra durante toda a apresentação: disciplina. Disciplina. Disciplina! Eu a repito porque o mero presença de um ótimo sistema de controle de código-fonte não obriga ninguém a usá-lo de forma estruturada e racional. Não. Isso requer disciplina.
E não há muitas lojas, pelo menos em minha experiência, têm a disciplina certa. Com muita frequência, o que vejo no controle de código-fonte se parece mais com esta área de trabalho do Windows:
Em vez de um conjunto estruturado e agradável de projetos com ramificações e tags lógicas, o que acaba no controle de origem é uma bola de pelo peluda de pastas com nomes malucos e sem nenhuma estrutura lógica. Exatamente como a área de trabalho do usuário comum.
E também não importa a linguagem que o senhor usa. O senhor pode escrever FORTRAN em qualquer linguagem.
Portanto, estou inclinado a concordar com Scott. Sem disciplina, coisas como ferramentas e linguagens são irrelevantes. Mas repetir a palavra “disciplina” também não é exatamente útil. Talvez o que os desenvolvedores iniciantes precisem é de um mentor de programação que não tenha medo de defender pessoalmente a disciplina necessária, alguém duro, alguém como Dave Cutlerou talvez alguém com as técnicas motivacionais certas para inspirar disciplina, como o Sargento de Artilharia Hartman:
Se as senhoras saírem da minha ilha, se sobreviverem ao treinamento de recrutas, serão uma arma. A senhora será uma ministra da morte orando pela guerra. Mas até esse dia, as senhoras são vômitos. As senhoras são a forma mais baixa de vida na Terra. Os senhores nem sequer são seres humanos. Os senhores não passam de pedaços de merda de anfíbios sem organização. Por eu ser duro, os senhores não vão gostar de mim. Mas quanto mais o senhor me odiar, mais aprenderá. Sou duro, mas sou justo. Não há fanatismo racial aqui. Não desprezo os ni**ers, kikes, wops ou greasers. Aqui os senhores são todos igualmente inúteis. E minhas ordens são para eliminar todos os não-hackers que não tenham o equipamento necessário para servir no meu amado Corpo. Os senhores entendem isso?
O senhor pode encontrar o mesmo conselho em termos mais prosaicos em Código Completo de McConnell:
É difícil explicar a um recém-formado em ciência da computação por que o senhor precisa de convenções e disciplina de engenharia. Quando eu estava na graduação, o maior programa que escrevi tinha cerca de 500 linhas de código executável. Como profissional, escrevi dezenas de utilitários com menos de 500 linhas, mas o tamanho médio do projeto principal foi de 5.000 a 25.000 linhas, e participei de projetos com mais de 500.000 linhas de código. Esse tipo de esforço requer não as mesmas habilidades em uma escala maior, mas um novo conjunto de habilidades.
Em uma retrospectiva de 15 anos de trabalho no Laboratório de Engenharia de Software da NASA, McGarry e Pajerski relataram que os métodos e ferramentas que enfatizam a disciplina humana foram especialmente eficazes (1990). Muitas pessoas altamente criativas são extremamente disciplinadas. “A forma é libertadora”, como diz o ditado. Os grandes arquitetos trabalham dentro das restrições de materiais físicos, tempo e custo. Os grandes artistas também o fazem. Qualquer pessoa que tenha examinado os desenhos de Leonardo deve admirar sua atenção disciplinada aos detalhes. Quando Michelangelo projetou o teto da Capela Sistina, ele o dividiu em coleções simétricas de formas geométricas, como triângulos, círculos e quadrados. Ele o projetou em três zonas correspondentes aos três estágios platônicos. Sem essa estrutura e disciplina autoimpostas, as 300 figuras humanas teriam sido meramente caóticas em vez de elementos coerentes de uma obra-prima artística.
A disciplina assume muitas formas e permeia todos os aspectos do desenvolvimento de software. Comece aos poucos. Digamos que o esquema de seu banco de dados contenha três colunas de tabela de chave primária denominadas list_id
, ListId
, e list_value
. Deve haver um Sargento de Artilharia Hartman em sua equipe de desenvolvimento que irá… gentilmente… lembre a equipe de que pode ser uma boa ideia corrigir problemas como esse antes de eles se institucionalizem em todos os seus códigos futuros.
O senhor não precisa necessariamente ter um código de conduta militar rigoroso e rígido. Mesmo que o a engenharia de software seja um campo jovem, há muitos convenções aceitas que compõem o desenvolvimento de software moderno. Tudo o que é preciso para se beneficiar dessas convenções é um pouco de disciplina à moda antiga. E se não começar com o senhor, então quem?