280px-Penrose_triangle_svg Eu uso o termo “engenharia de software”. Quem já viu uma palestra minha, leu um artigo, ou frequenta este blog sabe disso. Só que já tem um tempo que tenho um certo problema com o termo. Principalmente porque o termo “engenharia” parece carregar práticas que não se aplicam em sua totalidade à criação de algo tão etéreo como software. Nas palestras que dou sobre engenharia de software ou processos logo no começo eu deixo claro que há uma grande diferença entre o que fazemos e o que um engenheiro civil faz. Comparo a criação de software com a construção de uma ponte e também com o litigar de um caso na justiça, e ressalto que há elementos de um, como de outro, mas que ainda assim não é um, como não é o outro.

Eu mudei de idéia. Não me incomodo mais com o termo. Quem me fez mudar de idéia foi a segunda edição do livro “Agile Software Development – The Cooperative Game” do Alistair Cockburn. Estou gostando muito do livro, e ele entra nesta discussão, perguntando se desenvolvimento de software é ou não engenharia. A resposta é: sim, é; e faz sentido.

A questão é que normalmente vemos engenharia de software como “ciências aplicadas”. O engenheiro é alguém com profundo conhecimento de matemática, física, química, e talvez outras ciências naturais, que faz uso deste conhecimento para criar coisas materiais. Ele utiliza seu conhecimento de física e de determinado material para determinar o tamanho de uma viga, dada a carga que ela vai ter que suportar, por exemplo. Só que o engenheiro não é só isso.

É verdade que o engenheiro deve aplicar o conhecimento das ciências naturais para resolver os problemas que encontra. Mas isso não significa que as perguntas que ele deve fazer para resolver os problemas com o qual ele se depara vêem tão matematicamente quanto as respostas para tais perguntas, ou ainda que ele as formule sozinho.

O que normalmente acontece é que um engenheiro, independentemente da área, terá que buscar de maneira criativa a pergunta correta para resolver um problema. Somente depois de fazer a pergunta certa – e pode haver mais de uma, cada uma resolvendo o problema com diferentes graus de exatidão – é que ele vai poder aplicar seus conhecimentos das ciências exatas. Até então ele está trabalhando criativamente, utilizando o conhecimento das ciências exatas em conjunto com diversos outros, combinando-os de maneiras aleatórias, ou utilizando técnicas de análise, para chegar em perguntas candidatas, que podem ser testadas, ou não, até que uma seja escolhida como a mais apropriada. E depois de resolver a pergunta escolhida, ela pode acabar não atendendo o problema de maneira satisfatória, e o processo começa de novo, só que desta vez após um grande processo de aprendizado ter acontecido, com um engenheiro agora mais preparado, e que vai olhar suas opções com mais abrangência e profundidade do que aconteceu na primeira iteração. O conhecimento gerado com a primeira iteração, tenha ela tido sucesso ou não, não tem preço, e só pode ser ganho desta forma, e não lendo um documento com as experiências de outra pessoa, por exemplo. Experiência não se compra.

Esse processo ocorre também em grupos, onde um time de engenheiros, e possivelmente alguns não-engenheiros, se reune para discutir um problema, e como vão resolvê-lo. Nesse caso, além de todo o processo de criatividade e invenção já citado, há ainda todo o processo de comunicação, que nada tem a ver com uma ciência natural como a física ou a matemática. O problema é sempre formulado por alguém, que não é o engenheiro. Isso significa que o engenheiro nunca está só, e o processo de comunicação sempre existe. E se há comunicação estamos abrindo as portas para atividades que nada tem a ver com matemática ou física. Assuntos como negociação, persuação, hierarquia, relacionamento interpessoal, entre outros, passam a preocupar o engenheiro, que não deve mais se restringir a números, vigas, ou a resistência de materiais.

