JavaRush/Java блог/Архив info.javarush/Нужно ли сделать более разнообразными ответы валидатора п...
blizzard
26 уровень

Нужно ли сделать более разнообразными ответы валидатора при отправке задач на проверку

Статья из группы Архив info.javarush
участников
Предположим, валидатор при отправке задач на проверку явно указывал, скажем, причину, по которой задача не проходит проверку. Т.е. не просто "не прошла тестирование", в явном виде указывать, что не так. Одна из самых частых проблем это "мой код отрабатывает правильно, но не проходит проверку, как так?". Когда люди пишут "отрабатывает правильно", иногда это им только кажется. Но бывают случаи, когда действительно вроде все ровно, но проверку не проходит.
Комментарии (13)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
laz_a_rus
Уровень 39
10 декабря 2015, 23:23
Не вижу смысла в этой теме… Уже было сказано вот здесь:
Из ближайших:
1) регистрция на стажировку
2) большие задачи 29, 32 (уже готовы) и 33 уровней
3) переход на джава 8
4) навигация по лекциям

Из отдаленных:
1) смена дизайна
2) развернутый ответ, почему не прошла задача
3) нелинейный сценарий доступа к материалу
4) много другой внутренней работы
Так что это в любом случае будет реализовано, вопрос только в том как скоро. Возможно это не так легко реализуемо как кажется, а о полезности никто и не спорит.
blizzard
Уровень 26
10 декабря 2015, 23:38
Я с поиском поработал до того, как эту тему создать. На этот пост, конечно, не наткнулся. Иначе бы не стал создавать.
Ну, тем не менее, все же по своему вопрос интересный.
k1per
Уровень 19
10 декабря 2015, 17:27
А зачем? Не вижу смысла. Либо ты правильно делаешь, либо нет. Не делай ошибок и все будет хорошо. Если делаешь ошибки, то никакие тебе 80%-правильного-решения не помогут стать программистом.
EvIv
Уровень 30
10 декабря 2015, 17:48
Детализация по тестам поможет распознать, где студент сам накосячил/не учел что-то, а где условие неочевидно построено и уже тесты покажут, что именно ожидается от программы. Это повысит эффективность траты времени на задачи, ведь иногда по несколько часов или дней приходится играть в «угадайку» с валидатором, что никак не приближает студента к цели стать программистом.
Чтобы не избаловать студентов готовыми тестами и приучить тестировать программы самим перед отправкой, можно функцию детализации по тестам включать после скажем, третьей попытки сдать задачу Кто заботится о своем рейтинге по задачам, будет стараться тщательно тестировать и сдать задачу в первые попытки, а когда уже три-четыре раза сервер задачу не принял, уже начинает копиться раздражение «что же ему еще не хватает?!», вот тут как раз и подоспеет ответ.
k1per
Уровень 19
11 декабря 2015, 09:44
Ни разу не играл в угадайку с валидатором, всегда были проблемы, когда я писал полный бред. А если были какие-то нюансы, то я спокойно их смотрел на форуме javarush.ru или гуглил.
Чем мне и нравится программирование(я закончил МГУ факультет психологии), что ты не можешь заниматься словесными спекуляцией на тему материализма/идеализма с валидатором и компилятором. Либо ты пишешь правильно, либо нет.

