R.I.P – Engenharia de Software

Atenção: Este é um post provocativo, então não se surpreenda com alguns argumentos radicais. O objetivo principal é gerar discussão e avançar a área de desenvolvimento de software.

Quando eu comecei a conhecer Engenharia de Software, era tudo lindo e maravilhoso. Eu li livros como o tradicional livro de Sommerville e toda aquela idea de fazer com que o  desenvolvimento de software chegasse mais perto das tradicionais engenharias fazia muito sentido para mim. Com isso, “ganhamos” o nome de Engenharia de Software.

Quem não lembra (ou vive no seu dia-a-dia) todos aqueles conceitos como gerenciamento de riscos, gerenciamento de mudanças, gerenciamento de projectos, gantt charts, gerenciamento de requisitos, mil e um diagramas UML, etc, etc??

Desenvolvimento de Software deixou de ser uma coisa artesanal para ser uma coisa um tanto quanto burocrática. E o que acontece quando se vira burocrático demais? Sua capacidade de reagir ao que seus clientes querem vai gradativamente diminuindo.

( Nesse momento é importante fazer uma observação para explicar que existem determinados domínios de aplicações que precisam de um controle e burocracia maior do que outros. Um software embarcado que é safety-critical precisa naturalmente de um controle e rigidez maior no seu desenvolvimento. No entanto, uma aplicação web que pode ser deployed muitas vezes ao dia e não um impacto muito grande pode muito bem ser desenvolvida sem maiores burocracias )

Bom, um grupo de pessoas já chegaram a essa conclusão lá em 2001 e eles fizeram nascer uma coisa chamada Manifest Ágil! Esses caras entenderam que existem coisas mais importantes no desenvolvimento de software do que seguir todo o conhecimento que (ainda hoje) tentamos adiquirir de outras disciplinas. Que saber porque??

Porque [praticamente] todo software é SINGULAR!!

Nas outras engenharias é claro que existem desafios, mas a maioria dos projetos como construir um ponte, ou uma casa, ou um carro é um conhecimento estabelecido. E uma vez contruido/montado o primeiro carro (que por sinal, provavelmente vai demorar mais do que os demias), se segue exatamente o mesmo processo para montar os proximos duzentos mil.

No mundo do software, a diferença é que [praticamente] todo software é Singular, [praticamente] todo software é igual ao primeiro carro que precisa ser construido. [praticamente] Todo software é único. Cada linha de código, cada classe, cada método, cada framework. Algumas coisas contribuem para isso como, por exemplo, a velocidade que surgem novas tecnologias, novas linguagens de programação, novos frameworks javascript (os frontend developers sabem do que estou falando).

O post vai ser finalizado com algumas perguntas, que podem gerar debates interessantes….

Levando em consideração que [praticamente] todo software é NOVO, faz realmente sentido tentar se parecer mais e mais com as engenharias tradicionais? Ou deveríamos achar qual é o caminho que faz mais sentido para o desenvolvimento de software  (a depender da área de aplicação?

Deveríamos nos livrar do nome Engenharia de Software? Ou faz sentido tentar se beneficiar de conceitos já estabelecidos nos outras engenharias?

Deixa aí teu comentário sobre esse tópico 😉