С чего начать изучение программирования авионики? [закрыто]

Я учусь на последнем семестре и собираюсь получить степень бакалавра компьютерных наук. Я хотел бы в конечном итоге перейти в индустрию исследования космоса (NASA, SpaceX, Boeing, Lockheed Martin и т. д.). Я ничего не знаю об авионике и хотел бы узнать больше об этом предмете, особенно о программном обеспечении. Я нашел мало информации в Интернете. Пожалуйста, дайте мне справочный материал (книги, веб-сайты и т. д.), чтобы узнать об этой области. Ваша точка зрения и дополнительная информация приветствуются.

У меня нет книг/материалов или более конкретной информации, поэтому я опубликую это как комментарий, а не как ответ, но я настоятельно рекомендую освежить ваше низкоуровневое программирование, если вы серьезно относитесь к этому площадь.
@JonStory: Определенно C и C++. Хотя такие вещи, как электронные сумки для полетов, вероятно, сделаны с помощью Java и даже HTML и JavaScript.
Я не уверен, что Java находит широкое применение в авиакомпаниях — JVM вносит слишком много неопределенности, чтобы ее можно было использовать в приложении реального времени: но если вы достаточно компетентны в C/C++, чтобы получить такую ​​работу, вы может делать Java во сне.
@JonStory: жесткое реальное время всегда C или не размещенное (ограниченное подмножество) C++. А вот Electronic Flightbag — это приложение для показа графиков, контрольных списков и выполнения расчетов. Он не требует работы в режиме реального времени и обычно работает на стандартном ноутбуке или планшете, хотя они встраиваются в новые самолеты, такие как A380. Так что это может быть на Java или даже на HTML+JavaScript.
@JonStory : Кстати, если вы упомянули авиалинию , большая часть ИТ, которую они делают, вероятно, связана с Java и HTML. Потому что авиакомпании не делают авионику. Они создают системы бронирования билетов, приложения для планирования полетов и электронные бортовые сумки, и ни для чего из этого не требуется режим реального времени. Кстати, на моем бывшем работодателе одна команда делала систему управления светофорами аэропортов (подход, взлетно-посадочная полоса, рулежная дорожка, стоп-бары и т.д.), да и то на Java. Потому что это был в основном графический интерфейс для башни, чтобы переключать свет, и это также не требовало реального времени.
Приложения EFB для планшетов, которые получают данные от TIS-B и о погоде, могут не работать в режиме реального времени, но было бы разумно отображать информацию достаточно быстро.
Извините, да, я имел в виду авиацию в целом, а не конкретно авиакомпании. EFB — это одно, но я бы ни в коем случае не считал их «авионикой».
Programmers.stackexchange.com/a/153267 хорошо читается на эту тему.
@rbp: «в реальном времени» имеет очень конкретное значение, совершенно не зависящее от «довольно быстро». Java подходит для «довольно быстрого». С другой стороны, системы «реального времени» часто не особенно быстры; они просто должны быть абсолютно свободны от каких-либо непредсказуемых задержек (что делает GC невозможным; обычно даже любое динамическое распределение вообще).
спасибо, я программирую в режиме реального времени уже 35 лет, и я тщательно подбирал слова
У Эмбри Риддла есть программа на получение степени, которая именно то, что вам нужно.
Как получилось, что эта часть «Пожалуйста, дайте мне справочный материал (книги, веб-сайты и т. д.), чтобы узнать об этой области. ” был помечен как в первую очередь основанный на мнении? Может быть, это было отредактировано позже...?

Ответы (8)

Хорошо, я публиковал это как комментарий, но он стал смехотворно длинным...

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

Первое: языки программирования. Знание языка, используемого в отрасли, является преимуществом. Сейчас я работаю в автомобильной/транспортной отрасли; Я не работаю над материалами, критически важными для безопасности, поэтому мы просто используем стандартный C/C++. Даже на этом уровне хорошее знание низкоуровневого программирования и программного обеспечения (как написать простой драйвер, как взаимодействовать с устройством с помощью ioctl и т. д.) очень полезно.

До этого я работал в области, связанной с языками программирования и компиляторами, особенно над моделированием и анализом параллельного кода. Среди прочего, я кратко общался с людьми, работающими в Airbus (профессора, которые работают в академических кругах, но помогают создавать настоящее программное обеспечение). Они все еще видят и используют много Ады, так что... знать, что это хорошо :) Я также знаю, что Java также используется вместе со специальными инструментами для проверки кода.

