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

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

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

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

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


2. Типи задач

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

Задачі на написання коду за зразком

Це найпростіше практичне завдання. Мета цих задач — натренувати вашу навичку написання коду. Щоб розв'язати таку задачу, вам буде потрібно написати такий самий код, як у зразку. Дуже корисно, але швидко набридає. Таких задач майже не залишилося: ми замінили їх на задачі, цікавіші студентам JavaRush.

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

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

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

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

Проєкти

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

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

Кожен рівень після 20-го містить в кінці одну велику задачу-проєкт, розбиту на пару десятків підзадач. Крім того, є ще 6 задач-ігор — це теж проєкти. І ще одна задача-проєкт для тестового завдання на онлайн-стажування. Загалом — 27 задач-проєктів на весь курс.

Тести

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

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

Відео

І нарешті, останній тип задач — це перегляд відео. У лекції JavaRush додано багато корисних і цікавих відеоматеріалів про ІТ-індустрію.

Крім того, ми переклали всі відеоматеріали курсу з основ програмування Гарвардського Університету — Computer Science (CS50). Їх ви також знайдете на нашому сайті. Основна мета цих відео — познайомити вас із різними областями програмування й надихнути на подальше самостійне навчання.


3. Статуси задач

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

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

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

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

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

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


4. WebIDE

Щоб вам було зручно розв'язувати задачі, ми написали спеціальний віджет — WebIDE. Він має отакий вигляд:

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

Ну а вгорі ви бачите кнопки:

  • Перевірка: надіслати ваше розв'язання на тестування.
  • Допомога: розкривний список, який містить такі пункти:
    • Підказка: вивести підказку щодо розв'язання поточної задачі.
    • Допомога спільноти: поставити запитання щодо вашого розв'язання в спільноті JavaRush.
    • Правильне розв'язання: показати авторське розв'язання задачі.
    • Повернути мій код: повернутися до вашого коду після перегляду правильного розв'язання.
    • Обнулити розв'язання: скинути розв'язання задачі — почати все знову.
  • Обговорення: обговорити задачу з іншими користувачами.
  • Запуск: запустити програму без надсилання на перевірку (не збільшується лічильник перевірок).
  • Аналіз коду: отримати підказки щодо стилю коду вашого розв'язання.

5. Вимоги

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

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

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

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

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

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


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

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

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

Вдумайтесь. Зараз у JavaRush близько 1200 задач, які загалом містять приблизно 10 000 вимог. І на кожну вимогу є кілька рекомендацій. Для деяких вимог їх десятки. Валідатор JavaRush містить понад 50 000 рекомендацій до розв'язань користувачів.

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