Quais são as principais diferenças entre engenheiros de software e programadores? [fechadas]

103

Quais são as principais diferenças entre engenheiros de software e programadores?

grokus
fonte
1
Joel já fez esta pergunta Esta não é uma pergunta fácil de responder e não tenho certeza se há uma resposta clara. Mas eu sei que Joel já fez essa pergunta.
Denaem 17/09/10

Respostas:

80

Ao contratar, procuramos uma distinção entre alguém que possa nos ajudar a arquitetar nosso sistema, definir processos, criar especificações técnicas, implementar refatoração avançada etc. e alguém que nos ajudará a concluir as tarefas de programação em uma lista de verificação . Acredito que você poderia chamar o ex- engenheiro de software e o último, programador .

Nicole
fonte
10
Você pode esclarecer, você contrata ambos (para trabalhos diferentes) ou apenas os engenheiros de software?
Jaap
2
Você poderia chamar o ex-engenheiro de software, mas eu não. Como Brendan está enganando, esse é normalmente o trabalho de um arquiteto de software.
JᴀʏMᴇᴇ 5/05
131

Depende da empresa, pois não acho que exista uma estrutura legal para impor uma denominação ou outra, ou pelo menos não que eu saiba e isso pode variar de país para país (por exemplo, o uso do termo "engenheiro" é realmente bastante regulamentado na França, mas existem variantes permitidas para os casos "abusivos").

Dito isto, a tendência geral é assim:

  • Uma posição de programador é geralmente a de um profissional contratado para produzir o código de um programa de computador . Isso implica que você sabe escrever código , pode entender um algoritmo e seguir as especificações . No entanto, geralmente pára por aí em termos de responsabilidade.

  • Uma posição de desenvolvedor é geralmente considerada um supertipo da posição de programador . Ele abrange as mesmas responsabilidades, além da capacidade de projetar e arquitetar um componente de software e de escrever a documentação técnica para ele (incluindo especificações). Você é capaz de - pelo menos tecnicamente - liderar outras pessoas (programadores), mas não necessariamente uma equipe (aí vem a confusão ...)

  • Uma posição de engenheiro normalmente implica que você é um desenvolvedor que possui um tipo específico de diploma , algum conhecimento de engenharia e é capaz de projetar um sistema (como em: uma combinação de componentes / módulos de software que juntos formam uma entidade de software inteira) . Basicamente, você vê uma imagem mais ampla e é capaz de projetar e explicar e separá-lo em módulos menores .

No entanto, tudo isso é discutível e, como eu disse, não há requisitos legais de que conheço os países dos EUA / Reino Unido . Dito isto, na França, você só pode se chamar de "engenheiro" se for de uma escola de engenharia (reconhecida pela Comissão dos Titãs dos Engenheiros ou algo assim). Você não pode dizer que possui um "diploma de engenheiro", mas pode dizer que possui um "diploma de engenharia" se tiver estudado uma disciplina que se enquadra no portemanteau de engenharia e tecnologias.

Pode ser que alguns países tenham uma distinção semelhante, eu realmente não sei.

Voltando ao título de engenheiro de software ... Certa vez, um dos meus professores disse à nossa turma - e com razão - que não existe, atualmente, a chamada "engenharia de software" . Porque projetar algo (seja um edifício, um veículo, uma peça de hardware ...) significa que você é capaz de visualizar seu design e todas as fases de sua produção, e prever com precisão os recursos necessários e, portanto, o custo da produção.

Isso é verdade para a maioria das "verdadeiras" disciplinas de engenharia. Existem flutuações, é claro (os preços dos materiais variam ao longo do tempo, por exemplo), mas existem modelos teóricos muito finitos (para design e planejamento) e modelos empíricos (para manter praticamente qualquer um dos primeiros dentro de restrições acessíveis) que permitem prever a data de término de um projeto e seu uso de recursos.

