jaboot: quem puder perder (ou ganhar) 5 minutos, por favor leia
Traduzido: http://elegantcode.com/2011/06/22/why-software-development-will-never-be-engineering/ (e me desculpem a tradução)
Por John Sonmez
Sempre achei interessante quando os acadêmicos tentam quantificar as métricas generalizadas sobre desenvolvimento de software.
Coisas como: por linhas de código, haverão um número X de bugs.
Argumentos como: já foi empiricamente provado que “blah” afeta o desenvolvimento de software de alguma forma “blah”
Todos são pensamentos interessantes, mas desenvolvimento de software nunca irá se conformar em ter rígidos princípios de engenharia, assim como muitas
outras práticas de engenharia. Quanto mais trabalho na área, mais eu percebo que desenvolvimento de software não tem nada a ver com engenharia.
Só temos que assistir a algumas aulas de matemática na faculdade e só.
Contruindo pontes
Um dos principais argumentos que eu ouço as pessas fazendo é que o estado atual de desenvolvimento de software como prática da engenharia, é baseado com a sua relativa maturidade
com outros campos da engenharia.
Existe um enorme problema com essa linha de pensamento.
Esse argumento soa como isso: “Engenharia já existe fazem centenas de anos e alcançou sua maturidade até o ponto que pode ser considerada uma ciência
mensurável, mas o desenvolvimento de software só está aqui fazem poucas décadas, então é relativamente imaturo como uma disciplina da engenharia.”
Lá no fundo, esse argumento parece bacana. E certamente o desenvolvimento de software daqui a 50 anos será diferente de como é hoje.
Poxa, é muito diferente do que era há 10 anos.
Mas existe um problema. Nós construímos muito mais software do que pontes.
Deixe-me dar um exemplo que veio à tona em outra área do meu interesse… poker.
A rapidez do poker
Uma coisa interessante aconteceu na comunidade do poker fazem 10 anos; profissionais do poker com décadas de experiência começaram a serem batidos vezes e vezes por prodígios de 19 anos.
De uma perspectiva de fora, parece que o mundo do poker abriu a procura por talentos e aí está. Mas, examinando de perto, a evidência nos leva a verdade.
Antes da indústria do poker online nascer, poker era jogado em salas de carteado e cassinos nos estados onde era permitido, e ocasionalmente em pequenas
casas de jogos pelos EUA.
Um profissional de poker poderia jogar de 100 a 150 torneios por ano. A soma de todo conhecimento da comunidade do poker e o objetivo em torno do jogo era
baseado nessa base de profissionais de poker jogando dessa forma e ganhando experiência nessa faixa medíocre.
Uma vez que as salas de jogos de poker na internet começaram a abrir, as coisas mudaram e mudaram rapidamente. Agora qualquer um pode jogar poker
do seu computador de casa. Não só podem jogar poker, como também podem disputar torneios a qualquer hora do dia.
Uma lista das coisas que mais mudaram:
- As mãos são em torno de 60 a 80 por hora, ao invés de 10 a 30;
- Os jogadores podem disputar vários torneios ao mesmo tempo, não é difícil encontrar uma pessoa disputando 10 torneios;
- Os jogadores podem analisar as histórias das mãos e dados dos jogadores, através de softwares;
- A idade permitida fica na tela, teoricamente qualquer pessoa de qualquer idade pode jogar;
- Jogadores podem jogar 24 hora por dia;
- O jogador de poker online pode disputar facilmente 3000 torneios por ano, enquanto um profissional que prefere disputar em uma casa de tijolos
seria sortudo se disputasse 100 por ano
Então onde eu quero chegar com tudo isso?
O ponto é que são muitas mais mãos e mais experiência e conhecimento de poker foi obtido em 1 ano de poker online do que provavelmente toda a
história do poker antes disso. Alcançamos uma forma acelerada e pacífica de jogar que todo o conhecimento anterior de poker ficou obsoleto.
A estratégia de torneio de poker mudou. O jogo talvez tenha evoluído 500 anos no futuro em questão de 5 anos.
O mesmo aconteceu com desenvolvimento de software.
Voltando a construir pontes
Então vamos pegar aquele exemplo de poker e olhar através das lentes do desenvolvimento de software.
Vamos comparar a maturidade da engenharia para o desenvolvimento de sofware para a maturidade da disciplina da engenharia para construir pontes.
Eu acho que a maioria das pessoas concorda que construir pontes é uma disciplina muito madura da engenharia, mas muitas pessoas vão argumentar que desenvolvimento de software não é.
[color=blue]Quantas pontes você acha que já foram construídas no mundo?[/color]
Bem, existem por volta de 600.000 pontes só nos EUA, então no mundo devem haver pelo menos 10 vezes mais que isso, talvez 20.
[color=blue]Quantos softwares já foram desenvolvidos?[/color]
Esse é um número muito impreciso de se estimar, mas vamos fazer uma (porca) projeção com base em quantos desenvolvedores de software existem no mundo.
Se disséssemos que existem 12 milhões de desenvolvedores de software e cada um construiu pelo menos 3 programas, podemos estimar que muito mais
programas de computador foram escritos do que pontes foram construídas.
Meu ponto não é falar mal sobre construção de pontes, somos muito bons nisso como um todo, mas para mostrar isso coletivamente,
mesmo porque estamos construindo pontes fazem séculos, nós provavelmente devotamos uma quantia equivalente de tempo construindo software.
Essa linha de pensamento pode te levar a argumentar que desenvolvimento de software e construção de pontes são muito diferentes.
Construção de pontes tem uma lista fixa de requerimentos que são muito parecidos ou até iguais para cada ponte que se constrói, mas desenvolvimento de
software é um grande vazio de caprichos e declarações contraditórias de forma ambígua.
Eu concordo 100% com você! E na essência, esse é o meu ponto.
Desenvolvimento de software é diferente
E já foi o bastante para perceber isso. Esperar que desenvolvimento de software se transforme em alguma disciplina da engenharia como qualquer
outra disciplina da engenharia é como esperar que a água sem o pozinho da gelatina se transforme em gelatina!
Não vai acontecer!
Na minha mente, é claro que o argumento de que não lhe deram tempo suficiente é apenas uma ilusão. A natureza do desenvolvimento de software, assim como o poker online, leva-se a rápida evolução.
Considere em qual direção o desenvolvimento de software está evoluindo. Está evoluindo na direção de rígidas práticas da engenharia, ou está evoluindo
exatamente na direção OPOSTA?
Há 10 anos atrás, tentamos usar diagramas UML e ferramentas CASE para desenvolver software. Dez anos atrás, Waterfall era a modinha.
Dez anos atrás, pensávamos que no futuro teríamos programas que permitiriam a nós construir software do mesmo modo que o CAD
ajuda a construir peças de máquinas.
Não só não aconteceu. Foi completamente por outro caminho. Agora, estamos todos falando de Agile. As pessoas quase não se lembram o que ferramentas CASE são.
Agora estamos construindo software sem tentar definir a coisa toda em diagramas UML.
[color=olive]O fato é que sistemas de software são bestas incontroláveis![/color]
Na minha cabeça, tudo se resume a uma distinção. Software está vivendo, pontes não. Quando você termina de construir uma ponte, acabou o trabalho com a ponte.
Claro que alguém, provavelmente não você, vai vir com aquela história de manutenção. Claro, algumas poucas coisas vão mudar, mas para todos os propósitos, o trabalho está feito.
Na maioria dos cenários de desenvolvimento de software, esse não é o caso. Na maioria dos cenários de desenvolvimento de software, quando se lança a V1, não se está nem perto do fim.
Algumas vezes, V1 e V2 nem se parecem. Desenvolvimento de software é algo que se opera em uma coisa respirando e viva, e deixando ela continuar.
A verdade é, nós, desenvolvedores de software temos mais em comum com cirurgiões do que engenheiros.