Мене вже давно турбує питання, що, як на мене, спеціалісти з безпеки недостатньо добре працюють у напрямку популяризації своїх ризиків та навчання людей побудові безпечних рішень.

Мій тезис полягає в тому, що фахівці з безпеки просто не бачать складності навчального процесу і не враховують педагогічні досягнення, які ми бачимо і до яких звикли в інших сферах ІТ. Ми звикли до цього комфорту і не хочемо напружуватися більше, ніж потрібно. А потреба в безпеці не завжди яскраво виражена в нашій роботі, що створює конфлікт інтересів.

Нижче я приведу декілька прикладів які на мою думку показують що спільнота мов програмування вчить своїх людей краще ніж безпечники.

  1. Приклад документації з 2000-х, коли фізичне зберігання даних у базі даних було важливим аспектом. SQL Server BOL (вибачаюся, не знайшов старе посилання на MSDN) Порівняйте із сучасною документацією. Зараз дуже багато документації про практичні аспекти експлуатації. Про фундаментальні речі — мало. Це загалом галузевий тренд.

    Якщо вже про це зайшлося, то кожна мовна конструкція такої складної мови програмування як SQL має кілька прикладних прикладів її використання:

    Це приклади, які реально знадобляться в роботі. А то часто розробники пишуть: «ось параметри, розбирайтесь самі». Це дуже погано для новачків, бо у них немає розуміння що конкретно ім потрібно, і що правильно.

  2. Приблизно з 2010 року почався великий рух із популяризації мов програмування, і в розділах документації закріпились два важливих елементи:

    • Quick start (як без зайвих думок запустити щось робоче у себе)

    • Tutorials (приклади типових задач, які людина вирішуватиме з допомогою інструменту)

    Раніше наголос був на вивченні синтаксису та системної бібліотеки.

    Наголос на цих розділах зменшує страх (а він додає когнітивного навантаження) на початку навчання, коли щось іде не так. Через те що ти початківець, ти можеш ще не знати як розібратися із цими проблемами самостійно. Також це зменшує обсяг навчального матеріалу, бо ти не читаєш усе з початку до кінця, а засвоюєш матеріал маленькими порціями. Можна подивитися на MicroLearning тут. Це дуже добре працює в робочому середовищі, де є обмежений час на навчання, і ти не можеш засвоїти багато або складне.

  3. Продовжуючи тему навчання мовам програмування: У багатьох мовах з’явилася така техніка, як онлайн-пісочниці (де ти можеш вчити мову програмування, не встановлюючи нічого на комп’ютер). Це дуже допомагає популяризації, бо ти можеш показати приклад коду і результат, просто надіславши посилання. Повертаючись до навчання: це дозволяє людині вивчати мову, а не правила налаштування VS Code, чи не дай бог вивчати Emacs. До речі, це велика проблема: люди не продовжують навчання не тому, що щось складне, а тому, що важко встановити робоче середовище. Тобто усуваються перешкоди самому педагогічному процесу.

  4. Це все не просто робиться «від балди» (хоча й таке трапляється), але існує дослідницький напрям — ергономіка мов програмування. Ось важливе дослідження, яке намагалося вивчити, які запитання та завдання погано працюють у навчанні Rust на масштабі:

    Це, звичайно, піонерська робота, але вона важлива і справила вплив серед викладачів інформатики.

  5. Мабуть не зовсім репрезентативний приклад, але спробуйте порівняй Coq і Lean 4:

    В цілому, Lean 4 зараз активно розвивається в спільноті автоматичних доказів теорем. Coq, звісно, має свої позиції, і дуже гарні, але в аспектах популяризації мені здається суттєво програє. Я привів цей приклад, через те що автоматичний доказ теорем не менш складна штука ніж безпека аплікацій, і навіть тут ми бачимо що для навчання популяції ідей, треба йти більш людяно.

  6. Персонально мені дуже близька позиція із блога Соатока.

    Fundamentally, I believe the core problem here is a lack of available and trustworthy cryptography tools for developers to use.

Принаймні ці спостереження наводять мене на думку, що appsec (безпека додатків) може бути легше донесена до програмістів.