Что подводит нас ко второму: все, что связано с проверкой программного обеспечения , как с теоретической, так и с практической точки зрения, очень поможет вам в этой отрасли. Изучайте и практикуйтесь, по крайней мере, с мониторами времени выполнения и средствами проверки моделей. Узнайте о различных методах статического анализа, таких как абстрактная интерпретация. Посещайте занятия по этому поводу, если можете, в своей школе.

И в-третьих: изучайте и практикуйтесь со встроенными системами и (более редкими) операционными системами реального времени и с тем, как они работают (и как вы их программируете). Приобретите себе arduino или netduino (не raspberry PI — слишком высокий уровень, там слишком много ресурсов!) и потренируйтесь с ними. Узнайте о uboot.

Проверка, тестирование, валидация, формальные части разработки программного обеспечения являются наиболее важными. Если код критичен к безопасности — а так оно и будет — вы находитесь в совершенно другой лиге, там, где есть спутники. Вам нужен опыт действительно тщательной, мучительно педантичной разработки требований. Проекты по авионике, над которыми я работал, выполнялись большими международными командами, так что в этом тоже нужен опыт.
И в вашем резюме должно быть много инструментов управления требованиями и контроля версий; Двери, Серена, что угодно. Подрывная деятельность, CVS. На самом деле не имеет значения, какой, потому что у каждой компании есть свой вариант, вам просто нужно привыкнуть к идее и быть готовым подчиниться дисциплине.

Я подозреваю, что единственный ответ - "на работе".

Изучите C и C++, а также немного встроенного программирования и попробуйте подать заявку на любые младшие должности в компаниях, занимающихся авионикой, которые вы найдете.

Мобильные телефоны уже нельзя считать встроенными, но вы сможете найти курс по робототехнике или кибернетике (промышленные контроллеры) или стажировку, связанную с ними. Стажировка по бытовой электронике тоже может помочь.

И не забывайте, что производители самолетов не производят авионику сами, а либо покупают стандартные модули у таких поставщиков, как Garmin или Honeywell, либо передают их в субподряд многим консалтинговым компаниям. И эти компании часто делают и другие виды встраиваемых систем (автомобильные, промышленные и т. д.).


Примечания: я отдаленно знаю кого-то, кто занимался авионикой, и я не думаю, что он специально стремился к этому; он был просто хорошим программистом на C и устроился на работу. Я сам немного занимался автомобилестроением, опять же, только что подал заявку на (младшую; это было сразу после выпуска) C/C++ работу в консалтинговой компании, которая изначально была мобильной и была переведена на автомобильную промышленность, поскольку первоначальный проект на самом деле не продвигался.

+1 к вашему примечанию: я работаю в смежной области (автомобилестроение/транспорт) и только что подал заявку на это. У меня были хорошие навыки C/C++, и это было то, что мне потребовалось.

Для авионики для рассмотрения вашего резюме будет необходимо следующее:

  • Хорошие навыки с C
  • Теория управления, особенно в пространстве состояний и за его пределами
  • Связан с теорией управления, прочной математической базой
  • Опыт обработки в реальном времени
  • Опыт работы по стандартам кодирования
  • Знакомство с процессами рецензирования

Также будет полезно следующее:

  • Опыт Ады и, возможно, С++
  • Некоторое знание процедур, связанных с безопасностью (DO-178B, MISRA и т. д.)
  • Знание разработки через тестирование
  • Опыт работы с распространенными RTOS, такими как VxWorks
  • Опыт низкоуровневого программирования на микроконтроллерах

Имея степень бакалавра (не бакалавра технических наук) в области компьютерных наук (не электронной техники), вы можете оказаться в невыгодном положении по некоторым из этих вопросов. Вы ДОЛЖНЫ выбирать свои проекты, чтобы получить правильный опыт, который вы хотите передать работодателям.

Конечно, вы только в самом начале своей трудовой жизни. Степень — это только начало, и любой работодатель, нанимающий выпускников, будет знать, что вам нужно пройти обучение. Хороший работодатель больше будет обращать внимание на то, насколько вы умны в целом и насколько хорошо, по их мнению, вы можете освоить новые навыки. Если вы играете с технологиями в свободное время, это, вероятно, тоже неплохо взять с собой на собеседование.

У меня есть друг, который занимается программным обеспечением для авионики. В том числе космические проекты.

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

В работе по авионике чаще используются языки программирования, которые не являются общепринятыми. Я думаю, что есть много встроенного C (поэтому общие навыки C могут быть полезны), а также специфичный для процессора ассемблер и языки, такие как Ada (возможно, в большей степени для оборонной авионики).