Diante desta visão, fica mais fácil dizer que engenharia de software existe, sim. Da mesma forma, temos atividades mais exatas, como a aplicação de algum padrão de projeto, ou de polimorfismo, por exemplo, mas temos também atividades relacionadas a comunicação, como reuniões diárias, e o pareamento. Nesses momentos estamos trabalhando nossa capacidade inventiva e comunicativa para buscar as perguntas corretas para atender determinado caso de uso história. Nesse cenário o engenheiro civil é mais parecido com o engenheiro de software do que pensávamos; temos os processos mais exatos, mas eles são somente parte da prática, já que temos também os processos inventivos e comunicativos.

Você, como desenvolvedor de software que me lê agora, deve à sua profissão se aprimorar em ambos os lados da sua prática, o humano, e o exato. E então poderá se qualificar como um engenheiro.

(Quantas faculdades de engenheria será que expõe os alunos a processos que não tocam somente as ciências exatas, mas tocam também em assuntos como liderança, criatividade, negociação, entre outros? Será que podemos qualificá-las como verdadeiros cursos de engenharia?)


Postado na(s) categoria(s) Arquitetura pelo Giovanni Bassi em 21 de janeiro de 2010 às 15:17 | Tags:

Comentários


janeiro 21. 2010 16:52
Rafael Noronha
Na minha visão construir software é completamente contido no que se denomina engenharia.
Dado um determinado problema e cenário, analisamos uma série de fatores, definimos uma estratégia e implementamos uma resolução para o problema.

Como sabemos, o problema desta analogia é o surgimento de conclusões equivocadas:
"Se software é que nem prédio, então se eu multiplicar o número de peões por 2, terei o produto na metade do tempo!"

http://rafanoronha.net/http://rafanoronha.net/


janeiro 21. 2010 17:21
Rodrigo Vidal
Se passarem a pensar em outra área da engenharia sem ser a Engenharia Civil, como por exemplo a área Eletrica... poderão observar que a analogia é muito mais coerente com o desenvolvimento de um software.

Muito bom o post Giovanni!

Abraço

http://rodrigovidal.net/http://rodrigovidal.net/


Brazil Fabio Lopes
janeiro 26. 2010 10:35
Fabio Lopes
Giggio, foi perfeito na sua colocação!
Quando vamos para "Escola" somos condicionados a aprender com os papas da engenharia:  Roger S. Pressman , Ian Sommeville... Depois começamos a perceber que as coisas no mundo real não são tão maravilhosas como nos ensinaram, eu acho que desafia é este ai! E o mais legal de tudo que aprendemos mais e mais e ficamos cada vez melhores.
----------------
Fazendo uma analogia:
Ontem mesmo estava conversando com grande amigo Matematico e Estatico que esta defendo sua tese de mestrado baseado na teoria de Phelps (compreensão da relação entre os efeitos de curto-prazo e de longo-prazo da política econômica), ele montou um novo modelo para comprar ações.... bom ! Resumindo trata-se de uma ciência exata e aplicada porem sem "ciências naturais", percepção humana, não existiria o modelo.  O modelo pode atender o problema de maneira satisfatória, ou não, porem se tiver que começar a aplicar de novo vai ter participado de um grande processo de aprendizado e muito mais preparado agora, e que vai olhar suas opções com mais abrangência e profundidade....... Se existir alguma semelhança com “Engenharia de Software” é mera coincidência. risos
* Engenharia de Software é a criação e a utilização de sólidos princípios de engenharia a fim de obter software de maneira econômica, que seja confiável e que trabalhe eficientemente em máquinas reais".

no site


janeiro 27. 2010 16:14
Vinicius Serpa
E talvez seja interessante também, já que estamos falando de analogias, comparar o produto da engenharia civil e o produto da engenharia de software. A civil, na maioria das vezes, constrói sistemas concretos e fixos (pontes e prédios). Já a de software constrói sistemas lógicos e adaptativos.

http://www.vinicius-serpa.com/http://www.vinicius-serpa.com/


janeiro 27. 2010 16:15
Vinicius Serpa
Lógicos, semelhante à elétrica, mas adaptativos como só ela faz Laughing

