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

Ідея Стівена полягає в тому, що мови вивчаються одним способом: “Коли ми розуміємо, що люди говорять, і коли розуміємо, що читаємо”. Він розрізняє вивчення та засвоєння мови. Вивчення – це процес, коли людина свідомо вивчає правила граматики, фрази та лексику, а потім свідомо намагається застосовувати їх під час розмови. Засвоєння, з іншого боку, є несвідомим процесом, який відбувається природним чином, коли людина читає і розмовляє новою мовою. Засвоєння відбувається, коли людина занурюється в мовне середовище, де вона слухає і читає історії, і зрештою починає засвоювати граматичні правила, не думаючи про них активно. Це стається, коли людина сприймає багато зрозумілого матеріалу і починає інтуїтивно засвоювати його.

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

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

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

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

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

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

Просто мої думки!