¿Qué es un ingeniero de sistemas embebidos?
El desarrollador de sistemas embebidos es la persona que se dedica a desarrollar software para microcontroladores y/o microprocesadores.La aplicación es muy variada en muchos campos actuales de diversas áreas de la ingeniería, algunas de las cuales son:
- Internet de las cosas (IoT)
- Medicina
- Agroindustria
- Aeronáutica
- Automotriz
- Telecomunicaciones
¿Dónde puedo trabajar?
En México la industria automotriz, la aeroespacial, la electrónica de consumo y las telecomunicaciones son las industrias en las cuales un ingeniero de sistemas embebidos tiene mayores oportunidades de conseguir un empleo y desarrollarse laboralmente.
Entre las empresas que conozco que solicitan el perfil de ingeniero de sistemas embebidos están (tal vez el giro de alguna de ellas esté equivocado pero se que son las que ofertan vacantes):
- Continental: en el ramo automotriz, desarrollando diversas partes de vehículos (no solo hacen llantas).
- John Deere: empresa del ramo automotriz/Agroindustrial, conocida mundialmente por sus tractores. Aquí se desarrollan cosas relacionadas a la navegación automática, sistemas de control, y dispositivos tipo tabletas que llevan sus vehículos.
- Luxoft: es una consultora que renta a sus ingenieros a otras industrias, hasta donde sé tienen proyectos muy interesantes.
- Bosch: otro de los gigantes alemanes, por lo general se dedica a hacer sensores y sistemas automotrices.
- Hella: se dedica sobre todo a la iluminación y sistemas automotrices.
- Texas Instruments: gran fabricante de componentes electrónicos.
- NxP: otro gran desarrollador de componentes electronicos.
- Honeywell: un monstruo gringo que se dedica a la electrónica de consumo y muchas otras industrias.
- Schneider Electric: empresa dedicada al ramo de la automatización y la transmisión de energía
- Ford
- Audi
- Volkswagen
- Capgemini: consultora enorme que tiene diversos clientes.
- Una gran candidad de StartUps que ojalá tengan futuro
- Solo busca en OCC, glassdor o LinkedIn embedded Developer y listo, encontrarás tanto las empresas listadas aquí, como muchas más que estan interesadas en conseguir personal
Sueldos
Hay 11 motivos por los que una persona decide ser desarrollador de sistemas embebidos:
- 01)Es un(a) nerd/ñoño(a)/teto(a) sin remedio que sufrió bullying cuando era niño(a)/adolescente (sobre todo antes del 2008, algún día discutiremos porque este año fue un punto de inflexión), te apasiona la ciencia y la tecnología y soñabas con llegar a la nasa, destruías tus juguetes con tal de saber que tenían dentro y al final solo quedabas con un monton de motores a los cuales les terminabas rompiendo los engranes y tus papás no querian comprarte uno más. Si es el caso llegó la hora de triunfar.
- 10)Ya vio los sueldos que se pueden alcanzar y si no, aquí va un pequeño aproximado (sueldos mensuales, calculados por mi mismo en abril de 2022, échenle coco ajustando inflación y condiciones futuras):
- Trainee: de gratis a 10000 pesos, espero que a medio tiempo y por unos cuantos meses.
- Jr (de 0 a 3 años de experiencia): el sueldo oscila entre los 15000 pesos hasta los 30000 pesos en promedio, dependiendo de la empresa y la experiencia que se tenga.
- Middle(no hay un consenso real de la experiencia, pero va de los 2 a los 5+ años dependiendo de lo que diga el empleador): desde los 25000 hasta los 45000 pesos mexicanos. Como que se va poniendo interesante el asunto.
- Senior (un chingón con más de 5 años de experiencia): Arriba de los 50k ya mejor ni contamos.
- 11) Eres un caso raro que tiene el éxito garantizado desde la cuna, una persona agraciada físicamente y ademas con un IQ muy alto. Extrovertido y con mucho carisma, no se que haces como developer, esta no es tu familia.
Conocimientos para ser desarrollador
Bueno a lo que venimos.
¿Qué me preguntarán en una entrevista para el puesto de ingeniero de sistemas embebidos?
- Mantener una conversación en inglés: Sí, primer golpe en la cara para el gran porcentaje de los camaradas Mexicanos, que paradójicamente estamos más cerca de USA que de Dios (aunque yo pongo esto en duda), pero ahora tenemos udemy, miles de vídeos sobre todo en Youtube, Duolingo, y paradójicamente si lees esto en español como primer fuente de consulta, ya vamos mal, porque primero debiste ver algún blog en inglés escrito por un colega de la india. Pero bueno, primer punto, saber expresarte en inglés sobre todo conversaciones técnicas aunque no tengas idea de como se dice: nariz, pinza, cotonete, problema o etiqueta.
- Se recomienda que si tuviste la fortuna de que en tu formación académica hiciste proyectos con microcontroladores, les pongas el plus que los profesores no le dieron, esta bien que utilices arduino, pero aprende un poquito más Lenguaje C/C++, resuelve problemas de otras materias (ejemplo métodos númericos, usando microcontroladores), descríbelos y preséntalos cuando tengas tu entrevista, esto es sin miedo al éxito. La idea es que en este espacio puedas encontrar proyectos interesantes que puedas replicar y me disculpo si fallo en mi misión autoimpuesta.
- Si eres geek, creo que no tengo que decir que utilices Linux, porque ya lo haces, si no es el caso, nunca es tarde, aprende a instalarlo y administrarlo desde terminal, no es tan fácil, llega a ser frustrante (I know that.. but). Descarga el que más te guste, aprende a jugar con él y lee un poquito sobre Yocto proyect al menos entérate de que va.
- Es necesario conocer algunos conceptos de Sistemas operativos, Unix, RTOS, Kernel, shell.
Principales preguntas:
No se darán respuesta aqui a estas preguntas del todo, por experiencia propia se que esto es mejor investigarlo y comprenderlo que memorizarlo y no saber de que va. Pero más adelante se irán contestando en la etapa de teoría y projectos. No desesperen amigos, la senda del gran viaje es larga.
- Preguntas Relacionadas al Lenguale C
- ¿Qué es el keyword volatile y donde/ para qué se utiliza?
- ¿Para que se usa la palabra reservada static? ¿que pasa si se le pone a una variable? ¿qué pasa si la lleva una función?
- ¿Cuál es el tamaño del dato int? (spoiler depende de la arquitectura)
- ¿Qué hace el modificador const?
- ¿Qué es un apuntador?
- ¿Se puede hacer un apuntador const, volatile, static...?
- ¿Para que se utiliza la palabra reservada struct?
- ¿Para que se utiliza la palabra reservada enum?
- ¿Para que se utiliza la palabra reservada union?
- ¿Cuál es la diferencia entre union y struct?
- ¿Cómo se llama una función por apuntador?
- ¿Cuáles son las dos formas de pasar parámetros a una función?
- ¿Cuál es el tamaño de un apuntador?
- ¿Si tengo un apuntador a una estructura, cual es la diferencia en tamaño a un apuntador a una función o a una variable?
- ¿De que depende el tamaño de una dirección de memoria? (pista, hay arquitecturas de 8, 16, 32 y hasta 64 bits)
- ¿Cómo se hace un cast(enmascarar tipos de dato)?
- Sabes hacer operaciones de bits, dominas el llamado bitwise(si no lo haces recomiendo lo investigues).
- ¿Cómo conviertes rápidamente de decimal a hexadecimal?
- ¿Cómo conviertes rápidamente de decimal a binario?
- ¿Que es una variable local? ¿Qué es una variable global? ¿En que se diferencian?
- ¿Para qué se utiliza el modificador extern?
- ¿Cuáles son las principales estructuras de datos? (pilas, colas, listas...)
- Conoces las funciones para reservar memoria. ¿Cuáles son?
- Si tengo definido un struct y un union con los mismos componentes, ¿qué me regresará sizeof en cada una de ellas?
- ¿Cules son las fases de un compilador?
- ¿Qué hace el preprocesador?
- ¿Qué se hace durante el compilador/traductor?
- ¿Qué hace el ensamblador?
- ¿Qué hace el linker?
- ¿Qué es una macro?
- ¿Qué es una funcion in-line?
- ¿Cuál es la diferencia entre hacer una rutina por función y por macro?
- ¿Qué es un API?
Como sugerencia, el desarrollador de Sistemas embebidos ya no piensa en un enfoque orientado a objetos, podria describirse como apegado a la programación estructurada clásica, sin embargo. La definición que en lo personal puedo definir es el control de Hardware por medio de estructuras y algoritmos de Software. El mundo en binario (códificado en hexadecimal) es el pan de cada día para el embedded SW Developer.
- Preguntas sobre arquitecturas de procesador y memoria
- ¿Qué arquitecturas conoces?
- ¿Cuál es la diferenia entre arquitectura Hardvard y Von Newmann?
- ¿Qué arquitecturas de procesador has utilizado?
- ¿Qué significa que tengo un microcontrolador/procesador de 32 bits? (referido como maneja la memoria)
- ¿Cuál es la diferencia entre un cliclo de reloj y un ciclo máquina?
- ¿Que significa que un microcontrolador sea big endian?
- ¿Que significa que un procesador sea little endian?
- ¿Qué es un procesador?
- ¿Qué es un microcontrolador?
- ¿Todos los microcontroladores contienen un procesador?
- ¿Qué modulos puede tener un microcontrolador?
- ¿Qué es un DAC?
- ¿Qué es un DAC?
- ¿Qué es la ALU?
- ¿Qué es un timer/counter?
- ¿Qué hace un modulo PWM?
- ¿Qué es una UART?
- ¿Qué es una fuente de reloj?
- ¿Qué es un PLL, para que se puede usarn en un microcontrolador?
- ¿Cómo puedes generar señales de reloj/ osciladores?
- ¿Qué es una interrupción?
- ¿Qué es el pulling?
- ¿Cómo manejas una interrupción (utilizando lenguaje C)? (spoiler por el ISR usando funciones, para ARM usas el NVIC)
- ¿Que es un watchdog timer? ¿Qué funciones tiene?
- Si yo tengo que hacer un delay, ¿por qué me conviene más implementarlo por medio de una cuenta descendente que por una ascendente?
- ¿Cómo se organiza la memoria de un microcontrolador?
- ¿Qué tipos de memoria existen (de acuerdo con su fabricacion)? Flash, eeprom, ram, nand, etc, intenta saber un poco de todas.
- ¿Cuales son las partes de la memoria de un sistema y que se hace en cada una de ellas? Se los dejo en english pero creo que es la forma en que se puede comprender (y muy seguramente su entrevista será en inglés como dijimos más arriba):
- Text segment (i.e. instructions)
- Initialized data segment
- Uninitialized data segment (bss)
- Heap
- Stack
- ¿Como puedo saber el tamaño de una estructura sin utilizar el operador sizeof? pista, se usan apuntadores y una operacion sencilla. En su momento falle al responder.
- ¿Qué es un puerto de entrada- salida/ Qué es el GPIO?
- ¿Como se mapea un GPIO dentro del microcontrolador (en referencia a lenguaje C)?
- Preguntas relacionadas con Sistema Operativo
- ¿Qué es un sistema operativo?
- ¿Qué es un sistema operativo de tiempo real?
- ¿Cuál es la diferencia entre sistema monolítico y uno microkernel?
- ¿Qué es un semáforo?
- ¿Qué es mutex?
- ¿Qué es RTOS?
- ¿Qué es Embedded Linux?
- ¿Has utilizado alguna tarjeta de desarrollo que soporte sistema operativo? (Raspberry, beaglebone)
- Utilizando Linux (bash) como te mueves entre directorios, obtienes la fecha, describir algún algoritmo para hacer respaldos.
- Preguntas acerca de protocolos de comunicación:
- ¿Qué es un protocolo de comunicación síncrono?
- ¿Qué es un protocolo de comunicación asíncrono?
- ¿Cómo se realiza una comunicación serial?
- Explica brevemente como funciona el protocolo I2C
- Explica brevemente como funciona el protocolo SPI
- ¿Conoces el protocolo CAN?
- ¿Conoces el protocolo LIN?
- ¿Qué significa que unprotocolo sea Full-Duplex ó Half-Duplex?
- ¿En qué aplicaciones se recomienda utilizar SPI y en cuales I2C?
- ¿Cómo se manejan los errores de comunicación en un protocolo?
- ¿Qué es el bit de inicio?
- ¿Qué es un checksum?
- ¿Qué es un frame?
- Explica como has usado protocolos de comunicación en los proyectos
- Muchas entrevistas se enfocan en como resuelves problemas desde el punto de vista funcional, tanto en cuestiones técnicas como en interacción humana por medio del trabajo en equipo. Esto con preguntas del tipo:
- ¿En una situación donde un miembro del equipo genera conflictos contigo como lo resolverías?
- ¿Cuáles son los problemas que has tenido para organizar un equipo de trabajo?
- ¿Cuál ha sido tu mayor reto al trabajar en un equipo?
- ¿En que proyectos has trabajado? ¿A grandes rasgos que se hace en ellos?
En esta parte pudes describir proyectos personales, y académicos en el caso que no tengas una experiencia previa de trabajo. Y si ya has tenido un trabajo anteriormente se vale decir con qué tecnología trabajaste, y mas o menos de que va para no violar las clausulas de exclusividad y temas de esa índole. - Si te toca hacer un ejercicio técnico en conjunto, intenta explicar tu lógica para resolverlo de la mejor manera, nosotros sabemos que no es muy fácil escribir código y que funcione a la primera, pero si tienes el panorama general bien claro desde el principio y planteas la solución de la mejor manera, la codificación será lo de menos importancia.
Espero que esta información sea de utilidad para alguien, aquí si se necesita un poco de esfuerzo y mucha suerte, sobre todo para conseguir un primer empleo. Un consejo para mover la estadística a favor es tener un buen perfil en linkedIn y agregar a los headhunters/RRHH de empresas de tecnología así como ingenieros que ya estén desarrollando. Sin temor, y sin vergüenza.
Por el momento me despido, intentaré actualizar este post cada que pueda.
Les dejo una lista de lugares donde pudran encontrar solución a algunas de estas preguntas, y muchas más para prepararse.
<-Anterior Siguiente->
No hay comentarios.:
Publicar un comentario