¿Cómo convertirse en un programador de controladores Kernel / Systems / Device? [cerrado]

40

Actualmente trabajo profesionalmente como ingeniero de software trabajando con el sistema operativo Android. Trabajamos para integrar nuestra plataforma como un demonio nativo entre otras facetas del proyecto. Principalmente trabajo en Java desarrollando las aplicaciones SDK y Android, pero puedo ayudar con la plataforma en C / C ++.

De todos modos, tengo un gran interés en trabajar profesionalmente desarrollando bajo nivel para Linux. No soy infeliz en mi posición actual y me quedaré mientras la compañía me lo permita (de hecho, ¡disfruto mucho trabajar allí!), Pero me gustaría seguir mi camino en esa dirección. He estado trabajando a través de Linux Kernel Development (Robert Love) y The Linux Programming Interface (Michael Kerrisk) (además de fortalecer mis habilidades en C en cada oportunidad que tengo) y navegando casualmente Monster y sitios similares.

El problema que veo es que no hay puestos de nivel de entrada. ¿Cómo se rompe uno en este campo? Cada vez que veo "Programador de sistemas Linux" o "Programador de controladores de dispositivos Linux", todos requieren un mínimo de 5-7 años de experiencia relevante. Quieren a alguien que conozca las reglas, no un programador de nivel junior (he estado trabajando durante 7 meses ...).

Por lo tanto, supongo que algunos de ustedes en stackoverflow trabajan en una capacidad profesional haciendo exactamente lo que me gustaría hacer. ¿Cómo llegaste allí? ¿Qué plataformas usaste para llegar hasta allí? ¿Voy a tener un momento más difícil porque tengo mi licenciatura en CSC en lugar de un ingeniero informático (donde experimentarían un poco más incrustado, asm, etc.)?

¡EDITAR PARA ACLARAR! Soy consciente de la naturaleza de código abierto del kernel / controladores de Linux, etc. Planeo contribuir independientemente de dónde esté mi trabajo diario. ¡Tengo más curiosidad por saber qué tipo de puestos de nivel de entrada me permitirán hacer un trabajo relevante y recibir un pago por hacerlo! Gracias por todas las respuestas hasta ahora!

carpeta de acordeón
fuente
66
Muy simple. Linux es de código abierto. Simplemente siga la lista de desarrollo, corrija algunos errores, una vez que sepa sus cosas, comience a escribir cosas más grandes como nuevas características, optimizaciones, quizás algunos controladores ...
Let_Me_Be
2
Pero antes de elegir cualquier área en Linux, debe tener una comprensión profunda del funcionamiento de Linux y algunas prácticas. Digamos que debe tener conocimiento del sistema de archivos de Linux, etc.
user29973

Respuestas:

36

Escribo controladores de dispositivos Linux para mi empresa, y entré en esta posición al saber más sobre el desarrollo de Linux en mi departamento y me promovieron / contrataron para un nuevo puesto. Fue en gran medida una entrada de estilo de nivel junior, ¡así que existen y no pierden la esperanza!

Mi consejo inmediato para ti es ver si puedes reducir tu enfoque. La programación del kernel es muy diferente de la programación del sistema es muy diferente de la programación del controlador del dispositivo.

  1. Los desarrolladores de kernel se centran en interfaces, estructuras de datos, algoritmos y optimización para el núcleo del sistema operativo.
  2. Los programadores del sistema escriben demonios, utilidades y otras herramientas para automatizar tareas comunes o difíciles.
  3. Los controladores de dispositivos utilizan las interfaces y las estructuras de datos escritas por los desarrolladores del kernel para implementar el control de dispositivos y las IO.

Un programador de kernel muy bueno puede no saber mucho sobre la latencia de interrupción y el determinismo de hardware, pero sabrá mucho sobre cómo funcionan los bloqueos, las colas y los Kobjects. Un programador de controladores de dispositivos sabrá cómo usar bloqueos, colas y otras interfaces del kernel para que su hardware funcione de manera adecuada y receptiva, pero no será tan probable que repare un error de asignación de página o escriba un nuevo programador.