O principal problema do software é que ele ainda não está lá. Queremos ter como objetivo a engenharia de software, mas ainda não estamos lá. Porque temos um ambiente muito fluido e dinâmico, restrições muito variáveis ​​para projetos e ainda falta de maturidade em retrospecto em nossos processos. É claro que poderíamos dizer que somos melhores nisso (embora altamente discutíveis com dados concretos), mas só o fazemos desde os anos 60 (projetos anteriores eram na verdade mais próximos de computadores apenas de hardware, portanto mais próximos da engenharia real, ironicamente). ) Considerando que construímos veículos a motor por mais de um século, veículos em geral por alguns milênios e construímos por ainda mais milênios (e temos sido muito bons nisso de fato em alguma parte do mundo, fazendo você se sentir como se "

Nós não conseguem prever sistematicamente os prazos com precisão , que não conseguem prever sistematicamente os custos com precisão , que não conseguem identificar de forma sistemática e mitigar os riscos inerentes e externos de forma eficiente e determinística . O melhor que conseguimos fazer é produzir estimativas de estimativa suficientes e acomodar alguns buffers, enquanto tentamos otimizar os processos para reduzir ciclos e sobrecarga.

Mas veja, talvez seja isso que é a engenharia. E é isso que, quando alguém fala sobre um "engenheiro de software", deve pensar e procurar.

Portanto, isso parece dificilmente intercambiável com o simples ato de rotinas de programação ou o ato mais avançado de desenvolvimento de aplicativos.

Ainda assim, tudo é uma questão de tendências. Ultimamente, é bastante comum ter uma equipe de desenvolvimento horizontal, onde todos na equipe são desenvolvedores de software sênior (sim, maiúsculas, porque isso nos faz sentir especiais, não é?), Sem distinção de idade real (bastante, na minha opinião) opinião) e não muita distinção de habilidades (uh-oh ...) e responsabilidades (agora que não podem ser boas, exceto puramente pelo burburinho de relações públicas).

Às vezes, também é apenas uma força de hábito e específica à cultura e ao jargão de uma indústria. Mais posições na produção de software incorporado usam títulos para engenheiros de software. Principalmente porque provavelmente implicaria que você sempre terá que lidar em certa medida com o hardware também neste campo, então obviamente lida com outros aspectos da produção e de todo o "sistema" que produz. Não apenas os pedaços que ficam loucos dentro dele. Por outro lado, você não vê realmente o termo engenheiro sendo usado em posições de produção de software financeiro. É porque é uma evolução mimética dessa indústria de um de seus antecessores (por exemplo, a engenharia embarcada encontra suas raízes na engenharia automotiva, por exemplo), ou porque eles querem apenas dar mais ou menos crédito / peso a uma posição.

E para ter certeza de perder todo mundo no meio do nevoeiro, você encontrará outros títulos misturando ambos (como "Engenheiro de desenvolvimento de software" ou "Engenheiro de software em teste"!) E outros enfatizando pontes ainda mais loucas com outros domínios ( pense em "arquiteto de software" e em como "arquitetura de software" pode ser um roubo vergonhoso de vocabulário). E faça com que eles venham: Engenheiro de Liberação, Gerente de Desenvolvimento de Mudanças, Engenheiro de Construção (que também funciona lá fora). E às vezes simplesmente "engenheiro".

Espero que tenha ajudado, embora não seja realmente uma resposta.

Ah, e isso significa que sua nova empresa está tentando atraí-lo com um novo título ou que eles realmente não se importam com títulos, ou que você realmente terá uma posição de nível superior. A única maneira de saber é ler as especificações do seu trabalho, conversar com elas e, eventualmente, tentar e julgar por si mesmo. Espero que seja a última opção e que você esteja feliz com ela (e potencialmente lucre mais com isso). ;)

haylem
fonte
12
O livro "O programador pragmático" também diz que o software não é como a engenharia. Embora você possa planejar uma casa ou um arranha-céu, uma analogia para engenharia de software dificilmente pode ser usada. Eles afirmam: o software é mais como jardinagem. Planeje o jardim, plante as plantas. Então veja o que está crescendo, remova as ervas daninhas e plante novas plantas.
Falcon
6
"Uma vez que meu professor disse à nossa turma que, atualmente, não existe a chamada" engenharia de software ". Porque engenharia significa que você é capaz de visualizar seu design e todas as fases de sua produção, e prever com precisão os recursos que você precisará ". Provavelmente isso era falso no momento em que foi escrito. Como a arquitetura, não podemos prever custos sem conhecer os requisitos (quanto custa um arranha-céu? Não vou lhe dizer qual deve ser a altura antes de começar a construir ...). Mas nós pode prever os custos mais tarde, dado um grupo de desenvolvimento de software maduro.
MSalters 8/08/11
1
@MSalters: Claro, você pode mudar isso: como na arquitetura, não podemos prever custos sem requisitos. Mas, diferentemente da arquitetura , mesmo com requisitos bem definidos (embora os nossos sejam frequentemente mais fluidos porque são mais difíceis de prever ou temos a tendência de permitir que eles mudem), não podemos prever o custo. Você pode fazer isso na engenharia normal com um nível de precisão muito preciso, e atualmente somos mais capazes de identificar custos para circunstâncias extraordinárias do que no SE. Nós só fazemos adivinhações (bastante rudes). Estamos melhorando, mas ainda são suposições.
haylem
3
@haylem: Essa é a norma no desenvolvimento de software. Mas se você trabalhou em uma empresa no nível CMM 4/5, notará que eles podem prever custos e geralmente atribuem níveis de confiança de 95% a eles. Eles entendem bem sua base de software e têm requisitos suficientes, de que os obstáculos são raros. E o custo dos obstáculos é menor quando você tem a experiência de lidar com eles.
MSalters
1
@ pcurry: note que não afirmo que seja "minha taxonomia". É comumente considerado como esse por recrutadores e folhas de pagamento corporativas, e também é como é frequentemente visto nos cursos de CS ou TI. Eles tendem a atirar um no outro. Então, acho que listei a visão adotada pelos (chamados) engenheiros de software mais do que pelos programadores (auto-descritos), obviamente. Realmente não importa como você se chama, é mais o que as pessoas o consideram que importa. E isso só importa se você se importa com esse tipo de coisa. Honestamente, pessoalmente, eu não ligo para ser um ou outro, não me muda.
haylem
81

