Check Levi9 best QA positions to Backbase team!
×Закрыть

Игра в алгоритмы

Друзья, я разрабатываю игру для изучения базывых алгоритмов — Поиск, сортировка, графы.

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

Я хочу исправить эту ситуацию и сделать процесс изучения веселым и интересным.

Сейчас я на стадии проверки идеи, первый уровень готов.

Вопрос — стоит ли идти дальше?

http://www.algo.ninja/

Каждый комментарий — маленькая инвестиция в проект!

Добро пожаловать инвесторы!

👍НравитсяПонравилось0
В избранноеВ избранном0
LinkedIn

Похожие топики

Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Update — Игра приобрела новый интерфейс и новые алгоритмы для тренировки

Welcome

http://algo.ninja

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

Долго объяснять. Найдите лучше в реале кого-то, кто ничего не знает об алгоритмах, дайте ему игру и посмотрите что произойдет.

Еще стоит помнить, что задача того, кто реализует алгоритм — автоматизировать операцию, которую лень/долго делать вручную. Если вы кого-то заставите делать эти операции вручную, то он за(бется, но не научится это автоматизировать.

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

Игра интуитивно не понятна. Пришлось напрягаться, чтобы понять что от меня хотят. Одновременно на экране появляется очень много информации и ты совсем не понимаешь что тебе делать, захотелось закрыть вкладку сразу же, даже не разбираясь. Шрифт и цвета на доске выбраны неудачно, я только через минут 5 заметил, что там циклы подсвечиваются. В итоге я догадался, что это двоичное дерево, но только лишь потому что я с этим алгоритмом знаком, где там обучение я так и не увидел.
Сама идея — good.

Евгений, спасибо за подробный отзыв, сейчас каждый очень важен.

Стратегия обучения следующая — Теория -> Приктика -> Тест. При первом запуске появляется окно с теорией и объяснение интерфейса, затем практика с коробками и подсветка того, что надо сделать. В конце Тест.

С каким этапом у вас возникла наибольшая трундность? Как вы видите процесс обучения?

Спасибо

Я кликнул на ’Binary search’ и мне сразу же открылась игра с выбором коробки. Я не увидел там описанной вами стратегии:

Теория -> Приктика -> Тест.
Возможно, стоит выводить все step-by-step с описанием текущего элемента и его предназначением (хотя бы в первый раз).

Евгений, спасибо за совет. Добавил. Работает при первом входе. Чтобы протестировать — надо очистить кеш для algo.ninja

Я скажу абсолютнейшую глупость с точки зрения гиков, но таково моё мнение как разработчика прикладного софта: нет ровно никакой нужды учить алгоритмы. Ваш мозг ими не работает, их нельзя туда запрограммировать, вот и нехер их туда совать пытаясь сотворить суррогат. Это всё равно что учиться делить в столбик — когда вам последний раз это приходилось делать?

Всё что требуется — это ВЗЯТЬ алгоритм, и ПОЛОЖИТЬ туда где он нужен, на том языке который нужен. Чаще всего — готовую реализацию, без изобретания велосипедов. Даже если что-то своё, всё равно это один раз учится примерно «на троечку», держа под руками литературу программируется, и забывается — до следующего раза когда (если вообще) понадобится.

Сам я обычно с этим сталкиваюсь в вопросах безопасности. Каковы бы ни были мои знания, но когда встаёт реальная нужда программить доступ — я делаю это «by the book», то есть держа под руками источники знаний. Таким образом я минимизирую потери от возможных ошибок.

Алгоритмы — настолько же вещь оторванная от всего. Их нельзя связать шаблонами с чем-либо ещё, что вы помните. А потому они обречены на забывание — незаметное, но очень быстрое. Таково уж устройство памяти. Попробуйте как-то раз исследовать, почему вы забываете сны, и поразитесь, пронаблюдав скорость и потрясающую лёгкость, с которой мозг выбрасывает тяжёлые громоздкие вещи на помойку.

Перестаньте зубрить хрень. Пользуйтесь ей до того, как её знаете — только так и будете знать. Без использования у знаний такой же шанс сохраниться, как атмосфере на Марсе. Теоретически это возможно. Практически — use it or lose it.

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

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

Кожен охочий так. Але ж ми про програмістів говорили.

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

Единственный практический смысл их изучения для прикладного разработчика — разобраться и помнить где искать подходящее решение. Хотя даже подобна необходимость относительно редкий случай.

В двоичном поиске нет разницы куда округлять результат деления на 2 — вверх или вниз. Ваша программа почему-то требует, чтоб пользователь всегда округлял вниз.

Я не понял что от меня ожидает эта программа и что она во мне тренирует.

1. Какая цель этого проекта, вы хотите пользователя:
1.1 развлечь,
1.2 научить новому (если да, то чему: программированию, алгоритмам, на глаз быстро определять точку середины отрезка?),
1.3 усовершенствовать умения (ловкость, внимательность, быстрые вычисления в уме, умения придумывать новые алгоритмы, умения применять уже известные алгоритмы?),
1.4 продемонстрировать практическое применение уже известной теории,
1.5 визуализировать уже известную теорию для лучшего восприятия,
1.6 продемонстрировать преимущества конкретного алгоритма над другими алгоритмами,
1.7 вызвать интерес к дальнейшему изучению теории
2. На каких пользователей ориентирована эта программа (какой возраст, образование, родной язык, самостоятельное использование или с учителем)?

Узнав ответы можно делать предположения как лучше изменить программу для лучшего достижения цели.

Цель — научить базовым алгоритмам: поиск, сортировка, работа с графами. 1.2, 1.4, 1.5
Аудитория — все, кто начинает свой путь в программировании и в частности в Computer science.

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

Далее уже самостоятельная работа на 1.3

Дмитрий спасибо за кометнарий.

Ну, тогда по-порядку рассмотрим что делает игра и что можно сделать лучше. Я поставил себя на место пользователя из ЦА.
1. Вы сказали что первым делом игра должна научить человека новому, неизвестному ему ранее алгоритму. Как игра выполняет конкретно эту цель?
1.1 Переводит пользователя на текстовую станичку где «сухим» языком описан алгоритм. Поверьте, никто даже название этой станички не читал, а закрывали ее в первую секунду чтобы вернуться побыстрее в игру. Чем тогда эта программа отличается от странички в википедии?
1.2 Демонстрирует алгоритм в виде программного кода? Но ведь я как представитель целевой аудитории («все, кто начинает свой путь в программировании») не умею еще программировать и не умею читать программный код. Должен признаться, я так и не понял на каком языке написана эта программа, начало ли это функии или ее отрывок (где закрывающая скобка), и кто и с какими аргументами ее вызывает. Если функция уже написана и как-то выполняется, какая моя роль как пользователя в ней?
1.3 Заставка в начале игры рассказывает где что нарисовано в интерфейсе программы, но совершенно не рассказывает мне какую проблемы мы сейчас будем решать и какой для этого существует алгоритм и как он работает.
1.4 Не описано что там внизу за коробочки, и почему у них есть номера, которых не видно. Интуитивно, я бы будучи ЦА наверное не догадался что коробочки имеют случайные номера и отсортированы по возрастанию, но видеть эти номера нельзя все сразу.
1.5 Почему в одной из коробочек бомба и почему я должен на них нажимать? Я ищу бомбу или я избегаю бомб? Мне вобще поставили задачу что я должен сделать с этими коробками? Интуиция подсказывает мне бомб надо избегать, а опыт игры в сапер на любимом виндовсе одобряюще подтверждает «избегай бомб и не нажимай на клеточку с бомбой, особенно если точно знаешь что там бомба»
1.6 В постановке задачи «уровня» написано буквально :
1. «ознакомся с алгоритмом»,
2. «попрактикуйся»,
...
3. PROFIT «заработай очков».
Чорд, а что же делать с этими коробочками и телевизором? Какая у меня задача? Ладно, нажимаем на кнопочку «i» рядом с «ознакомся», и ничего не происходит, чорд. Ладно, буду играть, по ходу разберусь, нажимаю кнопочку «плей» внизу окошка, и... попадаю на какую-то чернобелую страничку с текстом, сразу закрываю ее, «в какие-то настройки или хелп попал, или на рекламную ссылку случайно нажал, или на сайт разработчика наверное», «наверное не туда нажал».
1.7. Почему коробочка по середине дергается? Что значит выделенный кусок кода? Ладно, нажимаю на нее, она перестала дергаться, начала дергаться другая коробочка. Это хорошо или плохо? Я правильное действие совершил или нет?
1.8 Нажму ка я на какую-то другую коробочку, чтобы разобраться что в этой игре делать хорошо а что плохо. Нажал, она тоже открылась, это хорошо или плохо? Она открылась, а я никак не наказан. Попробую открыть все остальные коробочки, они открылись, правда появляются постоянно какие-то красные надписи, «похоже на глюк программы», ну и ладно, главное что коробочки открываются, и это видимо можно делать, потому что меня никак не наказывают за это.
1.9 В итоге я открываю просто подряд все коробочки начиная с первой, и дохожу до той которая все еще дергается. она тоже открылась как и те что не дергались. Что после этого происходит? Начинает дергаться уже открытая ранее коробочка. Что это значит? Чего она дергается, я же уже ее открыл раньше?
1.10 Нажимаю уже открытую и дергающуюся коробочку. И сражу же получаю поздравление «ура успех, вы открыли правильную коробочку». Какого фига сейчас только меня поздравляют, если я нашел эту коробочку еще ранее. Наверное в этом была цель? Или нет? Я наверное запутался, попробую еще раз.
1.11 Попробовал еще раз, и нашел коробочку своим способом (не двоичным поиском) с указанным на телевизоре номером, но почему-то все еще дергается какая-то коробочка и просит чтобы ее нажали. Но я ведь уже нашел нужный номер? Дурная игра, что ты от меня хочешь?
1.12 С горем пополам прошел какие-то уровни и мне показали значек кубка! Ура, значит я что-то выиграл или куда-то прошел. Нажимаю кнопку плей под кубком, и попадаю туда же где и был. Блин, меня обманули, уровень тот же. Опять прохожу его, опять кубок, опять та же история, нажимаю плей и попадаю на тот-же уровень.
1.13 Совершенно случайно нажимаю на сам кубок. Блин, на него надо было нажать? Он даже на кнопку не похож. А кнопка плей что делает? Оставляет меня на том же уровне? Ладно... радуюсь что появился новый уровень.
1.14 Мне дали новое задание «найти номер коробки». Окей, я уже научился находить номер, главное быстро перебирать и открывать все коробки по порядку начиная с первой.
1.15 Нажимаю плей, и сейчас почему-то кнопка плей ведет меня не на чернобелую страничку как раньше, а начинается уровень, значить я правильно делал раньше что нажимал плей. Ладно.
1.16 Вижу есть обратный отсчет, и взрывается какая-то коробка. Значит я должен до этого времени найти нужную мне коробку. Наверное я должен найти и обезвредить тоесть спасти коробку.
1.17 Начинаю как и в первом уровне с первой коробочки. И бабах, какая-то другая коробка взрывается, и мне говорят что я продул. Блин. Попробую применить логику, буду начинать не с первой коробочки. Если номер на телевизоре больше 80, значит эта коробочка спрятана ближе к концу, а если меньше 20 то значит ближе к началу.
1.18 Всего несколько попыток позволили мне находить нужную коробочку с 1-го или 2-го раза, то блин она тут же взрывалась, хотя ж я ее нашел! Несправедливо!
1.19 Далее я начал хаотически нахдить способы как бы не взорваться. Даже когда я совершенно случайно приходил к «прикольной идее» искать разбивая каждый раз на половину, то игра все-равно меня взрывала, потому что например на третем шаге я чуть неправильно определил половину (хотя я этого не знал, мне казалось что половина правильна), и хотя я угадал где спрятана бомба, она всеравно взорвалась подомной.

В итоге я окончательно опечалился, игру я не понял, какой алгоритм я изучил я тоже не понял. Мне лишний раз напомнили что я не умею читать программный код, но я же еще и не должен этого уметь, мы же это еще не учили по Computer science. В игре меня научили быстро делать какие-то действия, а то время выйдет. А зачем тут спешить? — тоже не понял. И легкий привкус несправедливости, ведь я же находил нужную коробочку, а она все равно взрывалась.

Достигла ли программа первой цели поставленной перед ней «научить человека новому, неизвестному ему ранее алгоритму»?

Чуть позже попробую описать достигла ли программа следующих поставленных перед ней целей «продемонстрировать практическое применение уже известной теории» и «визуализировать уже известную теорию для лучшего восприятия», предполагая что аглоритм мне уже как-то стал известен, например в школе выучил. Либо, может кто-то попробует вместо меня в таком же стиле пошагово.

Описали так подробно и много. И совпадает с моими мыслями.

Дмитрий спасибо за очень подробное описание. Приоритеты в изменениях определились.

мне не нравится ни мультяшность, ни реализация, ни задумка, я знаю все эти алгоритмы, но что он меня хочет твой сайтик я понял спустя несколько минут, а для новичка у которого была проблема с алгоритмами появляется еще вторая проблема :) как по мне лучше унылые лекции и скучные книги

