Системное программирование - это престижно, но ответственно
Современные информационные технологии далеки от машинных кодов. Современное системное программирование - это не команды процессора и не управление его работой. История языков программирования - это развитие смысла и синтаксиса, но концептуальные основы компьютерного дела нашего века не отличаются от концепции прошлого: данные и операторы. Все те же конструкции цикла, условий и выбора.
Системное программирование - это накопленный опыт в современной ретроспективе: программно-аппаратная составляющая информационной системы должна работать стабильно и непрерывно, а к каждому пользователю должен быть обеспечен надлежащий индивидуальный подход.
Программирование и системы
Язык программирования - это синтаксис и семантика в их понимании разработчиком. Ассемблер - уникальный язык программирования, простой последовательный конвейер команд. Сказать, что его синтаксис определяется процессором и логикой материнской платы можно, но проще определить: системное программирование и программа на ассемблере - это начало начал.
Системы имеют множество определений, но в самом примитивном смысле, который трудно опровергнуть: система - это данные и их функциональность, как единое целое. Система может состоять из элементов и быть частью структуры более высокого порядка.
Системное программирование - это не составление систем (в прямом смысле). В прошлом веке системные программисты больше уделяли внимание процессору, программируя на машинных языках. В этом веке они уделяют больше внимания пользователю информационных систем и их приложениям.
Прикладное программирование - это решение реальных задач, к которым не относят элементы управления программным и аппаратным обеспечением. В этом контексте, системное программирование - это предшественник и спутник системного администрирования.
Создание систем равным образом относится ко всем вариантам программирования, среди которых можно выделить множество направлений: гипертекст, парсинг, распознавание, миграция данных, виртуализация, поиск и аналитика, ... Построение модели и ее программирование - непрерывный процесс систематизации знаний по решаемой задаче, в которой почти всегда можно выделить системную и прикладную составляющие.
Престиж и ответственность
Характерная черта программирования в прошлом веке - системное и прикладное программирование - это, прежде всего, разные языки. Существовала их градация на нижний и верхний уровень. Фортран, Кобол или PL/1 существенно отличались от кода операционных систем, компиляторов и интерпретаторов. Но даже на языках высокого уровня допускалось писать машинный код (С/С++, Pascal).
Тот факт, что языки высокого уровня допускали ассемблерные вставки, говорит: не все предусмотрел разработчик компилятора (интерпретатора). Факт наличия в современных языках возможности создания и выполнения команды в процессе работы программы - наследие прошлого на более высоком уровне.
Престижность профессии системного администратора или системного программиста определялась требованием стабильности работы компьютера, операционной системы или приложения. Ответственность была «минимальной». Сегодня объем данных и функциональность прикладного программного обеспечения столь обширны, что уровень ответственности объективно трансформировался на значительно более высокий уровень.
Центр тяжести сместился в область распределенной обработки информации посредством веб-ресурсов. Обычное программирование (С/С++, С#, Pascal, ...) сохранило свое значение. Остались также локальные задачи. Однако основная масса задач «ушла» в интернет и системное программирование перешло на следующий уровень: установка серверов, настройка сетей и протоколов связи, оптимизация хостинга, обслуживание виртуальных машин.
С одной стороны, расширилась сфера системного администрирования, с другой - без написания специальных скриптов контроля и управления, многие программно-аппаратные системы не будут работать, а в случае сбоя - их невозможно будет восстановить.
Существенно возросла функциональность информационных систем, увеличился объем данных, подлежащих обработке, на одном компьютере теперь может одновременно работать десяток виртуальных машин. Цена ошибки системного программиста - жизнь компании, которая использует информационную систему.
Языки систем
Языки системного программирования в современном мире - абстрактное понятие. Раньше было просто: ассемблер или язык машинных кодов. Язык высокого уровня: синтаксические конструкции словами естественного языка. Сегодня языком системного программирования можно считать две-три команды загрузчика и далеко не каждый системный администратор сможет правильно настроить процесс установки сложного программно-аппаратного комплекса.
Пример. Установить Debian & Proxmox VE - это не просто выполнить чек-лист конкретных действий. Это реальная потребность что-то «подпрограммировать» в конкретной ситуации. В первую очередь - это протоколы настройки сети, а затем по пунктам в зависимости от назначения каждой виртуальной машины, ее функциональности и правил взаимодействия.
Особенная категория языков систем - файлы настройки. По сути - это обычные текстовые файлы. Как правило, нужно правильно писать две-три позиции в одной конструкции, но первых может быть несколько, а вариантов вторых - множество.
Квалифицированный системный программист настроит классическую триаду: Apache, PHP и MySQL за 30 минут. Обычный программист будет искать ошибки и не сможет получить работающий результат за целый день. Цена знания определяет затраченное время, но многие из них приходят с опытом. Внешне - это не программирование, но каждый конфигурационный файл управляет конкретным продуктом на системном уровне.
Фактически теперь системное программное обеспечение - это конкретная область системных задач. Как будет решена конкретная задача - не важно. Не имеет значения, что программу писать не потребуется, но задача должна быть решена, информационная система обязана стабильно и непрерывно работать на конкретном системном фундаменте.
Стиль работы системного программиста
Знать и уметь - мало, нужно делать так, чтобы все ясно было. Комментирование в области системного программирования существенно изменилось. Раньше считалось нормой вещей пояснить что делает конкретная команда одним или двумя словами. Сегодня одна команда может поясняться страницей плотного текста.
Разработчик современной операционной системы или инструмента для управления прикладным программным обеспечением прилагает многочисленные комментарии и руководства. В конкретной ситуации этого будет не достаточно. В редких случаях системный продукт, например, Proxmox VE, станет с первой попытки и не нарушит функционирование сети. В большинстве случаев придется искать дополнительную информацию и разбираться по смежным вопросам системного программирования и управления: файловая система, протоколы связи, мониторинг, логирование, политики безопасности и пр.
Квалифицированный системный программист (администратор) в обязательном порядке будет фиксировать свои действия, описывать использованные команды и мониторить все события. Идеальный стиль работы специалиста - когда коллега может заменить его в любой момент времени.
Системное программирование и пользователи
Раньше системное программирование интересовал процессор, сегодня в его компетенции находится пользователь. Управление пользователями - это системное программирование высокого порядка, существенной ответственности и престижное с точки зрения оплаты.
Специалист, который управляет доступом к информационным ресурсам, это системный программист, «оснащенный» знаниями по психологии, социологии и юридическим аспектам конкретной компании. Здесь нет ассемблера, нет машинных кодов. Есть несколько команд и возможность писать специальные сценарии доступа.
Ошибка в сценарии работы пользователя - нарушение периметра безопасности, проникновение злоумышленника и крах системы или кража информации.
Работать с процессором гораздо проще: он просто выполняет последовательность команд. Работать с человеком сложно: он может менять алгоритм своего поведения, действовать по нескольким направлениям и распределять свои действия по времени.
Системное и прикладное
Современная информационная система редко пишется с нуля. Чаще всего в распоряжение системного программиста (администратора) поступает указание, что нужно поставить и что должно быть в итоге.
В результате работы системного программиста (администратора) получается программно-техническая конструкция, в которой могут работать приложения (прикладное программное обеспечение) и пользователи.
Хорошо построенное здание и хорошо настроенный сервис - идеальное решение при любых нюансах в компаниях разного профиля. Не важно, что не придется писать команды на ассемблере, важно, что написанные команды обеспечат стабильную и непрерывную работу.