http://www.vinicius-serpa.com/http://www.vinicius-serpa.com/


Brazil Kill
fevereiro 17. 2010 08:39
Kill
Ótimo: Então chegamos a conclusão que tudo o que fazemos na vida é engenharia. E daí. O que isto mudou? A resposta é NADA. Os métodos ágeis continuam sendo apenas uma opção de desespero para quem não consegue fazer a engenharia de software evoluir.

no site


fevereiro 17. 2010 13:34
Giovanni Bassi
Kill, a sua visão restrita de mundo vai te levar até a esquina. Dali você não passa.

http://unplugged.giggio.net/http://unplugged.giggio.net/


fevereiro 17. 2010 17:59
Vinicius Serpa
Kill, a metodologia ágil nasceu em virtude do manifesto ágil. Um dos pontos principais do manifesto ágil é a importância dada às respostas sobre mudanças no projeto, e considerando que o produto que desenvolvemos é adaptativo (muda com certa frequência), esse tipo de metodologia é opção natural por equipes novas de desenvolvimento.

O fato de fazermos engenharia pode resultar em coisas muito boas para a área. Afinal, se algum dia houver reconhecimento como engenheiros (reconhecimento na lei), teremos muitos dos benefícios que essa classe demorou anos para conquistar, como piso salarial por exemplo. Mas acredito que esta discussão esteja completamente fora do escopo dessa conversa.

http://www.vinicius-serpa.com/http://www.vinicius-serpa.com/


Brazil Kill
fevereiro 21. 2010 19:21
Kill
Gostaria de estar equivocado, mas essas metodologias estão aí a 20 anos, tentam, tentam e não conseguem produzir qualquer mudança representativa. Temos que buscar princípios de engenharia, como as outras indústria fizeram...ou continuar tentando.

no site


fevereiro 22. 2010 12:56
Giovanni Bassi
"Temos que buscar princípios de engenharia"
Quais seriam tais princípios, na sua visão?

Ah, o manifesto ágil é desta década. As metodologias ágeis não estão aí a 20 anos, começaram a se consolidar enquanto algo organizado a partir da segunda metade da década de 90, e só agora estão se popularizando.

http://unplugged.giggio.net/http://unplugged.giggio.net/


Brazil kill
fevereiro 27. 2010 08:49
kill
"Quais seriam tais princípios....". Esta resposta é fácil: basta olhar em volta e observar as engenharias maduras que nos cercam. O que elas têm em comum: Alta produtividade, alta qualidade, baixo custo e uma estratégia baseada na reprodução de modelos padronizados. Em contraponto, a engenharia de software atual: Baixa produtividade, baixa qualidade, alto custo e estratégia baseada na reinvenção. O rito é: Vamos nos reunir, analisar e inventar....Só faltava dar certo. Ah, mas nas engenharias maduras nada muda e no software as regras de negócio mudam a todo momento. Esta é, certamente a falácia mais duradoura que já ouvi. Se olhar para os domínios básicos (RH, contabilidade, tributação, mercadorias, etc, etc) vemos que suas regras não mudam a dezenas de anos. Então por que temos a sensação que os requisitos sempre mudam. O que muda na verdade é o fruto das necessidades mal atendidas pela incompetência das estratégias baseadas na invenção, e nisto, RUP, XP, ágeis, tartarugas, etc são todas iguais. Aqui está o problema. Felizmente alguns autores já começam ver e já temos alguns artigos e livros que tratam disto.      

no site


Brazil Kill
fevereiro 27. 2010 09:39
Kill
Quanto ao manisfesto: É verdade, ele publicou há dez anos idéias de 20 anos. O RUP, por sua vez, é baseado nos credos "iterativo" e "incremental", inventados lá por 1975. Ufa....Quanto tinha de memoria um PC por essa época? Nem lembramos mais. Só sabemos que, enquanto o desenvolvimento de software para no tempo, ele duplica sua capacidade a cada 18 meses (lei de Moore),

no site


