Desde que comecei a me envolver com a Engenharia de Software, sempre foi difícil definir ou classificar os “skills” necessários a um engenheiro de software. E esse tipo de discussão sempre me levava para a área de saúde, mais especificamente para a medicina. Afinal de contas, são tantas especializações, tantos “microuniversos” que se assemelhava muito ao que vemos na Engenharia de Software (ES).

A ES é um bicho estranho, muito estranho. Primeiramente por conta do produto principal gerado por ela: o tal do software, conhecido por alguns por SISTEMA.

É… esse mesmo sistema que “resolve” sair do “ar” justamente quando chega a sua vez de ser atendido no banco ou logo depois de passar longos 47 minutos no telefone esperando pela atendente da sua empresa de telefonia móvel. Mas como assim “saiu do ar“? Desde quando ele voa?

Software é um produto intangível e muito difícil de mensurar o valor, ou melhor, de precificar e de calcular o retorno no investimento da sua construção, manutenção e evolução. Por ser intangível, ele também tende a viver mais do que os que o construíram.

Outro ponto de muito investimento, por parte tanto da academia quanto da indústria é justamente a construção do software. Alguns pregam que a depender do “tipo” do software, as técnicas, ferramentas, processos e papéis envolvidos mudam. Por tipo quero dizer: software empacotado, o tradicional, também conhecido por shrink-wrapped software; software como serviço (SaaS); sistemas críticos; de tempo real; larga escala; sistemas operacionais; aplicativos móveis; mainframe; entre tantos outros.

A quantidade de disciplinas envolvidas na ES é muito grande e vai desde disciplinas puramente técnicas da Ciência da Computação até questões mais humanas, envolvendo Psicologia, passando por questões legais e tributárias. O mundo é software hoje em dia e tudo é software! Absolutamente tudo!

Conforme disse Douglas Rushkoff: Program or Be Programmed.

Com este cenário bastante diversificado de emoções, desafios, ações, papéis e pessoas envolvidas, eu comecei a pensar no que seria um conjunto de perfis que poderiam ser trabalhados por alguém que quer ser um bom profissional neste mundo da Engenharia de Software, que entenda das peculiaridades que envolvem a construção do software (ou serviço, ou aplicativo, ou seja lá o que for, desde que seja programável). Já via que existem algumas listas e partilho de boa parte das opiniões delas. A que mais gostei foi a de Steve Wedig, que eu utilizei como inspiração e base para sugerir a minha. Também separei, inicialmente, por tópicos que acho importantes e dentro deles sugeri alguns livros que podem ajudar neste entendimento. Adicionei às sugestões de Steve, as versões em português ou versões “alternativas” para os tópicos propostos.

Além disso, trouxe alguns livros que tratam de tecnologias específicas, mas que as técnicas abordadas neles, podem ser levadas para outras tecnologias

Eu dividiria a disciplina de desenvolvimento de software em verticais, que seriam:

Os livros com * são de alguma tecnologia específica, mas que as técnicas podem ser utilizadas em qualquer linguagem, por exemplo.

Alguma sugestão para complementar a lista?

Artigo originalmente publicado por Vinicius Cardoso Garcia