Как стать программистом ядра / систем / драйверов устройств? [закрыто]

40

В настоящее время я работаю в качестве инженера-программиста, работающего с ОС Android. Мы работаем над интеграцией нашей платформы в качестве нативного демона среди других аспектов проекта. Я в основном работаю в Java над разработкой приложений для SDK и Android, но помогаю с платформой на C / C ++.

В любом случае, я очень заинтересован в том, чтобы профессионально заниматься разработкой низкого уровня для Linux. Я не недоволен своим нынешним положением и буду болтаться до тех пор, пока мне позволяет компания (на самом деле мне там очень нравится работать!), Но я бы хотел идти своим путем в этом направлении. Я работал над Linux Kernel Development (Роберт Лав) и Linux Programming Interface (Майкл Керриск) (в дополнение к усилению моих навыков C при каждой возможности) и случайно просматривал Monster и подобные сайты.

Проблема, которую я вижу, состоит в том, что нет никаких позиций начального уровня. Как можно проникнуть в эту область? Каждый раз, когда я вижу "Программатора систем Linux" или "Программиста драйверов устройств Linux", им всем требуется как минимум 5-7 лет соответствующего опыта. Им нужен кто-то, кто знает веревки, а не программист младшего уровня (я работаю уже 7 месяцев ...).

Итак, я предполагаю, что некоторые из вас, работающие над stackoverflow, работают профессионально, делая то, что я хотел бы делать. Как ты туда попал? Какие платформы вы использовали, чтобы работать там? У меня будет более трудное время, потому что у меня есть бакалавры в CSC, а не компьютерный инженер (где у них будет немного больше встроенных, asm и т. Д.)?

РЕДАКТИРОВАТЬ ДЛЯ УТОЧНЕНИЯ! Я знаю об открытой природе ядра / драйверов linux и т. Д. Я планирую внести свой вклад независимо от того, где я работаю. Мне более любопытно, какие должности начального уровня позволят мне выполнять соответствующую работу и получать за это плату! Спасибо за все ответы до сих пор!

accordionfolder
источник
6
Очень просто. Linux с открытым исходным кодом. Просто следуйте списку разработки, исправьте некоторые ошибки, после того, как вы узнаете свои вещи, начните, возможно, писать большие вещи, такие как новые функции, оптимизации, возможно, некоторые драйверы ...
Let_Me_Be
2
Но прежде чем выбрать какую-либо область в Linux, вы должны иметь общее представление о работе Linux и некоторые руки. Допустим, вы должны знать файловую систему Linux и т. Д.
user29973

Ответы:

36

Я пишу драйверы для устройств Linux для своей компании, и я попал в эту должность, зная больше всего о разработке Linux в моем отделе, и они повысили / наняли меня на новую должность. Это был в основном стиль для юниоров, поэтому они существуют и не теряют надежду!

Мой непосредственный совет для вас - посмотреть, сможете ли вы сузить фокус. Программирование ядра очень отличается от системного программирования, очень отличается от программирования драйвера устройства.

  1. Разработчики ядра фокусируются на интерфейсах, структурах данных, алгоритмах и оптимизации для ядра операционной системы.
  2. Системные программисты пишут демоны, утилиты и другие инструменты для автоматизации общих или сложных задач.
  3. Драйверы устройств используют интерфейсы и структуры данных, написанные разработчиками ядра, для реализации управления устройствами и ввода-вывода.

Очень хороший программист ядра может не знать много о задержке прерывания и аппаратном детерминизме, но он будет много знать о том, как работают блокировки, очереди и Kobjects. Программист драйвера устройства будет знать, как использовать блокировки, очереди и другие интерфейсы ядра для правильной и быстрой работы своего оборудования, но он вряд ли исправит ошибку размещения страниц или напишет новый планировщик.

Итак, выберите то, что вас больше всего интересует, возможно, просматривая списки разработчиков или системы отслеживания ошибок, и посмотрите, какое влияние вы хотите оказать. Затем внесите свой вклад и накопите опыт, работая над этими проектами и усилиями. Когда ваше имя / электронная почта прикреплены к коду в основной ветке ядра, у вас будет опыт, который вы можете указать в своем резюме / сопроводительном письме для других позиций :-)

Джо Фридрихсен
источник
3
Интересно, но, возможно, не волшебная пуля.
Мэтт Джоунер
7
Волшебные пули существуют редко.
Эд С.
Спасибо за ваш вклад! Я буду работать над сужением своего фокуса (в конечном счете, я хотел бы иметь понимание всех аспектов) пока. В каком качестве (если вы можете раскрывать информацию) вы работали до того, как стать водителем?
аккордеонная
4
Хотите верьте, хотите нет, но я был техподдержкой для клиентов, использующих оборудование и продажи, пытаясь понять это: я отвечал на электронные письма и телефонные звонки. Но мой побочный опыт в разработке ядра и пользовательской среды для Linux помог мне больше.
Джо Фридрихсен
3

Я разработчик программного обеспечения с более чем 15-летним опытом работы в Motorola и нескольких других высокотехнологичных компаниях. У меня есть степень бакалавра. Так что я не любитель.

Этот вопрос ... как взломать ... является общим не только для Linux, но и практически для любой области специализации. Разработка программного обеспечения стала такой же, как медицина, в которой практикующие должны специализироваться. Но когда ваша компания сокращает и увольняет вас после 10 лет работы специалистом, вы обнаруживаете, что рынок труда изменился, и вы не в курсе. Компании раньше не были такими избирательными - зачастую единственными кандидатами, обладающими всеми навыками в списке пожеланий, являются те, кто уже работает в этой компании или является прямым конкурентом! Это стало довольно жестким.

Сейчас я нахожусь в такой ситуации, и хотя это сложно, есть несколько стратегий, которые вы можете использовать, чтобы получить работу. Но, во-первых, вы ДОЛЖНЫ стать опытными в технологии, потому что при найме вы должны будете производить. Когда вы почувствуете, что готовы, подумайте о следующем:

  1. Ищите небольшую компанию для начала. Они не могут быть настолько разборчивы в том, кого нанимают, как большие парни. Проведите там год или два, и после этого у вас будет профессиональный опыт в резюме.

  2. Рассмотрите возможность заключения контрактов, особенно если вы не работаете полный рабочий день. Компании гораздо охотнее выбирают подрядчика, чем работают полный рабочий день. Опять же, когда у вас есть проверяемый опыт, чтобы добавить свое резюме, оно открывает двери.

  3. Сделайте один или два небольших проекта самостоятельно и создайте портфель для представления потенциальным работодателям. Это может открыть дверь для входа не только в небольшую компанию, но и в среднюю.

В дополнение к вышесказанному, рассмотрите возможность использования профессионального рекрутера из таких компаний, как Kforce, Aerotek и т. Д. Работодатель оплачивает сбор за подбор персонала, а рекрутер поможет продать вас так, как вы не можете это сделать самостоятельно.

На самом деле, «младший программист» с опытом работы всего 7 месяцев имеет огромное преимущество перед таким парнем, как я, когда его пытаются нанять, чтобы сделать что-то новое. Компании ЛЮБЯТ "свежие выходы" / "новые оценки", потому что они знают, что вы не будете просить много денег, и будут готовы делать все, что им нужно, включая долгие стажировки за рубежом, если это необходимо. Компании не будут нанимать меня на младшую должность, даже если я подам заявку на одну из них, потому что они знают, что я буду стремиться к тому, чтобы сразу же получить лучшую работу. Ваша ситуация не так уж и плоха.

Удачи!

гость
источник