Вадим спасибо за отзыв. В чем возникла самая большая сложность?

посчитал ящики внизу декорацией, и куда жать было не понятно, кликал везде и получал редирект на теорию

В режиме обучения нужный ящик должен через 3 секунды сам начать двигаться. Было такое?

было, но я это стал замечать, когда уже все понял

В режиме обучения нужный ящик через 3 секунды начинает подпрыгивать, у вас такого небыло?

Эта часть затемнена поэтому сразу и не заметишь, лучше в режи обучения показали бы что и куда тыкать, а вообще я согласен с вадимом.

самостоятельная практика «на кубок» в бинарном поиске сделана неудобно. 7 секунд чтоб несколько раз найти середину в куче ненумерованных блоков?

Боюсь что не понял где основаня сложность — 7 секунд это мало или очень просто?

ну куча блоков. Как найти середину? Считать? Времени нет. Тыкаешь на угад. Часто промахиваешься. То есть не практикуешь алгоритм а пытаешься побороть апликуху. И кстати я не сразу понял почему у меня засчитывает ошибку. Просто не попадал в середину. Я бы убрал таймеры как минимум в первые несколько попыток.
Но вообще бинарный поиск слишком просто чтоб оценить сайт. Да и все из списка тоже несложно. Попробуйте что-то посерьезнее закодить как пример, чтоб попробовать идею можно было на чем-то посложнее

Подписаться на комментарии