Скорее всего, вы ориентируетесь на операционную систему реального времени (RTOS) или микроконтроллер. Так что их знание может быть преимуществом. Возможно, вам потребуется написать драйверы устройств и перенести их на новые платформы (например, с одного микропроцессора на другой). Вам может понадобиться запрограммировать микроконтроллеры (например, 8051) на ассемблере или C.

Вполне вероятно, что вы столкнетесь с гораздо более высокими требованиями к написанию и/или использованию модульных тестов, тестовых наборов, инструментов покрытия, интеграционного тестирования и кропотливой формальной документации и проверки всего.

Ада, вероятно, в настоящее время имеет больше возможностей для гражданского использования, чем для военных, возможно, военные подрядчики все еще реагируют коленным рефлексом на мандат, с опозданием на 20 лет ... Airbus и Boeing являются крупными пользователями, как и железнодорожные системы и управление воздушным движением. СПАРК тоже набирает обороты.

Уже предлагалось изучать C и C++ , и я бы еще добавил в этот список язык программирования Ada . Многие программы для авионики написаны на этих трех языках программирования.

При изучении C/C++ также может быть полезно научиться правильно кодировать в соответствии со стандартами кодирования для авиационного программного обеспечения.

Я рекомендую прочитать:

Если вы хотите поиграться с настоящим программированием авионики, вам может быть интересно получить квадрокоптер с открытым исходным кодом (например, от AeroQuad ) в качестве игрушки и поэкспериментировать с его программным обеспечением.

Этот. Поэкспериментируйте с авионикой с открытым исходным кодом, наземными системами управления, стабилизаторами, трекерами и тому подобными вещами. Ardupilot, планировщик миссий, UDB/MatrixPilot и т. д.

Я не работаю с авионикой, но я работал с дистанционным зондированием в контексте наук о Земле.

Я думаю, что эти материалы могли бы помочь в дополнение к тому, что предложили другие, особенно. если вас интересуют научные аспекты (извините, ответ может быть несколько не по теме, если вы этого не сделаете).

  • Программирование

    Помимо C, для реализации различных алгоритмов и моделей по-прежнему много используется Fortran. Для небольших задач и визуализации люди часто используют Python ( numpy , scipy , pandas , matplotlib ) и R (R — отличный язык статистического программирования, который можно использовать вместо Excel для серьезных задач).

    Что касается C, кажется, никто не упоминает, что безопасное кодирование действительно необходимо для таких приложений с высокими ставками. Seacord, 2013 — отличная книга для этой цели.

    • Чепмен, Стивен Дж. Фортран 95/2003 для ученых и инженеров. Макгроу-Хилл, 2008 г.

    • Сикорд, Роберт. Безопасное кодирование на C и C++ (2-е издание) (серия SEI по разработке программного обеспечения). Эддисон-Уэсли Профессионал, 2013.

    • Матлофф, Норман. Искусство программирования на R. Пресса без крахмала, 2011.

  • Физика

    Хорошие основы физики, безусловно, жизненно важны для освоения космоса.

    Многие измерения, проведенные в космосе, связаны с излучением, поэтому я добавляю ссылку на это.

  • Математика

    Исчисление, наверное, важнее линейной алгебры.

    Многие проблемы проектирования и физики связаны со статистикой и оптимизацией.

  • Юникс/Линукс

    Операционные системы Unix широко используются в прикладных науках, встроенных системах и суперкомпьютерах.

    • Керриск, М. Интерфейс программирования Linux: Справочник по системному программированию Linux и UNIX. Пресса без крахмала, 2010.

    • Лукас, МВ. Absolute FreeBSD: Полное руководство по FreeBSD. Пресса без крахмала, 2007.

    • многие другие книги, например, изданные O'Reilly

Немного ежедневного чтения: phys.org/space-news/ (-;

Я настоятельно рекомендую изучить курс анализа программного обеспечения и изучить систему проверки, такую ​​как PVS. Я вернулся в аспирантуру после 14 лет работы в различных отраслях программного обеспечения, и курс по анализу программного обеспечения, который я прошел, был для меня самым поучительным. Когда я учился в школе, это не имело особого смысла, но после многих лет работы материал прижился. Мне никогда не казалось, что эта тема мне понравится, и она может быть немного суховатой, но как только вы ее освоите, вы уже никогда не будете смотреть на программирование как раньше.