Engenheiros de software são pessoas que trabalham em empresas que chamam as pessoas que escrevem software para elas de "engenheiros de software".

Programadores são pessoas que trabalham em empresas que chamam as pessoas que escrevem software para elas de "programadores".

Existem também desenvolvedores ou desenvolvedores de software . São pessoas que trabalham em empresas que chamam as pessoas que escrevem software para "desenvolvedores" ou "desenvolvedores de software", respectivamente.

Jer
fonte
26
Devo observar que essa resposta não foi realmente feita para ser engraçada.
Jer
15

Portanto, existe o "Engenheiro de software", o "Programador" e também o "Desenvolvedor", "Coder" e você nunca pode esquecer o "especialista em SOA"

Estes são termos de marketing para pessoas que não podem dizer algo significativo em seu currículo, como seu papel real (não apenas o cargo) em cargos anteriores.

Nos anúncios de emprego, a diferença é da pessoa de RH.

Bottom line: cada pessoa tem sua própria opinião sobre "o que faz um bom funcionário que trabalha com código", e alguns gostam de associar tais e tais habilidades com tais e tais títulos.

O que você precisa fazer? Os anúncios de emprego devem ser descritivos sobre as habilidades necessárias e os currículos devem explicar os detalhes da experiência do candidato.

Ken Egozi
fonte
10

Sem diferenças Eles são a mesma coisa. As empresas, no entanto, podem ter descrições formais de cargo usando os termos e, em seguida, pode haver algum significado específico da empresa para o termo.

GrandmasterB
fonte
8

A programação é sobre o código. A engenharia de software é sobre o produto final.

darreljnz
fonte
3

Isso realmente depende de como a empresa define as posições. Pode ser que, como engenheiro de software, você tenha mais oportunidades de decisão de design, enquanto que como desenvolvedor, eles forneceriam diagramas UML e você escreveria o programa.

Porém, não existe uma definição de conjunto real para que, com base no título, as pessoas saibam o que você faz ou qual a sua experiência.

Quando eu era arquiteto / desenvolvedor, meu título era cientista da computação, mas eu apenas dizia às pessoas que eu era programador, pois os dois primeiros não são facilmente definidos, mas a maioria das pessoas sabe o que um programador faz.

Se um título é importante para você, aceite o novo, pois o engenheiro soa mais alto que um desenvolvedor.

James Black
fonte
3

Não acho que haja "diferenças oficiais", para minha experiência que possa significar:

  • Algumas empresas usam engenheiros de software e desenvolvedores de software para se referir à mesma coisa. Eles apenas usam seu termo favorito.
  • Outro usa os dois termos para diferentes posições internas, mas os papéis variam de empresa para empresa! Em alguns casos, pode haver apenas uma diferença na função (um engenheiro de software trabalhará na manutenção e melhoria dos sistemas enquanto um desenvolvedor trabalhará no produto da empresa) ou pode ser hierárquico (o engenheiro está acima do desenvolvedor), ou mesmo o engenheiro é realmente dependente de perguntas e respostas!

Além disso, também existem termos de moda que mudam ... Primeiro, o termo era "programador", depois "engenheiro de software" e agora parece ser "desenvolvedor" ...

É melhor ler a descrição do trabalho ou alguém da empresa específica

Khelben
fonte
3

Em algumas jurisdições, "Engenheiro" carrega consigo o requisito de ser um engenheiro profissional, que possui um P. Eng. identificação entre as credenciais. No entanto, em outras áreas, pode não haver tanta diferença quanto eu era um "engenheiro de design da Softwere" trabalhando no estado de Washington há alguns anos.

JB King
fonte
2

Os engenheiros de software tendem a trabalhar em sistemas muito grandes, que levam muitos anos para serem desenvolvidos, por exemplo, 5 a 16 anos, por exemplo. Os programadores tendem a ter esse estereótipo de apenas codificação e nada mais. Mas isso realmente depende da organização em que você trabalha e de como o RH está promovendo o papel, conforme explicado acima. Eles são essencialmente a mesma coisa. Apenas não se apegue demais a um título porque é sinônimo.


fonte