D:\sideБлогДеревья настоящих навыков

Кто следит за моей активностью, знает, что я в последнее время зависаю на «StackOverflow на русском», отвечаю на разные вопросы. По большей части не с целью помогать (как можно было бы подумать!), а скорее с целью последить, какие у людей возникают вопросы в процессе освоения технологий. Не сюрприз, что глупых вопросов много, и причины возникновения многих из них очень похожи. А если можно выделить и признать проблему, то можно придумать и реализовать решение (возможно, не сразу). Речь пойдёт о D-side/skillforest.

Давайте поставим себя на место человека, который надумал погрузиться в индустрию. (Я буду рассматривать сферу информационных технологий, но эти же принципы могут запросто оказаться применимы и в других местах, просто я этот вариант пока не рассматриваю.) Что он о ней обычно знает? Как правило, конечный результат. Погружаясь глубже, можно узнать средства, которыми он достигнут.

«Хм, а что? Что в результате, понятно. Чем пользоваться, тоже. Что ещё надо-то?» — говорит он и берётся за работу. И что ещё более катастрофично, он может найти одно из бесчисленных пошаговых руководств, лежащих на просторах интернета (особенно на видеохостингах) и путём повторения происходящего и получения ожидаемого результата решить, что готов делать что-то своё. Да, я считаю (типичные) видеоуроки злом. Не сами по себе, их опасность в том, что их неправильно воспринимают. Исторически сложилась следующая модель восприятия таких материалов: «Ага, он сделал так, я могу сделать так же и это будет работать…» …а-а не факт. Потому что такие материалы надо воспринимать, как демонстрацию возможностей, а не руководство к действию и в них обычно не объясняется: почему делается именно так, а не иначе, был ли выбор и в чём он заключался.

И вот частенько на этом-то этапе всё и ломается. Он всё ещё понятия не имеет, с чем связался, знает что, но не знает почему.

Тем хуже, если наш уважаемый авантюрист успел надавать обещаний, и поставить себе дедлайны. Тем хуже, если он пойдёт в интернет-сообщества и начнёт просить помощи со словами «срочно надо», «сроки горят» и подобным. В сочетании с вопросами, демонстрирующими полное незнание сферы деятельности, это выглядит… нет, не смешно! Грустно. Приходит понимание того, что человек как минимум не выполнит поставленную перед собой цель. Для него это больно и демотивирует, сообщество могло бы посочувствовать… но видит таких каждый день. «На всех сочувствия не напасёшься».

А всё почему?

Это попытка «решить задачу путём знания ответа заранее», только без ответа. Попытка делать сложные выборки из базы данных, не зная принципов работы с БД. Попытка собрать игру, не зная о понятии «тика» в игровом мире. Попытка собрать сайт без малейшего представления о цикле запрос-ответ в HTTP. Это возможно! Но только идеальном мире, где инструменты абстрагированы достаточно, чтобы не задумываться об их внутренних деталях.

Я учился Rails, находя материалы практически вручную. Учебник Майкла Хартла по Rails я прошёл достаточно быстро, но часть материала (в основном тесты) пропустил, потому что попросту не понял, что там за магия. Это меня больно укусило в дальнейшем: Rails всё-таки не является «покрывающей» абстракцией, ниже которой погружаться нет надобности: это всего лишь сборник инструментов и шаблонов для выполнения типичных задач. Причём книга, по большей части, знакомит именно с шаблонами, но не тем, из чего они состоят. Как только задачи перестают быть типичными, прежний стиль работы перестаёт быть эффективным. Или даже не так, перестаёт быть вообще, работа попросту останавливается, пока не будут постигнуты средства для её продолжения.

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

Для этого есть учебные курсы, верно?

…линейные, преподносящие материал в определённой последовательности, без отклонений, дыр и возможности выбора. Если вы взялись за определённый курс, у вас есть только один возможный путь — вперёд. Впрочем, без знания ориентиров это может быть даже наиболее безопасно.

Но у этого есть проблемы. Почти любая технология в наше время может быть применена разными способами, с упором на разные её стороны. Отдельных учащихся могут интересовать разные стороны. Каким образом они могут выбрать, что изучать? Выбор стоит только между курсами. И если последовательно пройти сначала один, а потом другой, будет видно, что пересечение есть, но будет неясно, где оно заканчивается, и при прохождении второго курса можно потерять много времени на (а) повторный просмотр уже пройденного материала, (б) поиск обратной дороги до точки, где началось что-то новое.

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

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

Предложение

Можно разбить область на отдельные небольшие темы и сцепить их в ориентированный ациклический граф (DAG), где связь между двумя темами обозначает «предварительное требование» (prerequisite): скажем, чтобы изучить тему А, надо сначала изучить тему Б, и таких целый набор с массой внутренних связей.

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

Ничего не напоминает? Я один такой испорченный ролевыми видеоиграми вижу в этом «дерево скиллов»?

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

Но знания узкого профессионала зачастую сильно однобоки. Он может хорошо описать отдельную ветку, но с описанием более широкой картины у него могут возникнуть проблемы. Поэтому стоит предоставить возможность ссылаться из одного дерева на другое в одностороннем порядке: дереву-основе незачем знать обо всех деревьях, что на него опираются. Эти деревья можно разместить в федерации серверов, получив взаимосвязанный лес. Отсюда название «лес навыков».

Но я уже начинаю повторять то, что ранее изложил в репозтории skillforest. Там есть ветка и на русском языке, хотя она и отстаёт от основной (не сильно, пока что). Всё это ещё только на стадии идейной проработки и до реализации дело пока не дошло. «Может, когда-нибудь».