Come diventare un programmatore del kernel / sistemi / driver di dispositivo? [chiuso]


40

Attualmente lavoro a titolo professionale come ingegnere software che lavora con il sistema operativo Android. Lavoriamo per integrare la nostra piattaforma come demone nativo tra le altre sfaccettature del progetto. Lavoro principalmente in Java sviluppando SDK e applicazioni Android, ma posso aiutare con la piattaforma in C / C ++.

Comunque, ho un grande interesse a lavorare professionalmente nello sviluppo di basso livello per Linux. Non sono infelice nella mia posizione attuale e rimarrò in giro fino a quando la compagnia me lo permette (in effetti mi piace molto lavorare lì!), Ma mi piacerebbe lavorare in quella direzione. Ho lavorato con Linux Kernel Development (Robert Love) e Linux Programming Interface (Michael Kerrisk) (Oltre a rafforzare le mie abilità in C in ogni occasione) e sfogliare casualmente Monster e siti simili.

Il problema che vedo è che non ci sono posizioni entry level. Come si fa a entrare in questo campo? Ogni volta che vedo "Linux Systems Programmer" o "Linux Device Driver Programmer" richiedono tutti almeno 5-7 anni di esperienza pertinente. Vogliono qualcuno che conosca le corde, non un programmatore di livello junior (lavoro da 7 mesi ...).

Quindi, presumo, che alcuni di voi su StackOverflow lavorino a titolo professionale facendo proprio quello che vorrei fare. Come ci sei arrivato? Quali piattaforme hai usato per arrivarci? Avrò un momento più difficile perché ho i miei scapoli in CSC rispetto a un ingegnere informatico (dove avrebbero sperimentato un po 'più incorporato, asm, ecc.)?

MODIFICA PER LA CHIARIFICAZIONE! Sono consapevole della natura opensource del kernel / driver di Linux, ecc. Ho in programma di contribuire indipendentemente da dove sia il mio lavoro quotidiano. Sono più curioso di sapere quali tipi di posizioni entry level mi permetteranno di fare un lavoro rilevante e di essere pagato mentre lo faccio! Grazie per tutte le risposte finora!


6
Molto semplice. Linux è opensource. Basta seguire l'elenco di sviluppo, correggere alcuni bug, dopo aver conosciuto le tue cose, iniziare forse a scrivere cose più grandi come nuove funzionalità, ottimizzazioni, forse alcuni driver ...
Let_Me_Be

2
Ma prima di scegliere qualsiasi area in Linux dovresti avere una conoscenza approfondita del funzionamento di Linux e alcune mani su. Diciamo che devi avere conoscenza del file system Linux ecc.
user29973,

Risposte:


36

Scrivo driver di dispositivo Linux per la mia azienda e mi sono trovato in questa posizione conoscendo di più lo sviluppo di Linux nel mio dipartimento e mi hanno promosso / assunto in un nuovo ruolo. Era una voce in stile junior, quindi esistono e non perdono la speranza!

Il mio consiglio immediato per te è vedere se riesci a restringere la concentrazione. La programmazione del kernel è molto diversa dalla programmazione del sistema è molto diversa dalla programmazione del driver di dispositivo.

  1. Gli sviluppatori del kernel si concentrano su interfacce, strutture di dati, algoritmi e ottimizzazione per il nucleo del sistema operativo.
  2. I programmatori di sistema scrivono daemon, utilità e altri strumenti per automatizzare attività comuni o difficili.
  3. I driver di dispositivo utilizzano le interfacce e le strutture dati scritte dagli sviluppatori del kernel per implementare il controllo del dispositivo e l'IO.

Un ottimo programmatore del kernel potrebbe non sapere molto sulla latenza degli interrupt e sul determinismo hardware, ma saprà molto su come funzionano i blocchi, le code e i Kobjects. Un programmatore di driver di dispositivo saprà come utilizzare blocchi, code e altre interfacce del kernel per far funzionare l'hardware in modo corretto e reattivo, ma non avrà le stesse probabilità di correggere un bug di allocazione della pagina o di scrivere un nuovo programmatore.

Quindi, scegli ciò che ti interessa di più, magari esaminando gli elenchi di sviluppo o i bug tracker e vedi che tipo di impatto vuoi avere. Quindi, contribuisci e costruisci esperienza lavorando su tali progetti e sforzi. Quando il tuo nome / e-mail è allegato al codice nella riga principale del kernel, allora avrai esperienza a cui puoi fare riferimento nella tua lettera di presentazione / di copertura per altre posizioni :-)


