Você não é um Engenheiro de Software
Há alguns anos eu estava aqui a pensar sobre o que é desenvolvimento de software na verdade. Há uma quantidade enorme de metáforas à respeito disso:
- David Gries diz que escrever software é uma ciência (1981).
- Donald Knuth diz que é uma arte (1998).
- Watts Humphrey diz que é um processo (1989).
- P. J. Plauger e Kent Beck dizem que é como dirigir um carro, no entanto eles chegam à conclusões opostas (Plauger 1993, Beck 2000).
- Alistair Cockburn diz que é como um jogo (2002).
- Eric Raymond diz que é como um bazar (2000).
- Paul Heckel diz que é como filmar “Branca de Neve e os Sete Anões” (1994).
- Fred Brooks diz que é como a agricultura, caçar lobisomens ou se afogar com dinossauros em um poço de piche (famoso pela frase “quanto mais programadores há em um projeto, mais ele demorará”) (1995).
Quais são as melhores metáforas?
Na minha opinião, a melhor de todas é a de que a de que programação é como cuidar de um Jardim, que nem diz Andy Hunt e Dave Thomas. Este texto vêm abordar justamente esta idéia. Espero que vocês gostem…
Você NÃO é um Engenheiro de Software.
Você não constrói arranha-céus. Você não constrói pontes.
Você planta jardins.
Você é um Jardineiro de Software.
Você tenta planejar seus jardins com um nível de detalhe de forma que você conheça onde cada folha estará posicionada antes de você plantar ums simples semente? As pessoas esperam estimativas (ou são promessas em sua organização?) em exatamente quantas flores terão florescido no prazo de um ano? Você têm bônus vinculados à isso? Coisas que seriam perfeitamente sensatas para o planejamento de um arranha-céus parecem um pouco ridículos quando você está falando sobre jardins.
Você têm provavelmente uma boa idéia de como seu jardim deve parecer daqui uma semana. Você pode até ter uma idéia aproximada da forma que você espera que o jardim será, em um ano a partir de agora. Mas, você não têm a mínima idéia de onde cada ramo, folha, caule e flor estará daqui um ano e, se você disser que sabe, você estará somente chutanto um palpite.
Se você estivesse construindo uma ponte ou um arranha-céus e você me dissesse que, antes de começar, você sabia exatamente como ele ficaria depois de construído - eu acreditaria em você. Se você me dissesse que sabia - usando alguma forma de insana de precisão - quanto tempo levaria para chegar ao status “acabado” - eu acreditaria em você de novo. É assim que engenheiros fazem. Diga-me a mesma coisa sobre seu jardim e vou dizer “Aham Cláudia, senta lá!” Diga-me que você vai fazer o jardim crescer mais rápido contratando mais jardineiros, e eu vou rir de você!
Então, por que tantos jardins falham e, no entanto, tantos arranha-céus são sucesso? Com poucas exceções, a técnica para construir um arranha-céus é semelhante, esteja você na Europa ou em Singapura. Jardins não funcionam dessa maneira. Cada jardim é diferente porque o ambiente em si é diferente. Mesmo jardins que estão um ao lado do outro podem ter solos totalmente diferentes. É por isso que mesmo a menor empreiteira pode provavelmente construir a mesma ponte que uma grande empreiteira, mas sua companhia não pode fazer os seus jardins crescerem no mesmo calibre que os jardins do Google.
Lembre-se do tempo que alguém na sua empresa usou sem sucesso uma metodologia Ágil de jardinagem, e então saiu por aí dizendo que era o adubo de cavalo que não funciona? Bem, adubo de cavalo faz jardins crescerem, apenas não foi suficiente para salvar o seu jardim. Seu jardim provavelmente estava morto antes do seu início - uma vítima do clima da sua organização. Você estava tentando crescer uma floresta no deserto? Você não pode simplesmente plantar as mesmas plantas que o Facebook, o Twitter ou Flickr e esperar que elas criem raízes, independente da qualidade do seu jardineiro ou do clima da sua organização.
Ao contrário de um arranha-céus, crescerão ervas daninhas no seu jardim. Ele nunca estará ‘terminado’. Só porque você parou de gastar dinheiro com isso não significa que ele está terminado. Se você parar de carpir seu jardim para retirar as ervas daninhas, elas provavelmente irão sufocar seu jardim e, em breve, replantar o jardim parecerá mais fácil do que fazer a poda. O ambiente em torno do seu jardim estará sempre mudando, e será cada vez mais difícil manter vivo um jardim que foi deixado de lado.
Na maioria dos paises, os engenheiros precisam de uma licença para construir uma ponte. Jardineiros não têm nenhum órgão de controle de qualidade. Infelizmente, a qualidade dos seus jardineiros terão uma maior influência no sucesso dos seus jardins que qualquer outro fator - então é melhor você ser bom em separar o joio do trigo. Apenas um jardineiro experiente sabe reconhecer outro jardineiro quando ele o vê. Alguém que só têm feito gestão de jardins não têm idéia do que eles deveriam estar procurando (embora eles não saibam disso). Então, se você não for um jardineiro, mas necessita contratar bons jardineiros, encontre rapidamente um jardineiro experiente que você confia para testar seus candidatos. Você não pode aprender jardinagem em uma sala de aula, por isso lembre-se de se focar nos jardins que seus candidatos criaram anteriormente, e não em quanto de teoria de jardinagem eles aprenderam na escola (que de toda forma não serão aplicados às condições climáticas que dos jardins que você cuida).
A metáfora de engenharia teve seu tempo ao sol, e talvez possa ter sido usado no passado no sentido se ser preciso, mas agora só serve parar ajudar a pessoas não técnicas à ter espectativas irreais sobre a forma como o software é construído.
Eu sou um Jardineiro de Software.
E assim você é!
Texto original: You are NOT a Software Engineer!
Fontes: Programming is Gardening Cuidando do seu “jardim” de softwares