Por lo tanto, elija lo que más le interese, tal vez mediante una encuesta de listas de desarrollo o rastreadores de errores, y vea qué tipo de impacto desea tener. Luego, contribuya y desarrolle experiencia trabajando en esos proyectos y esfuerzos. Cuando su nombre / correo electrónico se adjunta al código en la línea principal del núcleo, entonces tendrá experiencia a la que puede apuntar en su currículum / carta de presentación para otras posiciones :-)

Joe Friedrichsen
fuente
3
Interesante, pero tal vez no sea una bala mágica.
Matt Joiner
77
Las balas mágicas raramente existen.
Ed S.
¡Gracias por su aporte! Trabajaré para reducir mi enfoque (eventualmente me gustaría tener una comprensión de todas las facetas) por ahora. ¿En qué capacidad (si tiene tiempo para revelar) trabajó antes de convertirse en el "hombre ideal" para los conductores?
acordeón
44
Lo creas o no, pero yo era soporte técnico para clientes que usaban el hardware y las ventas que trataban de entenderlo: respondí correos electrónicos y llamadas telefónicas. Pero mi experiencia paralela en kernel y desarrollo de tierras de usuario para Linux me ayudó más.
Joe Friedrichsen
3

Soy un desarrollador de software con más de 15 años de experiencia trabajando en Motorola y algunas otras compañías de alta tecnología. Tengo un título de BSCE. Entonces no soy un aficionado.

Esta pregunta ... cómo entrar ... es común no solo para Linux sino para prácticamente cualquier área de especialización. La ingeniería de software se ha convertido en algo así como la medicina en que los profesionales deben especializarse. Pero cuando su empresa reduce su tamaño y lo despide después de 10 años de ser un especialista, descubre que el mercado laboral ha cambiado y no está al día. Las empresas no solían ser tan selectivas, ¡con frecuencia ahora el único candidato que tiene todas las habilidades en la lista de deseos son aquellas que ya trabajan para esa empresa o un competidor directo! Se ha vuelto bastante difícil.

Estoy en esta situación ahora y aunque es difícil, hay algunas estrategias que puedes usar para ser contratado. Pero primero, DEBE ser experto en la tecnología porque si es contratado, se espera que produzca. Una vez que se sienta listo, considere lo siguiente:

  1. Busque una pequeña empresa para comenzar. No pueden ser tan exigentes acerca de a quién contratan como los grandes. Pase un año o dos allí y después de eso, tendrá la experiencia profesional en el currículum para calificar.

  2. Considere contratar, especialmente si no está trabajando a tiempo completo. Las empresas están mucho más dispuestas a arriesgarse con un contratista que a tiempo completo. Una vez más, una vez que tenga experiencia comprobable para poner en su currículum, se abren puertas.

  3. Haga un pequeño proyecto o dos por su cuenta y cree una cartera para presentar a posibles empleadores. Esto puede abrir la puerta para ingresar no solo a una pequeña empresa sino también a una mediana.

Además de lo anterior, considere utilizar un reclutador profesional de una compañía como Kforce, Aerotek, etc. El empleador paga la tarifa de reclutamiento y el reclutador lo ayudará a venderlo de una manera que usted no puede hacer por su cuenta.

En realidad, un "programador junior" con solo 7 meses de experiencia tiene una gran ventaja sobre un tipo como yo cuando trata de ser contratado para hacer algo nuevo. A las empresas les ENCANTAN los "recién salidos" / "nuevos graduados" porque saben que no pedirán mucho dinero y estarán dispuestos a hacer LO QUE PIDAN, incluyendo largos períodos en el extranjero si es necesario. Las empresas no me contratarán para un puesto junior, incluso si solicité uno porque saben que buscaré irme por uno mejor de inmediato. Tu situación no es tan mala.

¡Buena suerte!

huésped
fuente