Me están abordando con un trabajo para escribir C incrustado en microcontroladores. Al principio, pensé que la programación de incrustación es demasiado baja para mí, pero tal vez estoy pensando en eso mal.
Normalmente habría descartado la oportunidad de escribir código incrustado, ya que no me considero un ingeniero eléctrico. ¿Es esta una mala suposición? ¿Puedo escribir software interesante y útil para sistemas embebidos, o me daré una patada por caer demasiado bajo en la pila de software?
Fui a la escuela de informática y realmente disfruté escribiendo un compilador, pensando en algoritmos concurrentes, diseñando estructuras de datos y desarrollando marcos. Sin embargo, actualmente estoy trabajando como desarrollador web, lo que no grita las cosas interesantes que acabo de describir. (Actualmente me ocupo de problemas como: "esta casilla de verificación debe estar a 4 píxeles a la izquierda" y "esta fecha tiene un formato incorrecto").
Agradezco el aporte de todos. Sé que tengo que tomar la decisión por mí mismo, solo me gustaría una aclaración sobre lo que significa ser un programador integrado, y si se ajusta a lo que considero interesante.
fuente
La respuesta de @Tcrosley es excelente. No es necesario ser ingeniero eléctrico, pero conocer los conceptos básicos ayuda.
No creo que deba temer ser "demasiado bajo en la pila de software". He tenido que resolver muchos problemas muy interesantes como ingeniero integrado. Menciona una lista de tareas que disfrutó:
Algoritmos concurrentes: lidiar con interrupciones asincrónicas de nivel de hardware tiene tantos desafíos interesantes como usar un modelo de subproceso OS.
Diseño de estructuras de datos - Verificar. Diseño para compacidad y acceso eficiente.
Desarrollo de marcos - Verificación. En los sistemas básicos, puede terminar diseñando un mini-OS.
Escribir un compilador, tal vez no, pero puede terminar haciendo una optimización de código de bajo nivel similar al paso de generación de ensamblaje de un compilador.
Elegiría trabajar en sistemas embebidos en lugar de codificar las interfaces de usuario cualquier día. Nunca olvidará la primera vez que vea una máquina comenzar a moverse de la manera en que la programó. Es mucho más satisfactorio que empujar píxeles.
fuente
Como programador integrado, mi trabajo es hacer que el hardware personalizado funcione. Por lo general, he desarrollado un montón de software en una placa de desarrollo, o una versión anterior de hardware. Cuando llega la nueva placa, mi trabajo es poner mi software en la placa y demostrar que todo funciona.
Debido a que casi siempre hay un problema de algún tipo, las habilidades de depuración son esenciales. Si el periférico externo no funciona, ¿es un chip defectuoso, una mala conexión al chip, un código defectuoso o un uso incorrecto del periférico en el chip? La única forma de saberlo es con una depuración extensa. Esto significa sentirse cómodo con osciloscopios, analizadores de red, analizadores lógicos y depuradores de destino. El proceso de depuración se vuelve casi científico. Desarrollo una hipótesis, diseño un experimento para proporcionar evidencia a favor o en contra de mi hipótesis, y pruebo.
Al evaluar pasantes o nuevos ingenieros integrados, esta habilidad es la más crítica. Todo el software tiene problemas, pero una vez que comienzas a interactuar con los mundos físicos, la variedad de esos problemas aumenta exponencialmente. La esencia de mi trabajo es resolver la larga serie de problemas entre el concepto y la realidad.
fuente
En mi experiencia, uno obtiene mejores resultados al acercarse al desarrollo de software de sistemas integrados con un sombrero de "desarrollador de software" en lugar de un sombrero de "ingeniero electrónico". (prácticas como TDD y CI son menos comunes en ingeniería de hardware)
Por otro lado, creo que la experiencia de desarrollar un sistema embebido lo hace uno mejor; desarrollador de software más completo.
fuente
Estuve en una situación similar hace unos 8 años. En ese momento tenía 7 años de desarrollo de software en entornos de aplicaciones y servidores. Mi única experiencia en el manejo de bajo nivel con hardware antes había sido escribir en el ensamblador Z80 cuando era adolescente en un espectro ZX.
Ciertamente fue un desafío. Encontré que lidiar con los conjuntos de chips en ensamblador fue muy agradable y ciertamente aprendí mucho sobre hardware. Una parte sustancial de mi función fue probar el hardware utilizando software, por lo que aprendí a hacer frente a la programación y a reconocer que su error de software es en realidad un error de hardware. En realidad, a veces las personas de software y hardware pueden necesitar bastante trabajo para identificar si un error es hardware o software.
Un aspecto que no pude entregar fue el trabajo del controlador del dispositivo. Realmente nunca entendí esto, que es una cosa que yo y el director de la compañía nunca entendimos por qué. Simplemente se convirtió en un hecho aceptado.
Familiarizarse con un occiloscopio y un ion de soldadura será esencial. Recordando que cuando un tipo de hardware dice el número 26, SIEMPRE significa que 0x26 es útil. Darse cuenta de que los ingenieros de hardware consideran que tratar con software es una ayuda muy frustrante, pero luego, un proyecto de hardware que no involucra software se llama cable.
Permanecí en ese papel durante 4 años y solo me fui porque fui cazado furtivamente por una oportunidad realmente fantástica.
fuente
Como todo, requiere un enfoque equilibrado. Me encanta trabajar con sistemas integrados en mi trabajo diario. Me hacen mejor en ingeniería eléctrica. La computación física y la automatización son muy emocionantes. Por otro lado, construir aplicaciones web y jugar con la computación en la nube es increíble.
Si lo hace bien, el lado del software buscará maneras de hacer las cosas de manera más inteligente y mejor. El lado del hardware lo mantendrá atento a los recursos y súper eficiente.
fuente
No soy ingeniero eléctrico, pero he realizado una pequeña cantidad de desarrollo de software integrado. El mayor problema que he encontrado es que tengo una formación mucho más básica en matemáticas, por lo que no sé cómo descomponer fácilmente una compleja serie de algoritmos matemáticos avanzados en código sin mucha ayuda.
Para todas las cosas en las que necesitaba jugar con la señalización, leer valores de las entradas, enviar datos a las salidas y todo ese tipo de cosas, he encontrado un poco diferente conceptualmente de lo que hago día a día como un buen Desarrollador de software antiguo. Escribir software realmente es lo que es. Es cuando necesitas ir más allá del software real que encuentro que las cosas se ponen difíciles porque no tengo el conocimiento para meterme directamente con el hardware. Esto suele suceder al intentar depurar o probar el código. Si tiene una cadena de herramientas realmente excelente, es posible que haya integrado un entorno de depuración y simulación para eliminar la mayor parte del dolor, pero incluso con todo eso para ayudarlo, a veces necesita volver a lo básico y probar su código contra algún tipo de analizador, y la realidad es que la mayoría de las plataformas integradas no
Desde esta perspectiva, no creo que ser ingeniero eléctrico sea esencial para la programación integrada si las tareas son simples y los requisitos específicos de hardware reales son mínimos. Más allá de eso, creo que ser un EE facilitaría mucho la vida cuando se trabaja en un entorno integrado, particularmente cuando se requiere ciencia real para descubrir dónde están los problemas.
fuente
No he realizado ninguna programación integrada de nivel empresarial, pero mi licenciatura se centró principalmente en sistemas integrados, de los cuales tengo unos años de experiencia real. Usamos C en Atmel AVR y tocamos algunos chips de Texas Instruments con VHDL, y teníamos algunas cosas teóricas sobre ARM.
En lo que teníamos, era aproximadamente 50-60 por ciento de programación (C), 20 por ciento de planificación / diseño (UML), y el resto era electrónica física (soldadura, medición, cableado, fabricación de cables, etc.). También estoy de acuerdo en que fue muy interesante y divertido de hacer, y en realidad desearía tener una carrera en sistemas integrados. Por desgracia, con un mercado muy pequeño en sistemas embebidos, tuve que recurrir a Java EE.
Pero yo divago; Yo diría que los porcentajes mencionados anteriormente están bastante cerca de los trabajos del mundo real, ya que nuestros maestros tienen sus propias empresas, y también mencionaron que tratarán de hacerlo lo más realista posible. Incluso tuvimos turnos aleatorios de 180 grados en los requisitos a mitad del proyecto, je je.
En cuanto a la pila. Conocer la programación integrada le dará grandes posibilidades de crear sus propios y muy reales productos de hardware que podría haber fabricado en plantas reales en Asia, y luego ensamblarlos en sus instalaciones (ya sea en casa o en su propia empresa). ¡Es muy interesante! También puede hacer muchos gadgets que serán útiles en el hogar, como luces de control de movimiento, temporizador para una máquina de café para preparar automáticamente su café matutino, etc. ¡Cosas realmente emocionantes!
fuente