3
Interessante, ma forse non un proiettile magico.
Matt Joiner,

7
I proiettili magici raramente esistono.
Ed S.

Grazie per il tuo contributo! Lavorerò per restringere la mia attenzione (alla fine vorrei avere una comprensione di tutte le sfaccettature) per ora. In quale qualità (se sei libero di rivelare) hai lavorato prima di diventare il "go to guy" per i conducenti?
fisarmonica,

4
Che ci crediate o no, ma ero un supporto tecnico per i clienti che utilizzavano l'hardware e le vendite cercando di capirlo: ho risposto a e-mail e telefonate. Ma la mia esperienza collaterale nello sviluppo di kernel e user-land per Linux mi ha aiutato di più.
Joe Friedrichsen,

3

Sono uno sviluppatore di software con oltre 15 anni di esperienza presso Motorola e alcune altre aziende hi-tech. Ho una laurea BSCE. Quindi non sono un dilettante.

Questa domanda ... come irrompere ... è comune non solo per Linux ma praticamente per qualsiasi area di specializzazione. L'ingegneria del software è diventata proprio come la medicina in quanto i professionisti devono specializzarsi. Ma quando la tua azienda si ridimensiona e ti licenzia dopo 10 anni di specializzazione, scopri che il mercato del lavoro è cambiato e non sei aggiornato. Le aziende non erano così selettive - spesso ora l'unico candidato che ha tutte le competenze nella lista dei desideri sono quelli che già lavorano per quella società o un concorrente diretto! È diventato piuttosto difficile.

Sono in questa situazione ora e mentre è difficile, ci sono alcune strategie che puoi usare per essere assunto. Ma prima, DEVI diventare esperto nella tecnologia perché se assunto, dovresti produrre. Quando ti senti pronto, considera quanto segue:

  1. Cerca una piccola azienda per cominciare. Non possono essere così schizzinosi su chi assumono come i grandi. Trascorri un anno o due lì e dopo, avrai l'esperienza professionale sul curriculum per qualificarti.

  2. Prendi in considerazione la possibilità di contrarre, soprattutto se non lavori a tempo pieno. Le aziende sono molto più propense a rischiare un appaltatore che a tempo pieno. Ancora una volta, una volta che hai esperienza verificabile da mettere sul tuo curriculum, si aprono le porte.

  3. Realizza un piccolo progetto o due da solo e crea un portfolio da presentare ai potenziali datori di lavoro. Ciò può aprire la porta all'ingresso non solo di una piccola azienda ma anche di una media impresa.

Oltre a quanto sopra, prendi in considerazione l'utilizzo di un recruiter professionista di un'azienda come Kforce, Aerotek, ecc. Il datore di lavoro paga la quota di assunzione e il recruiter ti aiuterà a venderti in un modo che non puoi fare da solo.

In realtà, un "programmatore junior" con solo 7 mesi di esperienza ha un enorme vantaggio rispetto a un ragazzo come me quando cerca di farsi assumere per fare qualcosa di nuovo. Le aziende ADORANO le "novità" / i "nuovi laureati" perché sanno che non chiederai molto denaro e saranno disposti a fare TUTTO QUELLO CHE CHIEDONO, compresi lunghi periodi all'estero se necessario. Le aziende non mi assumeranno per una posizione junior anche se ne ho fatto richiesta perché sanno che cercherò di andarmene subito per una migliore. La tua situazione non è poi così male.

In bocca al lupo!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.