На початку вересня 2021 року нарешті вийшов Exercism v3. Анджеліка Тиборська - одна з ключових мейнтейнерок, які допомогли нам перетнути фінішну межу. Крім того, що вона співтворець навчальних вправ і силабусу для Elixir, Анджеліка була одним із ключових голосів протягом усієї розробки v3, додаючи ідеї та проникливі думки впродовж усього процесу створення. Вона - одна з ключових контрибʼюторів Exercism.
У цій відеопрезентації Анджеліка розповідає про те, які проблеми мала вирішити v3, про деякі ключові нововведення на платформі та про те, як усе поєднується, розглядаючи Analyzer, Representer і нові навчальні вправи.
Транскрипт
Історія Exercism
Exercism існує вже досить давно. Його створила 2013 року Катріна Оуен як інструмент для своїх студентів. У v1 це був просто набір цікавих практичних вправ. У v2 він став платформою для безкоштовного наставництва з коду.
v3 🚀 01.09.2021
Першого вересня вийшла третя версія Exercism.
У цьому відео я розповім про зміни у v3, поясню, чому їх зробили і як вони покращать досвід роботи з Exercism.
Про мене
Це я [фото показано на 0:38]. Я Анджеліка. Разом зі своїм співмейнтейнером Тімом ми створили інструментарій і понад 30 навчальних вправ для треку Elixir у Exercism v3. Я вірю, що в новій формі Exercism має потенціал стати найкращим інструментом для вивчення нових мов програмування.
Що нового у v3?
Що нового в Exercism v3? Коротка відповідь: багато.
Усі основні зміни, запроваджені у v3, покликані вирішити найбільші проблеми, з якими люди стикалися у v2.
Проблеми у v2
Є три ключові проблеми, які вирішує v3.
Перша: складна початкова підготовка. Друга: практика коду без навчання. Третя: довгий час очікування відповіді наставника.
Проблема 1. Складна початкова підготовка
Проблема номер один: складна початкова підготовка. Щоб почати з Exercism, треба встановити Exercism CLI, мову програмування, яку ми хочемо спробувати, і почуватися впевнено в терміналі. Треба налаштувати редактор для підсвічування синтаксису нової мови тощо. Для досвідчених розробників уся ця підготовка - незручна втрата часу. А для початківців вона може стати перешкодою, яку неможливо подолати.
Рішення: дозволити людям писати код у браузері. Жодної початкової підготовки.
Щоб це стало можливим, в Exercism тепер є вебредактор, і кожна мова програмування має власний Test Runner, призначений для запуску тестів для вправ Exercism.
Вебредактор
Це вебредактор [скриншот показано на 2:25]. Він має дві панелі: вихідний код ліворуч, а вказівки та набір тестів праворуч.
У нього немає жодних вишуканих можливостей, бо його мета - не замінити улюблені інструменти. Його мета - дозволити відкласти встановлення всіх потрібних інструментів і залежностей доти, доки ми не відчуємо себе впевненіше з новою мовою програмування і не зрозуміємо, що хочемо працювати з нею й надалі.
Вебредактор цілком необовʼязковий. Можна й надалі користуватися CLI і працювати з улюбленими інструментами на власному компʼютері.
Test Runner
Щоб вебредактором можна було користуватися, потрібен спосіб запускати тести проти рішення, яке ми пишемо в браузері. Це завдання Test Runner.
Кожна мова на Exercism має власний Test Runner. Test Runner відповідає за звітування про результати тестів, але це не все. Він також має витягти тіло тесту, щоб ми знали, який код виконується, і могли зрозуміти повідомлення про помилку, а також перехопити вивід тесту, щоб налагоджувати код у браузері за допомогою puts, print, console.log чи будь-якої іншої функції друку, яку пропонує мова.
Test Runner критично важливий для розвʼязування вправ у браузері, але його також використовуватимуть для рішень, надісланих через CLI. Переглядаючи рішення спільноти для певної вправи або наставляючи студента, можна побачити, чи проходить рішення тести, без потреби завантажувати його й запускати локально.
Проблема 2. Практика коду без навчання
Проблема номер два: Exercism - це платформа для практики коду, але вона не пропонувала жодних ресурсів для вивчення конкретної мови з нуля. Це доводилося робити деінде.
Вправи на Exercism задумані цікавими й складними, але іноді навіть найлегші з них занадто важкі, щоб бути входом у нову мову програмування. Особливо це стосується випадків, коли ми намагаємося вивчити мову з цілком іншим синтаксисом або навіть із іншою парадигмою програмування.
Рішення: запропонувати навчання поряд із практикою.
Із додаванням силабусу й навчальних вправ Exercism тепер став чудовим інструментом, щоб одразу поринути в нову мову програмування.
Силабус
Що таке силабус? Силабус - це дерево концепцій, з яких складається кожна мова програмування. Силабус унікальний для кожного треку на Exercism, бо кожна мова програмування різна й має різні концепції.
Концепції залежать одна від одної, утворюючи різні гілки дерева. Щоб відкрити наступну концепцію, потрібно вивчити попередню в гілці.
Наприклад, це початок силабусу Elixir [скриншот показано на 5:10]. Він починається з концепції під назвою «basics», яка охоплює: як визначити модуль, як визначити іменовану функцію і де знайти документацію для стандартної бібліотеки. Ці знання потрібні для кожної вправи Exercism. Щоб відкрити будь-яку іншу концепцію, треба вивчити basics. Можна вивчити, наприклад, булеві значення (англ. Boolean), а коли ми знаємо булеві значення, можна вивчити вираз cond тощо.
Для наочності, це повний силабус Elixir [скриншот показано на 6:16]. Наразі він містить понад 50 концепцій, але його все ще потрібно розширювати.
Угорі ми знайдемо такі концепції, як: рядки тексту (англ. string), масиви, словники й кортежі. У середині: модуль Enum, регулярні вирази, структури й написання специфікацій типів. А в кінці: протоколи, процеси й задачі.
Навчальні вправи
Концепції із силабусу ми вивчаємо, розвʼязуючи навчальні вправи. Навчальні вправи відрізняються від практичних вправ. Вони створені, щоб навчати програмних концепцій студентів, які зовсім не знають конкретної мови програмування, але знають принаймні одну іншу мову та базові концепції програмування.
Вступ
Кожна навчальна вправа починається зі вступу. Вступ описує базову інформацію про концепції, яких навчає ця вправа. Більшість навчальних вправ навчають однієї концепції, але бувають винятки.
Цей приклад показує вступ про словники в Elixir [скриншот показано на 7:12]. Він пояснює, що таке словники, як визначити словник, як отримати значення зі словника тощо. Він містить кілька прикладів коду, щоб показати новий синтаксис, але їх не надто багато, щоб не можна було просто скопіювати вступ і розвʼязати вправу.
Вказівки
Далі йдуть вказівки. Вказівки для навчальних вправ поділені на невеликі завдання. Завдання створені так, щоб спонукати студента використовувати найважливіші частини певної концепції.
Наприклад, навчальна вправа, яка вчить словників, спонукатиме студента створити словник, потім прочитати значення зі словника, потім оновити значення у словнику, потім отримати всі ключі зі словника тощо.
До кожної навчальної вправи є сюжет, але сюжет не такий уже й важливий. Він потрібен, щоб не доводилося використовувати безглузді значення на кшталт «foo bar» і «1 2 3», але він не відіграє великої ролі у вправі, як у практичних вправах.
Підказки
До кожного завдання додається невеликий список підказок на випадок, якщо студент застрягне. Підказки часто підказують, яку саме функцію використати в якому завданні, і ведуть нас до документації для цієї функції.
Практика концепцій
Але розвʼязати лише одну навчальну вправу недостатньо, щоб справді опанувати концепцію. Її треба ще й практикувати. Саме тому ми переглянули всі практичні вправи, які вже існували у v2, і вибрали кілька, які можна використати для практики кожної концепції.
Ось який вигляд має одна концепція в дереві [скриншот показано на 9:01]. Крапки позначають вправи. Перша крапка з іконкою лампочки - це навчальна вправа, а решта крапок - практичні вправи.
Ось який вигляд має концепція після розвʼязання кількох вправ [скриншот показано на 9:37]. Звернімо увагу, що деякі практичні вправи для цієї концепції все ще заблоковані, хоча навчальну вправу завершено. Це тому, що практичні вправи не обмежуються практикою однієї концепції. Можливо, нам доведеться вивчити більше концепцій, ніж просто атоми [концепцію показано на скриншоті], перш ніж ці вправи відкриються.
Навчальні вправи мають бути тривіальними для людей, які вже вільно володіють певною мовою. Але хвилюватися не варто: вони цілком необовʼязкові. Можна перемкнутися з режиму навчання на режим практики, що дасть негайний доступ до всіх цікавих практичних вправ без потреби спершу проходити силабус.
Силабус = величезна праця
Одна важлива деталь, яку я мушу згадати, щоб скоригувати очікування, - розробка силабусу вимагає ВЕЛИЧЕЗНИХ зусиль. Не кожен трек має достатньо активних мейнтейнерів, щоб мати силабус, готовий прямо зараз.
На момент запису цього відео [4 вересня 2021 року] навчальні вправи доступні лише в: Common Lisp, C#, Elm, Elixir, F#, Go, Java, JavaScript, Python, Ruby, Rust і Swift. Трек Julia незабаром запустить свій силабус.
Проблема 3. Довгий час очікування відповіді наставника
Проблема номер три: довгий час очікування відповіді наставника. Не кожен трек має достатньо наставників. У деяких треках наставників так мало, що час очікування на наставництво може сягати місяця. Це завжди дуже засмучувало студентів. Це настільки ключова проблема для Exercism, що її вирішують із трьох різних боків.
Автоматизований зворотний звʼязок
Рішення номер 1 - надавати автоматизований зворотний звʼязок. Багато відгуків, які наставники пишуть студентам, повторюються. Можливість автоматично виявляти типові помилки й повідомляти про них студенту напряму - це змінює правила гри.
Отримання автоматизованого зворотного звʼязку про типові помилки дозволить студентові покращити своє рішення ще до того, як він попросить наставництва, що також полегшить роботу наставника. Це позбавить наставників потреби згадувати нудні деталі на кшталт snake_case проти camelCase і дозволить зосередитися на суті рішення. У деяких випадках автоматизованого зворотного звʼязку буде достатньо, щоб задовольнити студента, і він навіть не проситиме наставництва.
У v3 є два типи інструментів для автоматизованого зворотного звʼязку: Analyzer і Representer.
Analyzer
Analyzer - це інструмент, який шукає в рішенні специфічні характеристики й повертає студентові список заздалегідь визначених коментарів про знайдене. Які саме характеристики - це цілком залежить від мови та конкретної вправи.
Наприклад, в Elixir дуже специфічна угода про іменування функцій і змінних. Одна з перевірок, яку Analyzer для Elixir робить для кожної вправи, - це перевірка всіх імен змінних та імен функцій. Якщо він знаходить імʼя, написане не в snake_case, він нагадає студентові про угоду про іменування.
Ще одна перевірка, яку може робити Analyzer для Elixir, - це виявлення використання певного модуля. Наприклад, ця перевірка [скриншот показано на 13:20] на невикористання модуля Enum стосується саме навчальної вправи з рекурсії. Використання модуля Enum нівелює сенс навчальної вправи, тож Analyzer нагадає студентові цього не робити, а натомість використати рекурсію.
Representer
Другий інструмент, який допоможе нам надавати автоматизований зворотний звʼязок на Exercism, - це Representer. Representer бере рішення й прибирає несуттєві частини. Він нормалізує форматування, прибирає коментарі та документацію й замінює імена функцій і змінних на заповнювачі.
Результат роботи Representer називається представленням. Кожне рішення, надіслане на Exercism, передаватиметься Representer, і його представлення зберігатиметься на платформі разом із рішенням.
Наставники матимуть доступ до інтерфейсу, де вони зможуть переглядати представлення надісланих рішень. Для кожного унікального представлення наставник може залишити відгук щодо цього представлення. Потім цей відгук показуватиметься кожному студентові, який надішле схоже рішення з тим самим представленням. Наставникові достатньо написати відгук один раз, і він досягне всіх, кому потрібен.
Самі Representer уже реалізовані й розгорнуті для деяких мов, але на момент запису цього відео [4 вересня 2021 року] інтерфейс для наставників ще відсутній на платформі, тож треба трохи зачекати, доки ця можливість стане повністю доступною.
Уникнення небажаних сесій наставництва
Ще одне рішення проти довгих черг на наставництво - уникати небажаних сесій наставництва. У v2 наставництво було обовʼязковим для основних вправ. Надсилання основної вправи означало, що ми автоматично просимо наставництва, і не могли перейти до наступної основної вправи без схвалення наставника. Багато студентів вивчали мову, виконуючи основні вправи, тож наставництво було їм потрібне, щоб провести їх через процес навчання.
Тепер це не так. Навчальну роль основних вправ і схвалення наставника перебрали на себе навчальні вправи й Analyzer. У v3 наставництво завжди необовʼязкове і його треба просити явно.
Запит на наставництво
Щоб попросити наставництва, треба відповісти на 2 запитання: «Чого хочеться навчитися на цьому треку?» і «Як наставник може допомогти з рішенням?» Знаючи заздалегідь, які в студента очікування від сесії наставництва, наставник може вибрати ті запити на наставництво, які найкраще відповідають його знанням і стилю наставництва, що робить імовірнішим, що обидві сторони залишаться задоволені сесією.
Черга наставництва та обрані
У новій черзі наставництва наставники можуть бачити статистику про історію наставництва студента. Вони бачать, який студент ніколи раніше не проходив наставництва й може потребувати ретельнішого розгляду, а який студент проходив наставництво багато разів і розуміє, як воно працює.
Наставники також нарешті можуть знаходити студентів, яких вони наставляли раніше, і розвивати з ними стосунки. Наставники навіть можуть додавати студентів до обраних і використовувати це, щоб надавати пріоритет наставництву студентів, з якими раніше мали добрий досвід.
Списки блокування
Після кожної сесії наставництва і студент, і наставник мають можливість заблокувати іншу людину. Є два списки блокування: заблоковані студенти й заблоковані наставники. Якщо я, як наставник, заблокую студента, він усе одно може згодом наставляти мене. Інша людина, звісно, не знатиме, що її заблокували, тож не зможе помститися.
Заблокувати когось можна з будь-якої причини, але якщо ця людина порушує Кодекс поведінки, обовʼязково повідомте про неї окремо, щоб захистити інших користувачів.
Помʼякшення негативних наслідків довгого очікування
Нарешті, останній крок у подоланні проблеми довгого очікування - це подбати про те, щоб навіть попри необхідність іноді чекати, негативні наслідки очікування були мінімальними. У v3 очікування наставництва не заважає розвʼязувати інші вправи. Ми все ще можемо просуватися треком.
Сесію наставництва може завершити будь-яка зі сторін. Якщо ми студенти й нам не подобається підхід, який застосовує певний наставник, ми завжди можемо попросити іншого підходу або вирішити залишити сесію. Незалежно від того, як завершилася сесія наставництва, студент може попросити нову сесію наставництва з іншим наставником для того самого рішення.
Слоти наставництва
Для кожного треку можна мати від 1 до 4 слотів наставництва. Кілька слотів наставництва допомагають, коли ми хочемо попросити наставництва для складної вправи, яку навряд чи швидко розглянуть, і водночас мати змогу отримати наставництво з інших вправ.
Слоти наставництва можна відкрити, набираючи репутацію. Репутацію дають за публікацію своїх рішень для загального перегляду, за наставництво студентів і за внесок у будь-який з репозиторіїв Exercism. Це означає, що студенти, які більше долучаються до платформи, можуть отримати більше наставництва.
Підсумок
Це деякі з основних змін, які відбулися в Exercism першого вересня 2021 року.
Ми додали навчальні вправи, щоб можна було вчитися, не залишаючи платформи, вебредактор, щоб можна було писати код без нічого не встановлюючи, а також Analyzer і Representer, щоб можна було одразу отримувати автоматизований зворотний звʼязок. Ми також прибрали багато дратівливих перепон із процесу наставництва.
І є ще багато іншого нового, що варто дослідити: наш розділ для контрибʼюторів, значки, нові профілі, сторінка подорожі з усією історією на Exercism і багато іншого.
Завітаймо на exercism.org і спробуймо.
Дякую.