Найти в Дзене
Замечательный предел

Linux и средства производства

Плох тот работник, который не мечтает овладеть средствами производства, как сказал один из классиков. Но не все понимают толк в том, что такое средства производства. А они, между прочим, существуют не только в виде тракторов, комбайнов и автомобилей.
(С) Балабоба, искусственный интеллект Яндкса. После того как я немного освоился с командной строкой Linux и заимел собственный виртуальный сервер в Интернете, возник вопрос куда двигаться дальше? На самом деле Linux - это универсальная площадка для работников многих направлений умственного труда, от близких непосредственно к сфере информационных технологий (ИТ) до таких прикладных вещей как графика, дизайн, инженерия, менеджмент, медицина, лингвистика и т.д. Нельзя объять необъятное, поэтому нужно определиться с целью обучения и составить план освоения непосредственно необходимых для её достижения тем.
Для меня такой целью является стать компетентным разработчиком решений на стыке мобильных технологий, интернета вещей (IoT) и инженерии в
Плох тот работник, который не мечтает овладеть средствами производства, как сказал один из классиков. Но не все понимают толк в том, что такое средства производства. А они, между прочим, существуют не только в виде тракторов, комбайнов и автомобилей.
(С) Балабоба, искусственный интеллект Яндкса.
Мудрости стародавних времён
Мудрости стародавних времён

После того как я немного освоился с командной строкой Linux и заимел собственный виртуальный сервер в Интернете, возник вопрос куда двигаться дальше?

На самом деле Linux - это универсальная площадка для работников многих направлений умственного труда, от близких непосредственно к сфере информационных технологий (ИТ) до таких прикладных вещей как графика, дизайн, инженерия, менеджмент, медицина, лингвистика и т.д. Нельзя объять необъятное, поэтому нужно определиться с целью обучения и составить план освоения непосредственно необходимых для её достижения тем.
Для меня такой целью является стать компетентным разработчиком решений на стыке мобильных технологий, интернета вещей (IoT) и инженерии встраиваемых систем (Ebedded Systems). Результатами деятельности в этой области, на мой взгляд, могут быть:

  • программы, взаимодействующие с пользователем, как правило выполняемые на клиентских устройствах (сфера разработки, имеющая общее название "Frontend");
  • программы, реализующие внутреннюю логику обработки данных, зачастую выполняемые на стороне сервера (сфера, называемая "Backend");
  • схемы и чертежи устройств, реализующих аппаратную часть системы ("Hardware development");
  • макеты и прототипы устройств ("Prototype development")
Зоопарк IT-технологий
Зоопарк IT-технологий

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

Вот что там предполагается изучать в рамках курса Frontend разработки:

  • HTML; CSS; Flexbox;
  • Git; BASH; JavaScript;
  • TypeScript; React; Redux;
  • Grid Layout; DOM; Webpack;
  • React Router; ООП;
Frontend на курсе Яндекс.практикум
Frontend на курсе Яндекс.практикум

С направлением Backend-разработки всё немного сложнее - там значительно больше технологий и языков программирования. Вот что, например, предполагается изучить в рамках курса от GeekBrains:

  • Базовые алгоритмы программирования;
  • Введение в контроль версий;
  • Знакомство с языком программирования C#;
  • Веб-технологии и основы бэкенда (PHP, MySQL, JSON, XML);
  • Знакомство с языком Python;
  • Фреймворки Flask, FastAPI, Django;
  • Базы данных и SQL.
Backend на курсе GeekBrains
Backend на курсе GeekBrains

А вот что предлагает более специализированный курс этого направления от Яндекс.практикум:

  • Python; Django;
  • GitHub; Bash;
  • SQL; PostgreSQL;
  • Nginx; Gunicorn;
  • Docker; Docker Hub
Backend для разработчиков питонистов  от Яндекс.практикум
Backend для разработчиков питонистов от Яндекс.практикум

С мобильной разработкой сейчас имеется две основные ветви: iOS- разработчик (ориентированный на пользователей устройств Apple iPhone) и Android (для устройств под управлением Google Android).

В частности направление Android охватывает такие темы как:

  • Java;
  • Kotlin;
  • UI и хранение данных;
  • Сеть (HTTP, REST API и Retrofit);
  • Хранение данных (SharedPreferences);
  • Многопоточность;
  • Архитектура (ООП+SOLID, рефакторинг и MVVM);
  • DI, принципы и библиотеки;
  • Продвинутая навигация (RxJava);
  • Продуктовая и командная разработка (MVP, Agile, Git, декомпозиция задач)
Что затрагивают курсы мобильной разработки от Яндекс.практикум
Что затрагивают курсы мобильной разработки от Яндекс.практикум

Направление iPhone я могу сразу отбросить поскольку не являюсь его пользователем и не планирую. Но в поле зрения думаю стоит держать отечественную мобильную платформу Аврора, мало-ли куда нас заведёт прогресс в ближайшее время.

Средства разработки под ОС Аврора
Средства разработки под ОС Аврора