março 2. 2010 14:51
Giovanni Bassi
Kill, você está absolutamente equivocado. Mesmo nos domínios que vc citou, cada empresa tem suas características próprias. É por isso que uma implantação de SAP, por exemplo, custa tão caro e a SAP não pode vender uma caixinha única.
O mercado desmente você.
Além disso, há diversas teorias que demonstram que desenvolver software é uma ciência tão humana quanto é exata, e por isso sujeita aos problemas naturais de uma ciência humana. Não vou listar artigos pra vc ler aqui porque pelo visto sua opinião já está formada. Quem sabe daqui uns anos você não entende o que estou dizendo...

http://unplugged.giggio.net/http://unplugged.giggio.net/


março 2. 2010 15:12
Vinicius Serpa
Eu trabalho em uma empresa de engenharia e podem ter certeza que há muitas estimativas incorretas em qualquer engenharia. O mesmo projeto com os mesmos requisitos pode ter diferentes abordagens (e orçamentos). A dificuldade em estimar o esforço e custo de um projeto não é exclusivo da engenharia de software. E há casos que, mesmo após um produto ter sido carregado para entrega (como exemplo uma torre ou um forno), ele não está isento de sofrer alteração devido alguma mudança requisitada pelo cliente.

Resumindo, cada engenheiro (de outra área) faz estimativa sobre esforço e custo baseado em sua experiência, não há um cálculo exato. E há muitas discrepâncias.

http://www.vinicius-serpa.com/http://www.vinicius-serpa.com/


Brazil Kill
março 2. 2010 21:16
Kill
Giovanni: Se uma empresa está fazendo RH, ou contabilidade, etc, diferente da outra, a conclusão é simples: algúem está fora da lei. De qualquer forma não me surpreende sua forte opinião, pois fomos "evangelizados" para pensar assim. Manter o software no estágio que está, neste nível de custo que está, interessa a muita gente (os mesmos). Basta ver quem são os grandes consumidores de software e os benefícios que eles tiram disto. E quanto aos ERP. Por que não deram certo? A resposta também é simples: Um padrão não se impõe tão fácil. Aliás, esta empresa que você citou, de padrão, sabemos, não tem nada, é toda proprietária. Deste modo, por mais que o processo dela seja bom, ela amarra as empresa em seu modelo e as isola do mundo. Assim não dá. Se você olhar uma área que já avançou nos padrões como, por exemplo, à "RosettaNet", você verá que é bem diferente. Em resumo: Tem que fazer dentro do padrão. Se você produzir um pneu que roda como qualquer outro, ou até melhor, mas não cabe nas rodas padronizadas, você não o venderá. O software avançou muito em padrões, mas o mercado infelizmente ainda não. Temos que mudar.  

no site

Comentar


(Vai mostrar seu Gravatar)

  Country flag

biuquote
  • Comentário
  • Pré-visualização
Loading



Quem é Giovanni Bassi

Giovanni Bassi Sou uma pessoa apaixonada por tecnologia e especificamente por .Net. Sou consultor independente especialista em .Net, focado em arquitetura e melhores práticas. Tenho dezenas de artigos publicados na .Net Magazine, revista da qual sou editor técnico. Ministro palestras e cursos de vez em quando, e quando dá tempo eu respiro um pouco. Mais detalhes nesta página.

Busca

Selos

Eu vou ao TechEd Brasil 2010, e você?

MVP

MCPD

MCSD

.Net Magazine

Abaixo ao if!

Calendário

«  julho 2010  »
seteququsedo
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678
Ver detalhamento de posts no calendário

Blogs interessantes

    OPMLDownload OPML file

    Postagens recentes

    Comentários recentes

    Disclaimer / Aviso
    As opiniões colocadas neste blog são minhas e pessoais e não expressam necessariamente as opiniões de meus empregadores, pareceiros e amigos. Da mesma forma, os comentários feitos por leitores do blog não expressam a minha opinião.

    © Copyright 2010 .Net Unplugged
    Log in