на каком языке пишут по для самолетов
Разработка ПО авионики
В основе разработки ПО авионики лежит основополагающий стандарт RTCA\DO-178B. Несмотря на первый взгляд на его отстранённость от непосредственной рутины программиста, он описывает весь процесс разработки и выдвигает требования к подобному ПО. Тем не менее, в данной статье речь пойдёт и о том, как всё происходит на самом деле, на основе личного опыта разработки систем контроля и управления полётом, систем посадки и пр. для самолётов и вертолётов.
Вступление
Современные решения для контроля и мониторинга систем управления самолётом (Flight Control System) – сложный программно-аппаратный комплекс, работу которого, пожалуй, в целом не знает ни один из сотрудников и разработчиков. Это сродни проектам разработки атомной бомбы времён второй мировой войны, где каждый хорошо знает часть своей работы, но не особо представляет, почему это работает вместе. Впрочем, авионика не единственный пример таких сложных систем, и сложность тех же Microsoft Excel или GNU GCC, конечно, порождает схожие проблемы, но, тем не менее, для ПО авиации существуют нюансы и типичные решения, на которых я постараюсь отдельно остановить своё внимание. Стоя перед проблемой эффективности управления процессом разработки, менеджмент, стараясь следовать оптимизации параметров затрат и качества проекта, порождает информационный и организационный дефицит. Это связано, в первую очередь, с высокой стоимостью специалистов и\или их обучением в области авиационного ПО, т.е. с персоналом, т.к. зачастую в крупных проектах его численность может достигать порядка 2-3 тысяч человек на одну только систему управления (не говоря о динамической модели и физическом исполнении планера, а тем более всего изделия). Во вторую очередь — с организацией связи и подачей информации, её синхронизацией между участниками разработки, а так же ограничения на чрезмерно большие количества данных, проходящих через тот или иной уровень. Поэтому для разработки подобных систем утверждён особый, тщательно задокументированный и регламентированный технический процесс разработки требований, создания аппаратной и программной части, выполнения и отладки системы, а так же её тестирования и составления сертификационной документации. Тем не менее, процесс постоянно модифицируется и совершенствуется, исходя из реалий проекта и из картины окружающего мира.
Модель разработки
Для разработки критически важных систем необходимо обеспечить минимальную возможность ошибки (для самого высокого уровня в авионике установлена вероятность отказа 10^-9), а так же минимизировать расходы на разработку и исправления кода. Из-за сложности системы и взаимосвязи с другими частями (другим ПО, другой аппаратурой), модель водопада или гибкой разработки могут быть не лучшим вариантом, поэтому, основополагающим принципом разработки подобного ПО выбрана V-образная модель разработки.
Рис 1. V-образная модель разработки.
В первую очередь, такая модель позволяет обеспечить синхронизацию всех участников проекта на каждой итерации, а так же предоставляет возможность использовать уже наработанные данные и готовую методологию, т.к. на старте любого проекта V-образная модель (рис 1.) может быть адаптирована под этот проект, так как эта модель не зависит от типов организаций и проектов. V-model позволяет разбить деятельность на отдельные шаги, каждый из которых будет включать в себя необходимые для него действия, инструкции к ним, рекомендации и подробное объяснение деятельности. Это особенно важно для многоитерационного цикла разработки и тестирования ПО авионики, т.к. позволяет, фактически, разбить непосредственно разработку ПО на отдельные подциклы. Обычно V-model обобщается в спиральную модель разработки (рис 2). Которая, в свою очередь, уже позволяет оценить риски на каждом этапе разработки, а так же оптимально распределяет занятость специалистов (workload) в условиях дефицита сотрудников и времени на короткие промежутки времени (Iteration Packages, синхронизирующиеся с V-образной моделью в каждый Baseline).
Рис 2. Спиральная модель разработки-тестирования ПО
Проектирование и документация
Для контроля каждого этапа и для последующей возможности сертификации процесс разбит на различные уровни, каждому из которых соответствует свой документ, для которого создаётся в последствие документ, контролирующий его (отчёт). В итоге каждый этап разработки, все ошибки и исправления классифицируются и документируются. Повторяя каждый раз итерации разработки вероятность ошибки снижается. Данные документы так же создаются на основе внутренних стандартов компании и требований, предъявленных заказчиком.
Рис 3. Взаимосвязь документов и требований
Во главе всего стоит, естественно, заказчик, который зачастую не особо представляет, что ему надо, но вполне способен сказать, что он хочет, чтобы его самолёт летал, имел систему рулёжки и кондиционирования на все случаи жизни, а так же чтобы это система работала так, как он этого хочет, и ещё даже с бонусами. Поэтому первая часть – это анализ требований заказчика и определение базовой функциональности системы, на основе которой создаётся общая концепция и схема системы, включая технические подробности используемого оборудования, т.е. Создания первоначальных спецификаций системы (Equipment Specification) и требований (System Requirements).
Когда определена база на которой будет создаваться система, утверждается план, по которому будет проходить разработка ПО (Software Development Plan) и его сертификация (Qualification Plan — plan for Software Aspects of Certification). Несмотря на то, что главное для заказчика получить готовое ПО управления, параллельным процессом является разработка аппаратной части, которую в разработке ПО нельзя обойти стороной, т.к. разработка ПО авионики очень тесно связана с аппаратной частью; в большинстве своём ПО является хоть и переносимым и встраиваемым кодом, но сильно зависимым от компоновки систем, но об этом чуть позже.
Рис 4. V-образная модель, разбитая на этапы согласно уставным документам
Разработка
Концепция
Прежде, чем переходить дальше, стоит сказать, что в основе первоначального проектирования лежат основополагающие принципы, которые присутствуют во всем процессе разработки, и главный из них – это «различие» (dissimilarity), которое определяет то, что каждая часть из систем управления должна быть реализована разными группами людей на разной аппаратной начинке с использованием разных программных средств (в том числе средств разработки, языков программирования). Таким образом, система разделяется на программно- и аппаратно- независимые части, а процесс разработки контролируется разными группами людей для разных задач и на разных уровнях соответственно сообразно вышестоящим требованиям и плану.
Программно-аппаратная часть
Результатом первичного проектирования является модель системы, обычно выполненная в средах Matlab\Simulink, Labview. На основе модели создаются документы, регламентирующие, какие аппаратные средства должны быть использованы и какие связи они должны иметь между собой. Как минимум результатом этого этапа является создание двух документов: определяющих аппаратную компоненту (hardware) и программно-аппаратную (hardware-software).
Далее начинается этап инженерного процесса подготовки, сборки плат и готовых модулей (Control Electronic и т.п.), т.е. непосредственно монтаж, разводка необходимых микроконтроллеров, микросхем, периферии, для которых будет написано необходимое ПО. Для взаимодействия с аппаратной частью должны существовать драйверы и слой взаимодействия (framework layer), на основе которых должно быть построено приложение (application). Тем не менее, зачастую работа программиста начинается уже здесь, когда необходимо дописать необходимые драйверы\функциональность, а чаще всего внести изменения во «всеобъемлющую библиотеку», на основе документа HSI (Hardware-Software Interface). Так, наиболее частой практикой является «урезание» функциональности системы до предела используемой аппаратуры и драйверов, а так же изменение некоторых калибровочных настроек, включая необычную распиновку или оптимизацию под выбранные параметры реального времени.
Рис 5. Организация ПО
Framework
Соответственно, универсальная библиотека Framework включает в себя всевозможные драйверы для устройств, сертифицированных для использования в авиации, а так же сертифицированных стандартных функций и процедур.
Это принципиальный момент, потому что самая обычная функция strcmp, допустим, не может быть использована напрямую, она должна быть переписана сообразно стандартам и пройти сертификацию. Набор таких сертифицированных стандартных функций, прототипов, шаблонов и есть Common в слое Framework. Особенно критично такое отношение к безопасным математическим операциям (быстрое дробное деление для целочисленных процессоров, модуль, корень, как пример), так и для работы с памятью. Все алгоритмы хоть и немного (как минимум стилем кода), но отличаются от STL.
Рис 6. Архитектура тестового кластера, с возможностью использовать различные интерфейсы контроля и анализа*
Для использования на всевозможных устройствах в состав Framework входят наборы драйверов, имея структуру DrvHigh DrvLow. Здесь, в пакете DrvHigh содержатся всевозможные интерфейсы для драйверов устройств (Flash, Eeprom память, цифро-аналоговые, аналого-цифровые преобразователи, часы реального времени, прерывания, чипы CAN, ARINC, LAN и т.п.). В свою очередь, каждый из этих интерфейсов драйверов может использовать один или несколько драйверов под конкретное устройство (ту или иную микросхему памяти, конвертера и т.п.). В целях оптимизации подобные драйвера переконфигурирются или даже используются напрямую без уровня DrvHigh. Быть может, это не самое красивое решение, но в отличие от прикладных программ, работа со встроенными системами жесткого реального времени, где «640кб должно хватить всем» — не просто афоризм, а реалии. Для высоконагруженных и отказоустойчивых систем реалиями являются как пиковые загрузки микросхем, 90-100% загруженность шин передачи данных, синхронизация каналов, устройств и планирование загрузки фрейма в зависимости от входных параметров (frame scheduling) с контролем ошибок (в т.ч. разноуровневым мониторингом с подтверждением статичных и осцилляционных ошибок), так и укладывание всего ПО и объектов данных в объемы порядка 64-128кбайт.
Программирование
Требования
На основе второго документа разработчику устанавливается стиль его кода и разрешённые приёмы. Например, использование венгерской нотации, арифметических операций, стилистики написания кода и его сложности.
Так же для работы разработчика, как я уже упоминал, могут потребоваться знания низкоуровневых требований (HSI, ICD (Interface Communication), Datasheets (документов, описывающих работу устройств, как правило от создателей устройств (на различные чипы)).
Процесс
Непосредственно сам процесс разработки состоит из следующих этапов:
1. Design — дизайн (разработка дизайна в UML и\или системе моделирования (используя такое ПО как Ameos, SCADE, Simulink и т.п.) —
2. Low-Level Requirements — Описание функциональности и алгоритма решения реализуемого требования для тестировщика (используя модель чёрного ящика: описание входа и ожидаемой реакции). Т.е. низкоуровневая спецификация.
3. Coding – процесс непосредственного написания кода (в чём угодно, если не используется автоматический кодогенератор, как в SCADE\Matlab, т.к. среда разработки (IDE) может быть любой и может быть испльзована под любой ОС (я использую Eclipse, CodeBlocks, хотя и другие решения не возбраняются).
4. Debugging — процесс отладки, а точнее процесс переработки и сборки до состояния отсутствия ошибок (отсутствия Errors, Warnings с установленными параметрами выбранного компилятора).
5. Static check – процесс проверки и исправления кода на основе анализаторов кода (xLite, Polyspace, MISRA, QAC).
6. Engineering tests — процесс запуска и интеграции ПО на симуляторе (т.е. на прототипе оборудования, финальный вариант которого в последствие будет установлен в полёт, с выведенными по возможности интерфейсами и инструментами манипуляции (обычно это связка Labview + Trace32 debugger)). В некоторых случаях функциональность симулятора расширяется путём установки дополнительных устройств (датчиков, цепей разрыва, генераторов сигнала и даже приборов управления и контроля, таких как ручка пилота и т.п.). В особо редких случаях для немногих систем управления это можно проделать на настоящей полномасштабной стендовой модели самолёта.
7. Внесение результатов в систему контроля версий и отчётов (IBM Rational ClearCase\ClearQuest).
Рис 7. «Электронная птица» Sukhoi SuperJet 100*
Все эти семь пунктов составляют одну итерацию, как правило выполняющуюся только для своей части требований. Из-за изменения функционала или внесения исправлений\поправок в уже протестированный код необходимо составление Change Request’ов, на основе которых, как документа, будут внесены корректировки в существующую отчётную документацию или код, обычно это происходит в системе. По закрытии одного из Baseline, последующие изменения в код или документацию не вносятся, а лишь могут быть инициированы на основе Problem Report’ов. Такая сложность нужна, чтобы избежать несанкционированного и опасного изменения кода и документации, и стабилизировать код так, как есть до соответствующей активности. Само же изменение кода и\или спецификации после разрешения на Change Request, где документируется, какие именно правки были внесены.
Спецификация
По завершении каждого из Baseline проводится формирование документа SDD (Software Description Document), в котором содержится информация о дизайне приложения, а так же низкоуровневых требований, предоставленных разработчиком тестировщику. Однако, прежде чем передать его тестировщикам, производится анализ и ревью (design review) этого документа на наличие ошибок и возможности тестирования на приведённых в документе требований (производится другим разработчиком, обычно отвечающим за другую часть функциональности). На этом работа разработчика заканчивается, и он переходит либо к следующему Baseline или, если проект закончен, к следующему проекту. При этом, естественно, разработчик вступает в качестве консультанта в связь с тестировщиком, оказывая ему необходимое содействие.
Тем не менее, необходимо упомянуть, что каждое из звеньев (системный инженер, программист, тестировщик) должно быть разделено во избежание возможного влияния и давления с их стороны. Но, конечно же, всегда есть спорные вопросы и нюансы, и иногда, несмотря на чёткость процесса, чтобы не загромождать техпроцесс итерациями из-за опечаток в комментариях (например), зачастую применяется модель agile-разработки, не затрагивающей главный функционал.
Тестирование
Работа же тестировщика — это почти половина, если не 2\3 всего времени разработки ПО. Это кропотливый и длительный труд, который включает в себя:
Низкоуровневое тестирование
Рис 8. Испытательные стенды электроники и сопутствующих систем*
Высокоуровневое тестирование
Сертификация
На основе тестов составляется общий документ SVR (Software Verification Review), который на том или ином этапе разработки определяет состояние ошибок. На основе которого, в зависимости от их важности, составляется документ об окончании этапа (SAS, Software Accomplishment Summary). Этот документ определяет, необходим ли старт нового этапа разработки\переработки (включая переработку SWRD), либо разработка прекращается, и вся документация передаётся на сертификацию и заказчику. Этот документ является финальным для отдела технического контроля, работа которого проводится постоянно для каждого Baseline в фоне, обычно не имея сильного влияния на техпроцесс.
Заключение
Что же касается гигантских объемов работ, время, отведённое на разработку относительно простой системы (система рулёжки и выпуска шасси) — 1,5-2 года, для систем управления поверхностями (электрическими актуаторами и гидросистемами) составляет 5-6 лет. Таким образом, в среднем система проходит от 2-3 больших итераций (baseline) до 18-20 для больших и сложных систем, и более 40 для слоя Framework.
Из-за чрезвычайной сложности и громоздкости систем отчёта и рутины тестирования для работы привлекаются ресурсы аутсорса в Индии, чуть реже — в Китае, восточной Европе. Вся сертификация, как правило, проходит на территории, где действителен сертификат (для EASA – Европа, для FAA — Америка), ну и для Российский стандартов — Россия. Оборудование сертифицируется отдельно, либо уже должно иметь свой сертификат, поэтому, к сожалению, или к счастью, в авиации используются относительно «устаревшие» модели и решения, проверенные в температурных, временных и агрессивных условиях эксплуатации. Несмотря на огромную сложность и востребованность, хороших специалистов не так уж и много, и даже в Америке и Европе — электронные системы управления — только начинающееся направление, которое, конечно, содержит хоть и небольшую, но порцию ошибок… впрочем, чтобы не пугать, о безопасности и отказоустойчивой архитектуре речь пойдёт в следующий раз.
* Тестовая система подготовлена в сотрудничестве с Cosateq.
Какой язык программирования учить прямо сейчас: 9 самых востребованных
Самые востребованные языки программирования
Язык программирования — это набор лексических, синтаксических и семантических правил, которые придумали люди, чтобы создавать программы. Изучить язык до начального уровня можно за 6–10 месяцев, но если ошибиться с выбором, язык может устареть, а вы потеряете время и деньги.
Чтобы отслеживать востребованность языков программирования, компании составляют специальные рейтинги. Преподаватель онлайн-школы цифрового творчества и программирования для детей «Кодабра» Николай Ведерников выбрал языки, которые занимают высокие места в рейтингах TIOBE и IEEE. В первый рейтинг попадают языки, на которых написано больше всего строк кода, для второго используют чуть больше критериев. Например, популярность на сайтах для поиска работы, упоминания в сервисах для программистов и соцсетях.
Самые востребованные языки программирования:
Стоит ли учиться программированию на C
C — один из самых старых и популярных языков программирования. Он «легкий» и быстрый, поэтому его используют там, где нужна высокая производительность. Например, для создания драйверов, операционных систем или ПО для микроконтроллеров. При этом C сложно изучить — многое приходится писать с нуля. Если сравнивать языки программирования с автомобилями, то C — гоночный болид, неудобный на городских дорогах, но очень быстрый.
Где используют. С помощью С создают драйвера, пишут ядра операционных систем, а также пишут библиотеки для Python и других языков.
Сколько платят программисту. В Москве разработчик на C получает в среднем от 100 тыс. до 250 тыс. руб. В других городах зарплаты меньше — от 50 тыс. до 200 тыс. руб.
Зачем изучать обычным людям. С — это не тот язык, на котором можно легко написать приложение для смартфона или программу для умного дома. Но с него можно начать изучение языков программирования. Учиться непросто, но если справитесь, поймете принцип действия почти всех остальных языков.
Стоит ли учиться программировать на Java
Java — кроссплатформенный язык с большим количеством библиотек и большим сообществом разработчиков. Кроссплатформенность — это возможность написать программу один раз и сразу пользоваться ей на нескольких операционных системах: Windows, Linux и MacOS. Благодаря библиотекам Java подойдет практически для всего: работы с графикой, звуком, создания небольших игр. А в большом сообществе начинающий разработчик легко найдет готовые куски кода для разных задач и ответы почти на любые вопросы.
Программисты пользуются библиотеками, чтобы создавать программы быстрее. Библиотека — это набор готовых программ, объектов и функций для решения типовых задач.
Где используют. Java — это язык для всего. На нем пишут мобильные приложения для Android, программы для микроволновых печей и серверы. Для разработки мобильных приложений сейчас все активнее используют язык Kotlin. Но на Java уже написали очень много приложений, которые придется обслуживать и обновлять.
Сколько платят программисту. Зарплаты Java-разработчиков не сильно отличаются от обычных зарплат программистов — от 100 тыс. до 250 тыс. руб. в Москве.
Стоит ли учиться программировать на Python
Python — логичный и относительно простой язык с минималистичным синтаксисом. У него небольшой набор основных правил, язык легко читать и писать на нем не сложно. Разработчики написали для Python множество библиотек, поэтому вы можете использовать готовые решения в своих проектах. Главный минус Python — его невысокая скорость. Программы на нем будут работать в среднем медленнее, чем на других языках.
Где используют. Чаще всего на Python создают серверы, обрабатывают данные и разрабатывают нейронные сети. После изучения Python можно работать бэкенд-разработчиком или разработчиком в сфере data science. С помощью Python можно «прикрутить» неочевидные функции к программам — это его главное удобство. Например, создать нейронную сеть для определения степени поражения легких, а заодно в этой же программе сделать просмотр снимков КТ.
Сколько платят программисту. Разработчик в крупной компании в Москве, знающий Python, зарабатывает от 100 тыс. до 250 тыс. руб. При этом спрос на разработчиков в сфере data science растет, поэтому можно рассчитывать даже на более высокую оплату.
Зачем изучать. С помощью Python можно создать бота для мессенджеров или социальных сетей. Или написать программу для парсинга — поиска и переноса информации с разных сайтов в один документ. Такая программа пригодится дизайнерам и журналистам.
Стоит ли учиться программировать на C++
С++ — кроссплатформенный язык семейства C с расширенными функциями.
Огромное количество программистов пишут на нем код, делятся библиотеками и шаблонами, отвечают на вопросы новичков.
Где используют. Чаще всего на С++ создают операционные системы, драйверы и утилиты. Делают популярные десктопные приложения серий Adobe и Office. Из-за высокой скорости и производительности C++ используют для разработки компьютерных игр. Например, на нем написан популярный движок Unreal Engine.
Сколько платят программисту. В регионах разработчик на C++ зарабатывает от 50 тыс. до 150 тыс. руб., в Москве — от 100 тыс. до 250 тыс. руб. Зарплата зависит не только от города, но и от сферы — в геймдеве можно заработать больше, чем в разработке системных приложений.
Зачем изучать. C++ плохо подходит для решения простых «домашних» задач, но с него можно начать обучение языкам, чтобы понять их структуру и принципы. Если решили изучать, запаситесь терпением — с С++ в полной мере работает принцип «тяжело в учении — легко в бою».
Стоит ли учиться программировать на C#
C# (си-шарп) — язык, изначально придуманный компанией Microsoft, чтобы создавать приложения под Windows. Это объектно-ориентированный язык — его сложнее изучать, но проще использовать, например, меньше писать одинаковый код. С помощью С# можно работать с платформой WPF, которая помогает создавать «красивые» оконные приложения. Например, последние версии MS Office.
Где используют. Чаще всего на C# пишут приложения для Windows и создают компьютерные игры. Например, на C# работает популярный движок Unity. Кроме того, на нем можно разрабатывать системные приложения и создавать библиотеки для С++.
Сколько платят программисту. В регионах разработчики на С# получают от 35 тыс. до 130 тыс. руб., в Москве — от 100 тыс. до 250 тыс. руб.
Зачем изучать. С помощью C# можно создать оконное приложение для Windows, например, калькулятор или небольшую игру. Но изучать его сложнее, чем языки для создания мобильных приложений.
Стоит ли учиться программировать на JavaScript
JavaScript — быстрый кроссплатформенный язык для веб-разработки. С помощью кода на JavaScript разработчик «говорит» странице, как она будет реагировать на действия пользователя. С помощью JS можно показывать пользователю информацию без перезагрузки страницы — так работают выпадающие меню, всплывающие окна, оконные клавиатуры.
При этом у JavaScript есть свои ограничения — он позволяет допускать ошибки, которые затем сложно обнаружить. Поэтому его редко используют для создания сложного программного обеспечения, например, ПО серверов.
Где используют. JS постоянно используют для веб-разработки. На нем удобно создавать мобильные и десктопные приложения, которые будут работать через браузер. Например, Notion, Discord, Visual Studio Code.
Сколько платят программисту. Разработчик на JavaScript в Москве зарабатывает от 140 тыс. до 300 тыс. руб.
Зачем изучать. С помощью JS можно создать простой сайт или модуль для него, работающий с запросами клиента. Например, онлайн-калькулятор.
Стоит ли учиться программировать на PHP
PHP — используют в веб-разработке для создания программ, которые работают на сервере и помогают обрабатывать запросы клиентов. PHP постепенно теряет популярность, потому что серверы можно создавать с помощью других языков. Но на PHP до сих пор работают многие ранее созданные сайты, например, «ВКонтакте».
Где используют. С помощью PHP создают программы, которые работают на сервере и помогают отправлять почту с сайта, взаимодействовать с базами данным. PHP облегчает работу интернет-магазинов — можно не создавать 1 тыс. одинаковых страниц, а генерировать их автоматически из базы данных по запросу клиента.
Сколько платят программисту. В регионах PHP-разработчик получает от 50 тыс. до 120 тыс. руб., в московских компаниях — от 80 тыс. до 220 тыс. руб.
Зачем изучать. Со знанием PHP легко начать карьеру разработчика. Такой разработчик сможет найти работу, даже если у него мало опыта.
Стоит ли учиться программировать на R
R — это язык для обработки данных, статистики и машинного обучения. R постоянно конкурирует с Python, его чаще используют в научных исследованиях.
R — бесплатный, у него большие возможности для обработки данных и необычный синтаксис, более понятный математикам, от этого популярный в академической среде.
Где используют. Чаще всего с помощью R обрабатывают данные в научных исследованиях. На нем создают нейронные сети.
Сколько платят программисту. Разработчики и дата-аналитики, использующие R, зарабатывают от 100 тыс. до 200 тыс. руб. Точная сумма зависит от типа компаний — иногда в научных проектах, получающих международные гранты, можно заработать больше.
Зачем изучать обычным людям. Не стоит.
Стоит ли учиться программировать на Arduino
Arduino — это упрощенный диалект C++, на котором пишут только программы для контроллеров Arduino. Но вот эти контроллеры используют почти везде — от устройств для автоматического полива до полноценных систем «умный дом» и разнообразных роботов.
Arduino существует только в связке с контроллерами, поэтому его не всегда считают полноценным языком. Чтобы на нем работать, нужно купить специальную плату, соединить с компьютером и с помощью специального ПО писать для контроллера программу. Зато можно написать программу, поставить контроллер в нужное устройство и сразу проверить, насколько хорошо она работает.
Где используют. Специалисты, знающие Arduino, могут работать инженерами-электронщиками и разработчиками ПО для микроконтроллеров. Иногда — в школах роботехники.
Сколько платят программисту. В Москве инженеры-электронщики зарабатывают от 50 тыс. до 120 тыс. руб., преподаватели — от 30 тыс. до 100 тыс. руб.
Зачем изучать. Arduino удобен именно для решения простых бытовых задач. Его легко использовать дома и на даче — создавать системы полива, вентиляторы, охранные системы, системы для аквариумов. С Arduino можно развивать логическое мышление детей — с ним легко понять принцип работы технических устройств.
Какие языки теряют актуальность
Сомнительная идея изучать Perl в 2021 году, — считает ИТ-предприниматель и идейный вдохновитель школы программирования для детей CODDY Оксана Селендеева. Perl — язык программирования для системного администрирования, веб-разработки, игр. У Perl-разработчиков довольно высокая зарплата — 150 тыс. ₽ в месяц, но начиная с 2017 года вакансий для таких разработчиков почти нет. Лучше обратить внимание на Python. На нем выполняют те же задачи, но язык в 2021 году намного более востребован в ИТ-сфере.
Теряют актуальность и другие языки: Fortran, Objective-C, Haskell, Visual Basic.
По версии Stack Overflow, самые «страшные» языки в 2020 году — VBA, Objective-C, Perl, Assembly, C. «Страшные» означают, что большинство разработчиков, которые сейчас пишут код на этих языках программирования, не планируют продолжать с ними работать.
Общие тренды ИТ-сферы вне зависимости от языков программирования
Код становится более читабельным. В последние годы разрабатывают все больше приложений, в том числе для мобильных устройств. Приложения становятся все сложнее по архитектуре, их нужно постоянно обновлять и обслуживать — важно, чтобы код можно было легко прочитать и понять. Приложение может жить десять лет. За это время сменится несколько разработчиков, которым нужно будет понимать код, написанный другими. Поэтому важно, чтобы программы не только решали свои задачи, но и были аккуратно, понятно написаны.
Растет популярность мобильной разработки и машинного обучения. Мобильная разработка стала привычным делом за несколько лет. Многие компании запускают только мобильные приложения, не думая об их браузерных и десктопных версиях. Из-за этого сильнее разрабатывают стандарты мобильной разработки. С одной стороны, это усложняет работу, с другой — сообществу выгодно обучить новичков этим стандартам.
Машинное обучение из диковинки становится неотъемлемой частью жизни — предсказывание и обработка данных слишком часто помогают в обычных ситуациях. Становится больше приложений по распознаванию лиц и обработке голосовых сообщений в текст.
Нужно писать код для всех платформ. Платформ становится все больше — в этом году Apple оснастила свои ноутбуки ARM-процессорами, которые раньше использовала только для смартфонов и планшетов. Поэтому разработчики должны учитывать все существующие технические возможности и писать приложения так, чтобы они работали везде.
Работодатели хотят посмотреть портфолио на GitHub. Если раньше при найме сотрудника работодатели смотрели приложения, к которым программист приложил руку, то теперь даже непрофессионалы все чаще хотят увидеть код. На Гитхабе можно посмотреть все проекты разработчика, увидеть, как он думает и пишет, как развивался и рос.
Программирование молодеет. Дети и подростки изучают программирование на онлайн-курсах или самостоятельно. Из-за этого уже в 13–15 лет они могут писать приложения, выкладывать их в Appstore или GooglePlay и даже зарабатывать деньги. Некоторые из них так начинают карьеру разработчика и конкурируют с выпускниками вузов и более старшими коллегами.
Еще пять статей о программировании
В Telegram-канале «Списать не получится» мы еще больше рассказываем о трендах в образовании и о том, как учиться в течение всей жизни и делать это с удовольствием. Подписывайтесь!