В настоящее время я работаю в качестве инженера-программиста, работающего с ОС Android. Мы работаем над интеграцией нашей платформы в качестве нативного демона среди других аспектов проекта. Я в основном работаю в Java над разработкой приложений для SDK и Android, но помогаю с платформой на C / C ++.
В любом случае, я очень заинтересован в том, чтобы профессионально заниматься разработкой низкого уровня для Linux. Я не недоволен своим нынешним положением и буду болтаться до тех пор, пока мне позволяет компания (на самом деле мне там очень нравится работать!), Но я бы хотел идти своим путем в этом направлении. Я работал над Linux Kernel Development (Роберт Лав) и Linux Programming Interface (Майкл Керриск) (в дополнение к усилению моих навыков C при каждой возможности) и случайно просматривал Monster и подобные сайты.
Проблема, которую я вижу, состоит в том, что нет никаких позиций начального уровня. Как можно проникнуть в эту область? Каждый раз, когда я вижу "Программатора систем Linux" или "Программиста драйверов устройств Linux", им всем требуется как минимум 5-7 лет соответствующего опыта. Им нужен кто-то, кто знает веревки, а не программист младшего уровня (я работаю уже 7 месяцев ...).
Итак, я предполагаю, что некоторые из вас, работающие над stackoverflow, работают профессионально, делая то, что я хотел бы делать. Как ты туда попал? Какие платформы вы использовали, чтобы работать там? У меня будет более трудное время, потому что у меня есть бакалавры в CSC, а не компьютерный инженер (где у них будет немного больше встроенных, asm и т. Д.)?
РЕДАКТИРОВАТЬ ДЛЯ УТОЧНЕНИЯ! Я знаю об открытой природе ядра / драйверов linux и т. Д. Я планирую внести свой вклад независимо от того, где я работаю. Мне более любопытно, какие должности начального уровня позволят мне выполнять соответствующую работу и получать за это плату! Спасибо за все ответы до сих пор!
источник
Ответы:
Я пишу драйверы для устройств Linux для своей компании, и я попал в эту должность, зная больше всего о разработке Linux в моем отделе, и они повысили / наняли меня на новую должность. Это был в основном стиль для юниоров, поэтому они существуют и не теряют надежду!
Мой непосредственный совет для вас - посмотреть, сможете ли вы сузить фокус. Программирование ядра очень отличается от системного программирования, очень отличается от программирования драйвера устройства.
Очень хороший программист ядра может не знать много о задержке прерывания и аппаратном детерминизме, но он будет много знать о том, как работают блокировки, очереди и Kobjects. Программист драйвера устройства будет знать, как использовать блокировки, очереди и другие интерфейсы ядра для правильной и быстрой работы своего оборудования, но он вряд ли исправит ошибку размещения страниц или напишет новый планировщик.
Итак, выберите то, что вас больше всего интересует, возможно, просматривая списки разработчиков или системы отслеживания ошибок, и посмотрите, какое влияние вы хотите оказать. Затем внесите свой вклад и накопите опыт, работая над этими проектами и усилиями. Когда ваше имя / электронная почта прикреплены к коду в основной ветке ядра, у вас будет опыт, который вы можете указать в своем резюме / сопроводительном письме для других позиций :-)
источник
Я разработчик программного обеспечения с более чем 15-летним опытом работы в Motorola и нескольких других высокотехнологичных компаниях. У меня есть степень бакалавра. Так что я не любитель.
Этот вопрос ... как взломать ... является общим не только для Linux, но и практически для любой области специализации. Разработка программного обеспечения стала такой же, как медицина, в которой практикующие должны специализироваться. Но когда ваша компания сокращает и увольняет вас после 10 лет работы специалистом, вы обнаруживаете, что рынок труда изменился, и вы не в курсе. Компании раньше не были такими избирательными - зачастую единственными кандидатами, обладающими всеми навыками в списке пожеланий, являются те, кто уже работает в этой компании или является прямым конкурентом! Это стало довольно жестким.
Сейчас я нахожусь в такой ситуации, и хотя это сложно, есть несколько стратегий, которые вы можете использовать, чтобы получить работу. Но, во-первых, вы ДОЛЖНЫ стать опытными в технологии, потому что при найме вы должны будете производить. Когда вы почувствуете, что готовы, подумайте о следующем:
Ищите небольшую компанию для начала. Они не могут быть настолько разборчивы в том, кого нанимают, как большие парни. Проведите там год или два, и после этого у вас будет профессиональный опыт в резюме.
Рассмотрите возможность заключения контрактов, особенно если вы не работаете полный рабочий день. Компании гораздо охотнее выбирают подрядчика, чем работают полный рабочий день. Опять же, когда у вас есть проверяемый опыт, чтобы добавить свое резюме, оно открывает двери.
Сделайте один или два небольших проекта самостоятельно и создайте портфель для представления потенциальным работодателям. Это может открыть дверь для входа не только в небольшую компанию, но и в среднюю.
В дополнение к вышесказанному, рассмотрите возможность использования профессионального рекрутера из таких компаний, как Kforce, Aerotek и т. Д. Работодатель оплачивает сбор за подбор персонала, а рекрутер поможет продать вас так, как вы не можете это сделать самостоятельно.
На самом деле, «младший программист» с опытом работы всего 7 месяцев имеет огромное преимущество перед таким парнем, как я, когда его пытаются нанять, чтобы сделать что-то новое. Компании ЛЮБЯТ "свежие выходы" / "новые оценки", потому что они знают, что вы не будете просить много денег, и будут готовы делать все, что им нужно, включая долгие стажировки за рубежом, если это необходимо. Компании не будут нанимать меня на младшую должность, даже если я подам заявку на одну из них, потому что они знают, что я буду стремиться к тому, чтобы сразу же получить лучшую работу. Ваша ситуация не так уж и плоха.
Удачи!
источник