Діалог з абітурієнтом про нову спеціалізацію «Системне програмування»
Викладач (В): Доброго дня! У нас відкрилася нова спеціалізація – «Системне програмування».
Абітурієнт (А): Та й шо?
В: Ми запрошуємо Вас поступити до нас на цю нову спеціалізацію.
А: І чим вона краща за інші спеціальності програмного напрямку?
В: Вона не краща і не гірша. Вона інша, тобто відрізняється від вже існуючих.
А: І чим саме відрізняється?
В: Щоб відповісти на Ваше питання мені доведеться коротко розповісти про всі наші спеціальності.
На спеціальності «Комп’ютерні науки» основну увагу приділяють розробці та аналізу різноманітних алгоритмів. Найбільш докладно ці питання розглянуто у книзі Дональда Кнута «Искусство программирования». На спеціальності «Програмна інженерія» основний наголос робиться на проектуванні великих програмних систем. В найбільш концентрованому вигляді про це пише Гради Буч у книзі «Объектно-ориентированное проектирование».
На відміну від цих двох спеціальностей, де готують фахівців з проектування та розробки програмного забезпечення, на спеціалізації «Системне програмування» основні зусилля буде спрямовано на широке коло питань, пов’язаних з практичною реалізацією та впровадженням програмних продуктів.
А: Тобто Ви будете вчити, як писати програми за готовими алгоритмами?
В: Не зовсім так. Як написати програму за готовим алгоритмом Вас можуть навчити і на курсах з програмування. Допускаю навіть, що ця програма запрацює і виведе на екран результат. Але ми будемо вчити своїх студентів не просто як написати програму, а як написати хорошу працюючу програму.
А: Поясніть, що означає хороша працююча програма. Це програма без помилок?
В: І це також. Але реальні програмні продукти працюють не самі по собі. Вони взаємодіють з апаратними засобами, операційною системою, іншими програмами. Вони обмінюються даними з іншими програмами, в тому числі через мережу. Крім того, в процесі експлуатації програми ці умови можуть змінюватися, і тоді, можливо, доведеться підлаштовувати програму під ці зміни. Системний програміст має враховувати всі ці особливості при створенні програмних продуктів. Звичайно, ми розраховуємо на те, що програму спроектовано правильно і в ній використовуються найкращі з відомих нам алгоритмів.
А: А Ви можете навести якийсь приклад того, що має враховувати системний програміст?
В: Звичайно. Наприклад, фірми Intelі AMD, намагаючись підвищити швидкодію своїх процесорів доволі часто пропонують нові команди для роботи з дійсними числами. Ці команди здатні обробляти одразу цілі блоки даних і завдяки цьому дійсно прискорюють роботу програм. Але такі програми можуть відмовитися працювати на комп’ютерах з процесорами, які не підтримують такі команди.
А: І що робити?
В: Взагалі то ми рекомендуємо використовувати у програмах стандартні команди, які підтримуються всіма процесорами. Але якщо заради підвищення швидкості роботи програми необхідно скористатися розширеним набором команд, це треба робити дуже обережно, тільки в окремих коротких фрагментах програми. Ці фрагменти мають бути добре задокументовані і допускати іншу реалізацію на процесорах без розширеного набору команд.
А: Але ж це дуже складно – робити кілька версій програм замість одної.
В: Ну, по-перше, ніхто і не говорив, що бути системним програмістом просто. А, по-друге, системному програмісту зовсім не обов’язково реалізовувати все самому. Достатньо пояснити це іншим, «класичним» програмістам, а потім проконтролювати результат їх роботи.
А: А які посади можуть обіймати Ваші випускники? Я чув, що зараз на IT-фірмах потрібні DevOps’и, тільки не зовсім розумію, чим вони займаються.
В: Взагалі-то не існує прямої залежності між спеціальностями, за якими навчаються студенти, і тими посадами, які вони потім обіймають на IT-фірмах. Ми намагаємося дати нашим студентам фундаментальні знання, які дозволять їм потім працювати на різних посадах (після поглибленого вивчення специфіки вимог до даної посади безпосередньо на фірмі). Але професіяDevOps engineer, мабуть, найкраще підходить нашим випускникам, оскільки він одночасно має бути і програмістом, і системним адміністратором та займається питаннями автоматизації життєвого циклу програмного продукту (більш детально про професію DevOps можна прочитати за посиланням https://dou.ua/lenta/articles/devops-engineer-position/).
А: Цікаво! Але Ви називали основні книги для інших спеціальностей і не назвали такої книги для вивчення системного програмування.
В: Це старі добрі книги, які мають бути у бібліотеці будь-якого серйозного програміста, і системного також. Правда, «Искусство программирования» – це трьохтомник, наразі виходить четвертий, а всього заплановано сім томів; книга Гради Буча витримала кілька видань, які досить суттєво відрізняються за змістом. На жаль, я не можу назвати одної такої книги для вивчення системного програмування, тому приходьте до нас, на освітню програму «Системне програмування», і, можливо, ми разом напишемо таку книгу.


