DataArt запустив безкоштовну платформу Kiddo — онлайн-задачник для школярів, які вивчають Python

11 січня
Денис Циплаков, Solution-архітектор DataArt
DataArt запустив безкоштовну платформу Kiddo — онлайн-задачник для школярів, які вивчають Python
Поповнити базу власними задачами може будь-хто, а вбудувати Kiddo на свій сайт не складніше, ніж плеєр YouTube. Про ідею дитячого освітнього майданчику та її реалізацію під час карантину розповів Денис Циплаков — Solution-архітектор DataArt, натхненник проекту.

ЩО ТАКЕ KIDDO?

Kiddo — платформа, де діти вчаться писати код на Python, розв’язуючи задачі зі швидким фідбеком. Написана користувачем нескладна програма через API керує сценами, на яких код миттєво візуалізується. Наразі таких сцен три: перша — лабіринт, яким бігає маленький єнот, збираючи печиво та рятуючись від монстрів, друга — більш хардкорна консоль, класичне середовище для розв'язання задач із програмування, третя — спеціальна версія лабіринту, яку ми назвали “Герой пандемії”.

img

Задача користувача — довести єнота до фінішу, відміченого прапором, зібрати печиво та не попастися монстру

Kiddo не претендує на роль підручника, початкові уявлення про програмування тут все ж потрібні. Але якраз посібників для початківців, вивчаючих Пайтон з нуля в інтернеті вистачає: наприклад, Telegram-канал Python Books чи сайт Pythonworld. Наша платформа може бути швидше доповненням до них, збіркою практичних задач. Втім, мені здається, що будь-який учень середньої школи за пару днів, а ймовірніше, навіть значно швидше розбереться, як розв'язувати задачі. До того ж на Kiddo достатньо підказок.

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

img

Поступово задачі ускладнюються, з'являються монстри, які рухаються та з якими можна боротися за допомогою бомб і гармат, самі доріжки починають змінювати конфігурацію при генерації рівня

Консоль не надто весела, це просто емулятор комп'ютерного терміналу. Проте там є нетривіальні задачі, де загалом доведеться покодити. Хоча й вони не вимагають титанічних зусиль — школяр з ними цілком впорається. Але головне, на цю сцену можна легко помістити хоч цілу методичку з задачами, скажімо, для першого курсу вузу. Дописати їх можна самостійно — під конкретний власний проект.

img

Для варіанту з консоллю на сайті Kiddo наразі представлено 23 задачі

Щоб вбудувати Kiddo до себе на сайт, потрібно просто скопіювати код вставки — як у плеєра YouTube.

Ми думаємо, що платформу можна використовувати також на конференціях чи, наприклад, на днях відкритих дверей (коли конференції запустяться, а двері нарешті відкриються). Гра для програмістів, з одного боку, встановлює мінімальний вхідний бар'єр, з іншого — це все ж не зовсім банальний хід, особисто мене він не дратує, на відміну від деяких форм традиційної реклами. Я розумію, що реклама на конференціях є необхідним злом :-) Але тут є спосіб зробити цю рекламу веселою та цікавою. Звісно, ми розраховуємо і на співпрацю з дитячими школами програмування — наразі ведемо переговори з однією з них, подивимось, що в нас вийде разом.

Чим відрізняється Kiddo?

Якщо ми подивимось на будь-який навчальний сайт, то побачимо три компоненти:

  1. Власне, підручник — виклад теоретичного матеріалу, відповідно до обраної методології навчання. Інакше кажучи, що, як і в якій послідовності ми розповідаємо.
  2. Практичні завдання — механізм, що дозволяє тобі зробити щось руками, припустимо, помацати певну технологію. Іноді цю частину може замінювати відеоплеєр, але на сучасних онлайн-платформах вона зазвичай представлена ​​у вигляді інтерактивного елемента.
  3. LMS (Learning Management System) — система керування курсом, яка відстежує ваш прогрес, записує у групу, проводить тести та іспити, роздає ачівки, а заодно уточнює, хто ви і звідки прийшли.