По встраиваемым системам курсы найти сложнее, но компиляция из разрозненных источников представляет следующее:

  • Определение аппаратных, и программных компонентов встраиваемых систем;
  • Основы программирования на C;
  • Знакомство с системами сборки (GCC и GNU Make);
  • Базовые концепции Ebedded-разработки: типы памяти, сегменты и управление;
  • Интерфейс C-программ с ARM ядром микроконтроллера;
  • Ядро микроконтроллера ARM;
  • Манипуляции с памятью (прошивка, манипуляции битовыми полями, использование указателей, таблиц регистров, векторов прерываний, отладка);
  • Разработка встраиваемых структур данных(перечисления, союзы, битовые поля, стеки, связанные списки, кольцевой буфер);
  • Периферийные модули микроконтроллеров (Timer, DMA, ADC, DAC, USB, Ethernet);
  • Проблемы и концепции систем реального времени (Linux POSIX, RTOS, MFE);
  • Теория качества обслуживания (кривые полезности, политика монотонного планирования скорости, стандарты абсолютного времени);
  • Планирование и концепция предоставления услуг в режиме реального времени;
  • Обзор аппаратных архитектур реального времени и стеков программного обеспечения (варианты RTOS и ОС с расширениями реального времени POSIX);
  • Системное программирования Linux и введение в Buildroot (процессы и потоки, создание пользовательского ядра Linux и корневой файловой системы для встраиваемого устройства);
  • Основы разработки ядра Linux и введение в Yocto Project (создание пользовательских драйверов и образов встраиваемых устройств);
  • Проектирование критически важных систем, работающих в режиме реального времени(использование защищённых кодов, методы конструирования с резервированием, перекрёстной привязкой и восстановлением);
  • Базовые понятия о программируемой логике (FPGA, CPLD, ASSP и ASIC);
  • Инструменты разработки FPGA (Quartus Prime, RTL Viewer, ModelSim, TimeQuest);
  • Архитектура FPGA на базе SRAM, FLASH, Anti-fuse (от базовой логической ячейки ядра до сложных блоков IP);
  • Проектирование FPGA-устройств с использованием инструментов схемотехнической разработки и запуск их на платах демонстрационных платах;
  • Введение в машинное обучение (основные понятия включая логистическую регрессию, многослойный персептрон, глубокое обучение и простые модели);
  • Основы обучения модели (минимизация математической функции, методы проверки и оптимизации, практическое применение стохастического градиентного спуска);
  • Анализ изображений с помощью свёрточных нейронных сетей (обучение модели, тонкая настройка, интуиция, концептуальное понимание);
  • Введение в обработку естественного языка (концепция встраивания слов, рекуррентные нейронные сети, модели долговременной и кратковременной памяти).
Курс по разработке встраиваемых систем от Indian Institute of Embedded Systems (iies.in)
Курс по разработке встраиваемых систем от Indian Institute of Embedded Systems (iies.in)

И, наконец, IoT. По нему имеется больше предложений, включая курс от GeekBrains, на котором обещают рассказать следующее:

  • Введение в программирование (базовые алгоритмы и структуры данных, сложность и стоимость);
  • Введение в контроль версий;
  • Знакомство с базами данных;
  • Компьютерные сети (Ethernet, IP, VLAN, UDP и TCP, VPN, HTTP, DNS);
  • Знакомство с языком программирования C# (функции, двумерные массивы, рекурсия,связанный список, дерево и хэш-таблица);
  • Введение в IoT (архитектура, датчики и телеметрия, платформы, технологии связи);
  • Программирование на C (типы данных, ветвления, циклы, функции, указатели, массивы, файлы, препроцессор и отладка, динамические типы, библиотеки, оптимизация, компиляция);
  • Особенности C для IoT;
  • Распределённые системы и сети (типы, параметры, Mesh-сети);
  • Продвинутый контроль версий (удалённые репозитории, изменения, инструменты работы с Git);
  • Linux и виртуализация (работа в терминале, сетевые возможности, веб-сервер, основы Docker, скрипты Bash);
  • Контейниризация (механизмы пространства и контрольных групп, Dockerfile, Docker Compose и Docker Swarm);
  • Парадигмы программирования и языки парадигм (структурное, ООП, декларативное, функциональное, логическое).
Курс по разработке умных устройств от GeekBrains
Курс по разработке умных устройств от GeekBrains

Также на Хабре имеется "Открытый курс молодого бойца по Интернету вещей":
https://habr.com/ru/companies/samsung/articles/560130/

Что же касается Hardware and Prototype development, здесь дело, скорее всего не обойдётся без освоения каких-нибудь систем автоматизированного проектирования (САПР), обзор наличия которых для пользователей Linux я оставлю на на будущее.

FUSION BRAIN: Человек с планов громадьём на лице
FUSION BRAIN: Человек с планов громадьём на лице

Подводя итог сему обзору могу сделать следующие предварительные выводы. Даже эта "суженная" задача похожа на "необъятную". Хотя, при наличии достаточного свободного времени и финансовых средств, прохождение всех вышеупомянутых программ займет примерно 3-4 года регулярных трудов.

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