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 задач, суммарно в которых содержится где-то 10,000 требований. И на каждое требование есть несколько рекомендаций. У некоторых требований их десятки. Валидатор JavaRush содержит более 50,000 рекомендаций к решениям пользователей.

К тому же, это все происходит во время проверки вашего решения, которое в большинстве случаев длится меньше секунды. Человек бы так не смог. Настоящий виртуальный ментор.


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. Ведь он уже спроектирован для отображения всей вышеперечисленной информации. Ну может, кроме самого вопроса пользователя.

Да, мы написали специальный виджет только для того, чтобы вам было удобно изучать решения других пользователей. И чтобы другим пользователям было легко и приятно изучать ваши решения в ваших вопросах.

undefined
1
Задача
Java Syntax Pro, 1 уровень, 3 лекция
Недоступна
Объявляем переменные
В Java нельзя просто так взять — и использовать переменную! Вас не поймут (компиляторы не поймут, ругаться будут, вот увидите!). Так что если уж вы решились что-то делать с переменной, об этом намерении нужно объявить во всеуслышание! Пишем программу, которая объявляет переменные типов int и String.