Arquiteto ou Engenheiro de software?

Quais diferenças entre um Arquiteto de software e um Engenheiro de software?

É comum programadores com muito experiência e que busquem um "próximo passo" na carreia, se depararem com cargos de Arquiteto de software e Engenheiro de software e a menos que já tenham buscado esclarecer o que é cada um deles, a dúvida de qual das duas profissões seguir, será algo um pouco chato de se esclarecer. Principalmente por encontrarmos poucas definições claras do que é um Arquiteto de software e/ou Engenheiro de software e suas atuações.

Antes de prosseguir, precisamos entender a origem dos nomes das duas profissões. Os termos foram extraídos da construção civil. Porém, diferente do que acontece na construção civil, arquitetos e engenheiros de software, ainda "deixam de colocar a mão no cimento". Explicarei!


Engenharia de software

De acordo com Friedrich Ludwig Bauer 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 em máquinas reais" (veja mais aqui). 

Então, engenharia de software é a área da computação voltada a especificação, desenvolvimento e manutenção de cada componente interno de um sistema de software utilizando-se de padrões de projetos e boas práticas. Na prática, a atuação principal do Engenheiro é nos requisitos funcionais do projeto de software. É também responsabilidade dos Engenheiros, aplicar o uso de padrões de projetos.

Arquitetura de software

De acordo com o SEI (Software Engineering Institute), Arquitetura de software se preocupa com a estrutura ou estruturas de um sistema, com todos os elementos de software vendo e tendo suas propriedades vistas por todos os outros elementos e relacionamentos (veja mais aqui).

Então, Arquitetura de software é a área da computação voltada a definição dos componentes de software, propriedades externas, e relacionamento com outros softwares. O termo também se refere à documentação da Arquitetura de software do sistema. Com o objetivo de facilitar a comunicação entre stakeholders, registrar decisões acerca do projeto, e permitir o reuso dos componentes e padrões entre projetos. Na prática, a atuação principal do Arquiteto é nos requisitos não funcionais do projeto de software. É também responsabilidade do Arquiteto de software a definição de padrões de arquitetura

E onde fica o desenvolvedor?

Bom, sabemos que o Arquiteto vai "definir na interação entre os componentes e sistemas, documentar os sistemas e trabalhar nos requisitos não funcionais" e sabemos que o Engenheiro vai "desenvolver especificar e desenvolver os componentes com base no negócio e nos requisitos funcionais". O desenvolvedor vai codificar as funcionalidades dentro dos componentes, utilizar as documentações e especificações para codificar a integração entre os sistemas e interfaces definidas pelos Engenheiros e Arquitetos.

No ínicio do artigo mencionei que no mundo do software, diferente da construção civil, Arquitetos e Engenheiros precisam colocar a mão na massa. Isso acontece porque, diferente da construção civil, bibliotecas, frameworks e tecnologias surgem a todo instante. É responsabilidade dos Arquitetos e Engenheiros, validarem tecnologias que serão aplicadas dentro do software. Na construção civil, cimento, martelo, e tubulações novas, não surgem a todo momento (tubos e conexões, é tigre). Uma vez que uma marca é consolidada e possui um preço atrativo, essa é utilizada constantemente sem previa validação de outras alternativas. Já no mundo do software, existem diversas tecnologias pagas ou gratuitas e a cada dia surgem mais, então os Arquitetos e Engenheiros precisam garantir que estão utilizando as melhores tecnologias possíveis, para aquele Software.

É isso ai, espero ter sido claro. Eu mesmo já me confrontei com essas questões um dia.