Фото: eskipaper.com
Программирование применительно к концепции - это совокупные действия инженера в процессе проектирования и разработки электронных устройств с аппаратным интеллектом, целью которых является формирование ожидаемой модели поведения конечного оборудования с учётом управляющих команд оператора и возмущающих воздействий реального мира.
Профессионально
Базовым высокоуровневым языком программирования при работе с «железом» является C++ Builder, но эпизодически применяются и другие оболочки, сборки, компиляторы, основанные на С/C++, благо свои библиотеки стараюсь максимально унифицировать под разные платформы. Диалог в реальном времени с аналоговыми и цифровыми сигналами окружающего мира требует обязательного наличия в создаваемом софте многопотокового программирования (класс TThread, синхронизация, критические секции, mutex, семафоры), а это преимущественно базируется на фундаментальном знании/использовании указателей, классов, объектов ядра и внутренней организации программируемой платформы - как правило, Windows, но иногда и Linux.
GUI и консольные/терминальные приложения, выходящие из-под моего «пера», в обязательном порядке используют динамическое распределение памяти (иногда приходится делать целый менеджер для этих целей), файловый ввод/вывод, динамически подключаемые библиотеки DLL, фильтры и обработчики исключений..., в общем, львиную долю возможностей от Бьёрна Страуструпа. На данный момент интеллект инженера-физика сумел обеспечить конструктивный диалог на С++ Builder между программой пользователя и окружающим миром через COM-порт («железный» и виртуальный), USB, PCI, Ethernet, SDRAM, ATA и SATA.
Иной софт/скрипты, использующие компилятор C/С++, а также любые языки разметки и прочие «ништяки» никаких трудностей не вызывают, но в основном используются с целью создания надстроек для своих устройств. Например, для поднятия TCP socket`а на микроконтроллере (web - «морда») нужно знать XML, HTML, CSS и JAVA. Претензий на абсолютные знания по этим инструментам у меня нет, но «нацарапать» несколько html-страниц с динамическим обновлением контента (технология AJAX, но без jQuery - исключительно на XMLHTTPRequest) не «вываливаясь» из внутренней памяти чипа - задача вполне себе штатная.
Системы управления базами данных (SQL, структурированный язык запросов) периодически применяются в моих разработках в качестве переходного звена между индексированными таблицами и сигналами датчиков. Всё предельно лаконично: запрос - получил данные, обработал, запрос - записал в базу и забыл, а уже заказчик сам занимается оптимизацией производительности, обеспечением совместного доступа, свойствами, атрибутами и т.д.
По-простому
Здесь будет описание моих способностей по рассматриваемой тематике, но в терминологии нормального человека, без наборов аббревиатур и прочего отпугивающего «бреда». Пока думаю над формулировками ...
Для сведения
На практике наиболее востребована работа с реальным «железом» по TCP/IP, USB (HID, VCP, внеклассовые) и RS232/422/485: типичная задача состоит в сборе данных с разнотипных устройств (промышленные контроллеры, детекторы с цифровым выходом, беспроводные датчики - А капелла будь здоров!), построение в режиме реального времени графиков на экране пользователя и запись полученных/обработанных данных в базу данных, файлы или исполнительные механизмы.
Литература
1. Архангельский А.Я. Программирование в C++ Builder 6.
2. Орвик П. Windows Driver Foundation: разработка драйверов.
3. Рихтер Дж. Windows для профессионалов: создание эффективных Win32-приложений.
4. Руссинович М., Соломон Д. Внутреннее устройство Microsoft Windows.
5. Эндрюс Г.Р. Основы многопоточного, параллельного и распределенного программирования.