На счет раздражение: смотрел курс Stanforda по Java. Там индус читает. Он сказал, что самое ужасное, что ты можешь сделать, когда у тебя есть баг, это паниковать.
EvIv
Уровень 30
11 декабря 2015, 10:25
О панике я и не говорил. Раздражение появляется от осознания, что эти часы и дни мог бы потратить более эффективно.
Что касается нюансов — на них как раз тратится много времени: на то, чтобы переключиться на форум, чтобы найти темы (иногда десятки тем по одной задаче), чтобы в сотне комментов найти упоминание релевантного твоему случая, изучая тонны чужого кода. Да, тоже навык, но смежный для программиста и от этих нюансов можно было бы избавиться. Задания на гугление и поиск информации всё-таки в курсе отдельно присутствуют, чтобы еще и в задачах неявно это требовать.
ЗЫ: сейчас прошел почти 26 уровней, не решена не сдана одна задача — bonus3 на 18 уровне (crud2)
laz_a_rus
Уровень 39
11 декабря 2015, 14:43
*ОФФТОП*
А какие именно затруднения у вас вызвала задача crud2? При правильной реализации первой версии (что настоятельно рекомендуется авторами) со второй проблем возникнуть не должно.
В этой теме я несколько раз писал о самой распространенной ошибке в первой задаче. Вот здесь краткое ее описание, а здесь примеры моего кода.
Во второй задаче требуется несколько раз вызвать методы аналогичные методам из первой задачи и все.
Если будут вопросы — задавайте, либо в соответствующей теме, либо в личку.
EvIv
Уровень 30
11 декабря 2015, 15:43
Затруднения как обычно — по-моему, всё работает, а сервер не принимает. Crud1 выполнен и сдан. Могу в личку кинуть код.
saul
Уровень 22
9 декабря 2015, 21:39
Может быть, помогло бы указание в процентах: «Ваше решение совпадает с верным более чем на 90%, но окончательно решение неверно.».
blizzard
Уровень 26
10 декабря 2015, 11:43
Опять же, нужно ли «намекать» как-то где эти 10% находятся?
saul
Уровень 22
10 декабря 2015, 16:22
Иногда я думаю, что наличие некой дополнительной игровой валюты могло бы тратиться на подсказку в виде доступа к итоговым тестам задания.
Сейчас я на 18-м уровне, имею 77 кораблей и 30 единиц тёмной материи — ресурсы, вроде, избыточны для прохождения игры.
Некоторые задачи вызывают у меня затруднения, которые можно было бы решить быстрее, будь у меня знания, какие тесты не проходятся.
SonicBIast
Уровень 40
9 декабря 2015, 18:39
Всем привет! Ну это вопрос с подвохом. С одной стороны когда отправляешь на проверку было бы конечно хорошо когда валидатор говорил бы, где ошибка! Но с другой стороны получается, что когда пишешь код не задумываешься об алгоритме, следовательно не до конца понимаешь что ты вообще написал!
Лучше всего тестить программу самому и если уж все хорошо, и результат такой какой должен быть, тогда уже пробовать сдавать её. Зачастую просматривая топики, вижу задачи, которые люди сами себе усложняют, чёто сами придумывают, какие то проверки, и т.д. короче код который решается в несколько строк растягивают до невозможного. Дробите задачу на небольшие задачки, и решайте постепенно, шаг за шагом.
Бывают моменты когда на 100% уверен, что решил правильно, а не принимается. Но лично я занимаясь по этому курсу понял одну истину. Если не приняло значит 100% накосячил. И когда находишь свою ошибку это чувство удовлетворения не передать. Вот на начальных уровнях такое кажется есть, когда решаешь задачу онлайн. Там вроде бы пишут, забыли поставить ";" или ")" или «пробел». Мне кается этого достаточно, т.к. если валидатор будет вам ещё и отправлять смс где что-то не так, тогда знаний меньше будете получать.
P.S.Кстати есть ещё дебагер вот им ещё нужно научится пользоваться!!!
EvIv
Уровень 30
10 декабря 2015, 10:09
Когда проходил на coursera курс Algorithms and Data Structures, увидел как должен работать хороший валидатор.
Спустя 2-5 минут после отправки на сайт zip с кодом (в этом аспекте у JavaRush лучше) напротив записи с попыткой появляется процент прохождения, например, 88.54% и появляется кнопка для просмотра подробного отчета. Там представлен полный лог тестирования: соответствие представленных проверке классов запрошенному API (набор публичных методов и полей должен соответствовать заданию, не должно быть лишних публичных полей и методов), лог findbugs, лог checkstyle, несколько групп тестов: на функциональность, на граничные значения (показываются входные данные, ожидаемый и фактический результат, процент прошедших тестов); на потребление памяти, на время выполнения (несколько тестов с разным объемом входных данных, ожидаемые и фактические значения занимаемой памяти и затраченного на работу времени).
Причем при ошибках API или findbugs далее тестирование не проводится, выставляется результат 0%.
В-общем, после выставления оценки можно четко понять, какие аспекты задачи не проработаны или проработаны недостаточно: не учтены граничные случаи (передача в параметре null, массива из 0 элементов, пустой строки, граничных значений Integer и т.п.), некоторые рабочие случаи, работает ли программа неприлично медленно или жрёт памяти как не в себя.
Понимаю, что там задач всего 12 штук (правда, объемных) на целый курс, а тут более 1000, также понимаю, что при фиксированных тестовых данных никто не помешает сдать задачу простым «switch(input) {case input1: output expected1; break; ...}», но в этом направлении можно попробовать подумать — получается очень ценный feedback.
Чтобы не позволить сдать задачу простым хардкодом, можно тестовые данные генерить автоматически, делать более «интеллектуальные» тесты.