Estou sendo abordado com um trabalho para escrever C incorporado em micro controladores. No começo, eu pensaria que a incorporação de programação é muito baixa na pilha de software para mim, mas talvez eu esteja pensando errado.
Normalmente, eu teria descartado a oportunidade de escrever código incorporado, pois não me considero um engenheiro elétrico. Esta é uma suposição ruim? Sou capaz de escrever um software interessante e útil para sistemas embarcados ou me chutarei por cair muito baixo na pilha de software?
Fui para a escola de ciência da computação e realmente gostei de escrever um compilador, pensando em algoritmos simultâneos, projetando estruturas de dados e desenvolvendo estruturas. No entanto, atualmente estou empregado como desenvolvedor web, o que não grita as coisas interessantes que acabei de descrever. (Atualmente, lido com questões como: "essa caixa de seleção precisa ter 4 pixels à esquerda" e "esta data está formatada incorretamente".)
Agradeço a contribuição de todos. Eu sei que tenho que tomar a decisão por mim mesmo, gostaria apenas de alguns esclarecimentos sobre o que significa ser um programador incorporado e se ele se encaixa no que eu acho interessante.
fonte
A resposta de @crosley é excelente. Você não precisa ser um engenheiro elétrico, mas conhecer o básico ajuda.
Eu não acho que você precise temer estar "muito baixo na pilha de software". Eu tive que resolver muitos problemas muito interessantes como engenheiro incorporado. Você menciona uma lista de tarefas que você gostou:
Algoritmos simultâneos - Lidar com interrupções assíncronas no nível do hardware tem tantos desafios interessantes quanto o uso de um modelo de encadeamento do SO.
Projetando estruturas de dados - Verifique. Design para compacidade e acesso eficiente.
Estruturas em desenvolvimento - Verifique. Em sistemas bare bones, você pode acabar criando um mini-OS.
Gravando um compilador - talvez não, mas você pode acabar otimizando o código de baixo nível semelhante à etapa de geração de montagem de um compilador.
Eu escolheria trabalhar em sistemas embarcados em vez de codificar UI's qualquer dia. Você nunca esquecerá a primeira vez que assistir a uma máquina começar a se mover da maneira como a programou. É muito mais gratificante do que empurrar pixels.
fonte
Como programador incorporado, meu trabalho é fazer o hardware personalizado funcionar. Normalmente, desenvolvi vários softwares em uma placa de desenvolvimento ou em uma versão anterior do hardware. Quando a nova placa entra, meu trabalho é colocar meu software na placa e demonstrar que tudo funciona.
Como quase sempre há algum problema de algum tipo, as habilidades de depuração são essenciais. Se o periférico externo não funcionar, é um chip com defeito, conexão incorreta com o chip, código de buggy ou uso incorreto do periférico no chip? A única maneira de saber é com a depuração extensiva. Isso significa estar confortável com osciloscópios, analisadores de rede, analisadores lógicos e depuradores de destino. O processo de depuração se torna quase científico. Desenvolvo uma hipótese, desenvolvo um experimento para fornecer evidências a favor ou contra minha hipótese e testei.
Ao avaliar estagiários ou novos engenheiros incorporados, essa habilidade é a mais crítica. Todo software tem problemas, mas, quando você começa a interagir com o mundo físico, a variedade desses problemas aumenta exponencialmente. A essência do meu trabalho é resolver a longa série de problemas entre conceito e realidade.
fonte
Na minha experiência, obtém-se melhores resultados no desenvolvimento de software de sistema embarcado com um chapéu de "desenvolvedor de software" em vez de um chapéu de "engenheiro eletrônico". (práticas como TDD e CI são menos comuns em engenharia de hardware)
Por outro lado, acho que a experiência de desenvolvimento para um sistema embarcado melhora o desempenho; desenvolvedor de software mais completo.
fonte
Eu estava em uma situação semelhante há cerca de 8 anos. Eu tinha naquele momento 7 anos de desenvolvimento de software em ambientes de aplicativos e servidores. Minha única experiência em lidar com hardware de baixo nível antes era escrever no Z80 assembler quando adolescente em um espectro ZX.
Certamente foi um desafio. Achei muito agradável lidar com os chipsets no assembler e certamente aprendi muito sobre hardware. Uma parte substancial da minha função foi testar o hardware usando software, aprendendo a lidar com a programação e reconhecendo que o bug do software é realmente um bug do hardware. Na verdade, às vezes, pode ser necessário bastante trabalho das pessoas de software e hardware para identificar se um bug é hardware ou software.
Um aspecto que não consegui entregar foi o trabalho do driver de dispositivo. Eu realmente nunca entendi isso, que é uma coisa que eu e o diretor da empresa nunca entendemos o porquê. Apenas se tornou um fato aceito.
Familiarizar-se com um occiloscópio e um íon de solda será essencial. lembrando que quando um técnico diz o número 26, SEMPRE significa que 0x26 é útil. Perceber que os engenheiros de hardware acham muito frustrante lidar com software, mas, em seguida, um projeto de hardware que não envolve software é chamado de cabo.
Permaneci nesse papel por 4 anos e só fui embora porque fui perseguido por uma oportunidade realmente fantástica.
fonte
Como tudo, requer uma abordagem equilibrada. Adoro trabalhar com sistemas embarcados no meu trabalho diário. Eles me fazem melhor em engenharia elétrica. A computação física e a automação são muito empolgantes. Por outro lado, criar aplicativos da Web e mexer com a computação em nuvem é incrível.
Se você fizer isso da maneira certa, o seu lado do software procurará maneiras de fazer as coisas de maneira mais inteligente e melhor. O seu lado de hardware o manterá atento aos recursos e super eficiente.
fonte
Não sou engenheiro elétrico, mas fiz uma pequena quantidade de desenvolvimento de software incorporado. O maior problema que encontrei é que tenho um conhecimento muito mais básico em matemática e, portanto, não sei como dividir facilmente uma série complexa de algoritmos matemáticos avançados em código sem muita ajuda.
Para todas as coisas em que eu precisei brincar com sinalização, ler valores de entradas, enviar dados para saídas e todo esse tipo de coisa, achei um pouco diferente conceitualmente o que faço no dia a dia como um bom desenvolvedor de software antiquado. Escrever software é realmente o que é. É quando você precisa ir além do software real que eu acho que as coisas estão ficando complicadas porque não tenho o conhecimento necessário para mexer diretamente com o hardware. Isso geralmente acontece ao tentar depurar ou testar o código. Se você tem uma cadeia de ferramentas realmente excelente, pode ter um ambiente de depuração e simulação integrado para eliminar a maior parte da dor, mas mesmo com tudo isso para ajudá-lo, às vezes você precisa voltar ao básico e testar seu código contra algum tipo de analisador, e a realidade é que a maioria das plataformas embarcadas não
Nesta perspectiva, não acho que ser engenheiro elétrico seja essencial para a programação incorporada se as tarefas forem simples e os requisitos específicos de hardware reais forem mínimos. Além disso, acho que ser um EE tornaria a vida muito mais fácil quando se trabalha em um ambiente incorporado, particularmente quando é necessária ciência real para descobrir onde estão os problemas.
fonte
Não desenvolvi nenhuma programação incorporada em nível de negócios, mas meu bacharelado era principalmente sobre sistemas embarcados, dos quais tenho alguns anos de experiência real. Usamos C no Atmel AVR e tocamos alguns chips da Texas Instruments com VHDL, e tivemos algumas coisas teóricas no ARM.
No que tínhamos, eram aproximadamente de 50 a 60% de programação (C), 20% de planejamento / projeto (UML), e o restante eram eletrônicos físicos (solda, medição, fiação, fabricação de cabos etc.). Também concordo que foi muito interessante e divertido de fazer e, na verdade, gostaria de ter também uma carreira em sistemas embarcados. Infelizmente, com um mercado muito pequeno de sistemas embarcados, tive que recorrer ao antigo Java EE.
Mas eu discordo; Eu diria que as porcentagens acima mencionadas são bastante próximas dos empregos no mundo real, uma vez que nossos professores têm empresas próprias e também mencionaram que tentarão torná-lo o mais realista possível. Até tivemos curvas aleatórias de 180 graus nos requisitos no meio do projeto, heh heh.
Quanto à pilha. O conhecimento da programação incorporada lhe dará grandes chances de criar produtos de hardware próprios e muito reais que você poderia fabricar em fábricas reais na Ásia e montá-los em suas instalações (seja em casa ou em sua própria empresa). É muito interessante! Você também pode fazer muitos aparelhos que serão úteis em casa, como faróis com movimento controlado, cronômetro para uma máquina de café para preparar automaticamente o seu café da manhã e assim por diante. Coisas emocionantes, de fato!
fonte