Сучасні інформаційні технології далекі від машинних кодів. Сучасне системне програмування – це не команди процесора і не управління його роботою. Історія мов програмування – це розвиток сенсу і синтаксису, але концептуальні основи комп’ютерного справи нашого століття не відрізняються від концепції минулого: дані та оператори. Все ті ж конструкції циклу, умов і вибору.
Системне програмування – це накопичений досвід у сучасній ретроспективі: програмно-апаратна складова інформаційної системи повинна працювати стабільно і безперервно, а до кожному користувачу має бути забезпечений належний індивідуальний підхід.
Програмування та системи
Мова програмування – це синтаксис і семантика в їх розумінні розробником. Асемблер – унікальний мова програмування, простий послідовний конвеєр команд. Сказати, що його синтаксис визначається процесором і логікою материнської плати можна, але простіше визначити: системне програмування і програма на асемблері – це початок почав.
Системи мають безліч визначень, але в самому примітивному сенсі, який важко спростувати: система – це дані і їх функціональність, як єдине ціле. Система може складатися з елементів і бути частиною структури більш високого порядку.
Системне програмування – це не складання систем (в прямому сенсі). У минулому столітті системні програмісти більше приділяли увагу процесору, програмуючи на машинних мовах. У цьому столітті вони приділяють більше уваги користувачеві інформаційних систем та їх застосунків.
Прикладне програмування – це рішення реальних задач, до яких не відносять елементи керування програмним і апаратним забезпеченням. У цьому контексті, системне програмування – це попередник і супутник системного адміністрування.
Створення систем рівним чином відноситься до всіх варіантів програмування, серед яких можна виділити безліч напрямків: гіпертекст, парсинг, розпізнавання, міграція даних, віртуалізація, пошук і аналітика, … Побудова моделі і її програмування – безперервний процес систематизації знань з розв’язуваної задачі, в якій майже завжди можна виділити системну і прикладну складові.
Престиж і відповідальність
Характерна риса програмування в минулому столітті – системне і прикладне програмування – це, насамперед, різні мови. Існувала їх градація на нижній та верхній рівень. Фортран, Кобол або PL/1 істотно відрізнялися від коду операційних систем, компіляторів та інтерпретаторів. Але навіть на мовах високого рівня допускалося писати машинний код (С/С++, Pascal).
Той факт, що мови високого рівня допускали асемблерні вставки, каже: не все передбачив розробник компілятора (інтерпретатора). Факт наявності в сучасних мовах можливості створення і виконання команди в процесі роботи програми – спадщина минулого на більш високому рівні.
Престижність професії системного адміністратора або системного програміста визначалася вимогою стабільності роботи комп’ютера, операційної системи або програми. Відповідальність була «мінімальної». Сьогодні обсяг даних і функціональність прикладного програмного забезпечення настільки великі, що рівень відповідальності об’єктивно трансформувався на значно вищий рівень.
Центр ваги змістився в область розподіленої обробки інформації за допомогою веб-ресурсів. Звичайне програмування (С/С++, С#, Pascal, …) зберіг своє значення. Залишилися також локальні завдання. Однак основна маса завдань «пішла» в інтернет та системне програмування перейшло на наступний рівень: установка серверів, налаштування мереж і протоколів зв’язку, оптимізація хостингу, обслуговування віртуальних машин.
З одного боку, розширилася сфера системного адміністрування, з іншого – без написання спеціальних скриптів контролю і управління, багато програмно-апаратні системи не будуть працювати, а в разі збою – їх неможливо буде відновити.
Істотно зросла функціональність інформаційних систем, збільшився обсяг даних, що підлягають обробці, на одному комп’ютері тепер може одночасно працювати десяток віртуальних машин. Ціна помилки системного програміста – життя компанії, яка використовує інформаційну систему.
Мови систем
Мови системного програмування в сучасному світі – абстрактне поняття. Раніше було просто: асемблер або мову машинних кодів. Мова високого рівня: синтаксичні конструкції словами природної мови. Сьогодні мовою системного програмування можна вважати дві-три команди завантажувача і далеко не кожен системний адміністратор зможе правильно налаштувати процес встановлення складного програмно-апаратного комплексу.
Приклад. Встановити Debian & Proxmox VE – це не просто виконати чек-лист конкретних дій. Це реальна потреба щось «подпрограммировать» в конкретній ситуації. В першу чергу – це протоколи налаштування мережі, а потім по пунктах залежно від призначення кожної віртуальної машини, її функціональності і правил взаємодії.
Особлива категорія мов систем – файли налаштування. По суті – це звичайні текстові файли. Як правило, потрібно правильно писати дві-три позиції в одній конструкції, але перше може бути кілька, а варіантів друге – безліч.
Кваліфікований системний програміст налаштує класичну тріаду: Apache, PHP і MySQL за 30 хвилин. Звичайний програміст буде шукати помилки і не зможе отримати працюючий результат за цілий день. Ціна знання визначає витрачений час, але багато з них приходять з досвідом. Зовні – це не програмування, але кожен конфігураційний файл управляє конкретним продуктом на системному рівні.
Фактично тепер системне програмне забезпечення – це конкретна область системних завдань. Як буде вирішено конкретне завдання – не важливо. Не має значення, що програму писати не потрібно, але завдання має бути вирішено, інформаційна система зобов’язана стабільно і безперервно працювати на конкретному системному фундаменті.
Стиль роботи програміста
Знати та вміти – мало, потрібно робити так, щоб все було ясно. Коментарі в області системного програмування істотно змінилося. Раніше вважалося нормою пояснити що робить конкретна команда одним або двома словами. Сьогодні одна команда може пояснюватися сторінкою щільного тексту.
Розробник сучасної операційної системи або інструменту для управління прикладним програмним забезпеченням докладає численні коментарі та керівництва. У конкретній ситуації цього буде не достатньо. У рідкісних випадках системний продукт, наприклад, Proxmox VE, стане з першої спроби, і не порушить функціонування мережі. В більшості випадків доведеться шукати додаткову інформацію і розбиратися з суміжних питань системного програмування і управління: файлова система, протоколи зв’язку, моніторинг, логування, політики безпеки і пр.
Кваліфікований системний програміст (адміністратор) в обов’язковому порядку буде фіксувати свої дії, описувати використані команди і моніторити всі події. Ідеальний стиль роботи фахівця – коли колега може замінити його в будь-який момент часу.
Системне програмування і користувачі
Раніше системне програмування цікавив процесор, сьогодні в його компетенції знаходиться користувач. Управління користувачами – це системне програмування високого порядку, суттєвою відповідальності і престижне з точки зору оплати.
Спеціаліст, що керує доступом до інформаційних ресурсів, це системний програміст, «оснащений» знаннями з психології, соціології та юридичним аспектам конкретної компанії. Тут немає асемблера, немає машинних кодів. Є кілька команд і можливість писати спеціальні сценарії доступу.
Помилка в сценарії роботи користувача – порушення периметра безпеки, проникнення зловмисника і крах системи або крадіжка інформації.
Працювати з процесором набагато простіше: він просто виконує послідовність команд. Працювати з людиною складно: він може змінювати алгоритм своєї поведінки, діяти за кількома напрямами і розподіляти свої дії по часу.
Системне і прикладне
Сучасна інформаційна система рідко пишеться з нуля. Найчастіше в розпорядження програміста (адміністратора) надходить вказівка, що треба поставити і що повинно бути в підсумку.
В результаті роботи системного програміста (адміністратора) виходить програмно-технічна конструкція, в якій можуть працювати додатки (прикладне програмне забезпечення) і користувачі.
Добре побудований будинок і добре налагоджений сервіс – ідеальне рішення при будь-яких нюанси в компаніях різного профілю. Не важливо, що не доведеться писати команди на асемблері, важливо, що написані команди забезпечать стабільну та безперебійну роботу.