На навчальних сайтах ці три компоненти найчастіше злиті в єдине ціле. Це зрозуміло, оскільки кожен з них є продуктом з конкретною бізнес-метою, досягнення якої вимагає максимального залучення користувача. З тієї самої причини, елементи гейміфікаціі в LMS таких проектів часто виглядають дуже складно: квести з міжпланетними перельотами, інвентар, прокачування навичок персонажа. Зрозуміло, що так навчальні проекти намагаються наблизити до онлайн-ігор, просто щоб вони виглядали максимально привабливо. Але мені здається незручним, що такі продукти важко чи взагалі неможливо кастомізувати, а використовувати по частинах точно не можна — або бери цілком, або шукай інший. Отже вибір у користувача небагатий.

Існує й інша проблема — пробіл між зовсім дитячими програмами, де, припустимо, потрібно просто рухати кубики по екрану, та IDE, де ти працюєш цілком по-дорослому. Хоча частково проміжну нішу заповнюють гри про програмування, доступні в тому ж Steam, наприклад, TIS-100. Вони зазвичай нагадують ті, на яких я сам навчався років 30 тому на побутових комп'ютерах. Головне в них — швидкий фідбек-цикл: ти пишеш нормальну програму більш-менш дорослою мовою програмування та отримуєш миттєву візуалізацію: щось або хтось крутиться, бігає, стрибає тощо. Однак і такі ігри можна використовувати тільки як цілісний, самостійний продукт — вичленувати задачі, щоб вбудувати до власного освітнього циклу, неможливо.

Якось я спостерігав за молодшою ​​донькою, що розв’язувала задачі з програмування на російському освітньому порталі. Вона їх тоді наклацала близько 90 штук. Справедливості заради, треба сказати, що самі задачі досить простенькі, зате з візуалізацією та швидкістю фідбеку там все непогано. У процесі в мене виникла ідея: створити універсальний компонент, який можна перевикористати чи вбудовувати у сторонні проекти — робити з ним, що заманеться, створювати більш складні задачі. Його можна вдосконалювати як опенсорс і на цій базі вибудовувати різні цикли навчання. Головне, щоб користувач — припустимо, школяр — писав нескладний код, який одразу ж виконувався, причому на екрані відбувалося б щось досить веселе.

Як ми робили Kiddo?

Ідея платформи, а точніше компонента, який можна вбудувати до себе просто в браузері, виникла в мене понад рік тому. Хотілося, щоб хтось, кому це буде цікаво, зміг би його розширювати. Щоб у результаті можна було будувати глибокі і складні задачі, почавши з простих. Спочатку все розвивалося повільно, потім за допомогою внутрішньої ініціативи Talent Lab, де ми перевіряємо гіпотези та створюємо невеликі проекти для себе, справа пішла швидше.

Але, звісно, довершила справу самоізоляція. Часу стало більше, до того ж інтерес до проектів для дітей у колег-інженерів помітно збільшився. Напевно, багато хто на власному досвіді або досвіді близьких переконалися, наскільки складно буває зайняти дитину вдома.

Загалом ми вклались у 350 продакшен-годин. Правда, десь нам допомагали колеги, які тимчасово опинилися поза клієнтськими проектами. Ми рухались ітераціями, і внутрішніх альфа-релізів у нас був мало не десяток. Ну й оскільки ми діяли дискретно і силами тих, хто був вільним у певний момент, у нас накопичився титанічний технічний борг. Тому ми майже місяць займалися рефакторингом.

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

Що далі?

Наразі ми займаємось локалізацією платформи для різних країн, а її вихідний код виклали на GitHub. Але поповнювати базу задач і забрати Kiddo до себе на сайти можна будь-коли. Задачі пишуться на JavaScript, їх складність не обмежена нічим, крім фантазії автора. Ми маємо набір готових малюнків для задач із графічним полем, але якщо хочете, можна намалювати свої.

img

Нарешті, якщо хтось захоче додати до Kiddo щось своє, припустимо, щоб як елемент він більш органічно виглядав на конкретному сайті, можна просто написати нам на kiddo@dataart.com. Думаю, ми щось придумаємо. Або можна форкнути код на GitHub і зробити все самостійно.

  • Україна, Remote.UA; Україна, Дніпро; Україна, Київ; Україна, Львів; Україна, Одеса; Україна, Харків; Україна, Херсон
    18 листопада
  • Україна, Remote.UA; Україна, Дніпро; Україна, Київ; Україна, Львів; Україна, Одеса; Україна, Харків; Україна, Херсон
    1 липня
  • Україна, Дніпро; Україна, Київ; Україна, Львів; Україна, Одеса; Україна, Харків; Україна, Херсон
    25 червня
  • Україна, Одеса
    25 червня