1. Навчання на основі практики

Обучение java на основе практики

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

Програмування — це навичка. Ніхто не каже «я знаю, як програмувати»: всі програмісти кажуть «я вмію програмувати». Це саме навичка, як плавання, як гра у шахи. І прокачувати його можна лише постійною практикою.

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


2. Типи завдань

На JavaRush на вас чекає ціла купа різноманітних завдань. Перерахуємо основні з них:

Завдання на написання програми

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

Мета таких завдань – написати програму, яка відповідає умові та певним вимогам. Це найбільша група завдань. Для зручності студентів JavaRush ми маркуємо такі завдання рівнями складності: EASY, MEDIUM, HARD та EPIC.

Епічні (EPIC) завдання часто ґрунтуються на матеріалі майбутніх, ще не відкритих лекцій. Вони подобаються студентам JavaRush, які відчувають, що курс для них занадто легкий. Інші ж можуть просто пропустити такі завдання та повернутися до них пізніше, коли вже ознайомляться з відповідною теорією.

Проєкти

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

Тому на JavaRush з’явилися завдання-проєкти – великі завдання, розбиті на 5-35 звичайних підзавдань. Ви послідовно виконуєте всі підзавдання і на виході отримуєте велику програму.

Наприкінці кожного рівня вище 20-го знаходиться одне велике завдання-проєкт, розбите на пару десятків підзавдань. Також є ще 6 завдань-ігор, які також є проєктами. І одне завдання-проєкт для тестового завдання на онлайн-стажування. Разом – 27 завдань-проєктів на весь курс.

Тести

Тестів довго не було на JavaRush: розробник JavaRush дотримується думки, що правильно пройдені тести викликають у людей «ілюзію знання». Люди реально програмувати не вміють, але впевнені у протилежному — тести ж вони здали. Такі люди перестають вчитися, адже «вони вже все знають».

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


3. Статуси завдань

Кожне завдання на JavaRush має спеціальний статус. Ці статуси можуть змінюватись у процесі вирішення завдань.

Кожне завдання на JavaRush прикріплено до якоїсь лекції. Спочатку всі завдання вам недоступні та вирішувати їх ви не можете.

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

Якщо ви хоч раз відправили завдання на перевірку, його статус зміниться з «Доступно» на «У прогресі».

І нарешті, коли ви успішно виконаєте всі вимоги і валідатор прийме ваше завдання, його статус зміниться на «Вирішено».

Користувачам із підпискою Premium Mentor дається ще 3 дні, щоб спробувати написати інші рішення завдання. Після цього часу завдання переходить у статус «Закрито», і цей статус більше не зміниться.


4. Вимоги

У перші роки існування JavaRush перевірка кожного завдання видавала один простий результат: так або ні. Програма або проходила всі тести, або ні. Дуже просто, але не дуже корисно.

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

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

Тому ми в JavaRush переписали всі завдання. Тепер у кожного завдання є не лише умова, а й список із 5-10 вимог, що ґрунтуються на умові. І найголовніше: кожна вимога перевіряється окремо.

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

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


5. Рекомендації

А чи можна ще якось поліпшити завдання? Було б класно, якби після кожної перевірки вам казали, що саме у вашій програмі неправильно, та натякали, як це виправити. Так, це було б круто! І знаєте що? Ми в JavaRush зробили це 🙂

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

Вдумайтесь. Зараз у JavaRush близько 1200 завдань, в яких сумарно міститься близько 10000 вимог. І на кожну вимогу є кілька рекомендацій. У деяких вимог їх десятки. Валідатор JavaRush містить понад 50000 рекомендацій до рішень користувачів.

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


6. Спільнота

JavaRush орієнтований на велику кількість практики: вона займає понад 80 % всього процесу навчання. Ми перетворили його на великий та цікавий квест (навіть цілу серію квестів).

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

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

Найбільша у світі спільнота розробників — сайт StackOverflow — зародився саме через необхідність програмістів переймати знання один у одного. Його ідея проста: ви ставите питання, і будь-який програміст у світі може на нього відповісти. Зручно, справді ж? 🙂

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

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


7. Питання за завданнями

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

І на цей випадок ми маємо рішення. Зустрічайте – Розділ Допомога. У цьому розділі сайту студенти JavaRush можуть ставити питання за завданнями, розбирати рішення один одного, а також давати поради та підказки. Публікувати правильні рішення не дозволяється.

Звучить дуже просто і примітивно, хоча насправді все якраз навпаки.

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

По-друге, якщо ви під час вирішення завдання натиснете на кнопку «Допомога спільноти», одразу перейдете до розділу Допомога, де будуть відфільтровані тільки питання з того самого завдання, яке ви вирішували. Якщо завдання запускалося на перевірку і не пройшло тестування, питання будуть сортуватися у визначеному порядку: найвище з’являться питання за завданням, в яких не пройшла та сама вимога, що й у тебе.

По-третє, аналогічний функціонал доступний і в плагіні до IntelliJ IDEA. Ви можете натиснути кнопку «Допомога» або комбінацію клавіш Ctrl+Alt+W, і відразу відкриється браузер, в якому буде відкритий розділ Допомога. І звичайно ж, у ньому вже будуть відфільтровані тільки питання за завданням, яке ви вирішуєте в IntelliJ IDEA.


8. Створення свого питання

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

На відміну від багатьох інших сервісів типу StackOverflow, Toster тощо, JavaRush не вимагає, щоб ви помістили всю важливу інформацію в заголовку питання. Пишіть питання, як вам буде зручно.

І, до речі, вам не потрібно копіювати код вашого рішення з WebIDE або Intellij IDEA і додавати його до вашого питання. Під час створення питання за завданням до нього автоматично додасться код вашого рішення та інформація про статус вимог: які вимоги пройшли ваше рішення, а які — ні.

Як наслідок всі користувачі JavaRush відразу бачать всю потрібну інформацію за рішенням користувача, і дати йому слушну пораду стає набагато легше.


9. Код рішення

На багатьох сайтах під час створення питання за кодом потрібно або додати до питання архів із файлами програми, або додати всі ці файли до тексту питання. В результаті виходить величезна «онуча», розбирати яку немає ані бажання, ані можливості.

Швидко та якісно поставити питання – це ціле мистецтво. На звичайних сайтах вам доведеться або витратити півгодини на оформлення питання, або змиритися з тим, що вам ніхто не відповідає. Гарне питання за завданням просто повинно містити такі дані:

  • Посилання на завдання, яке користувач вирішує
  • Умова завдання, щоб не потрібно було нікуди переходити в його пошуках
  • Код рішення: може бути багато файлів
  • Статуси вимог у вирішення: що працює, а що — ні.
  • Текст питання: зазвичай і так все зрозуміло – не працює, чому – неясно.

У JavaRush для відображення цієї інформації використовується спеціальний віджет, дуже подібний до віджета WebIDE. Адже він уже спроєктований для відображення усієї зазначеної вище інформації. Ну може, крім власне питання користувача.

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