Я хочу поговорить с вами о том, почему мы чаще чиним сантехнику, чем пишем про неё диссертации, о разных подходах к обучению программированию и о том, как мы пробуем применить один из них в нашем новом продукте Hyperskill.
Если вам не по душе длинные вступления, то переходите сразу к параграфу про программирование. Но так будет менее весело.
Лирическое отступление
Давайте представим некую барышню Машу. Сегодня Маша собиралась помыть себе фруктов и спокойно посмотреть фильм, но вот незадача: неожиданно она обнаружила, забилась раковина на кухне. Что с этим делать — пока непонятно. Можно отложить этот вопрос на неопределённый срок, но свободное время есть сейчас, поэтому Маша решает разобраться с проблемой сразу же. Здравый смысл подсказывает две опции: а) вызвать сантехника б) справиться самостоятельно. Барышня выбирает второй вариант и принимается изучать инструкции на ютубе. По совету пользователя Vasya_the_plumber Маша заглядывает под раковину и видит там змеящуюся пластиковую трубу из нескольких деталей. Девушка осторожно откручивает одну деталь у основания раковины и ничего не находит. Кусочек трубы пониже оказывается намертво забит неизвестной субстанцией, и даже найденная на столе вилка не справляется с засором. Эксперты из интернета дают неутешительные прогнозы: деталь придётся менять. На карте Маша находит ближайший магазин, берёт с собой злополучный кусок трубы и покупает такой же, только новый. По совету продавца Маша прихватывает и новое ситечко, для профилактики. Квест завершён: раковина снова работает как нужно, а его главная героиня, тем временем, узнала следующее:
- Трубы под раковиной можно самостоятельно раскрутить и закрутить;
- Ближайший магазин сантехники в полутора километрах от Машиной квартиры.
Скорее всего, Маша даже и не заметила, сколько нового узнала и чему научились, потому что её волновал собственный комфорт в будущем, а заодно кинопросмотр и помытое яблочко. В следующий раз, когда возникнет похожая проблема, девушка решит её в разы быстрее. На самом деле, Маша не просто возвращала мир в привычное состояние; она училась индуктивно, то есть на частных случаях, и практикоориентированно, то есть делая вещи, а не изучая их подробно и заранее.
Всё могло сложиться иначе. Предположим, Маша сидит вечером в кресле и вдруг понимает, что морально и физически не готова к засору в раковине. Она спешно записывается в академию сантехников, изучает виды раковин, труб и возможных соединений, классификацию проблем с сантехникой и возможные варианты их устранения. Маша не спит ночами, запоминая термины и названия. Возможно, она даже пишет кандидатскую по теоретическому трубоведению, где рассуждает о резиновых прокладках. Наконец, получив сертификат, Маша гордо обозревает кухню в полной уверенности, что теперь даже маломальская проблема с раковиной решится по щелчку пальцев. При таком сценарии девушка обучалась дедуктивно, переходя от общего к частному, и ориентировалась скорее на теорию.
Так какой же из подходов лучше подойдёт? В случае с раковиной и засором — первый, и вот по каким причинам:
- Если важна только работающая раковина, значит достаточно знать только то, что касается именно этой сферы. Когда Маша поймёт, что знаний не хватает, она обязательно найдёт способ узнать больше.
- Энциклопедическая подкованность может не включиться в реальной ситуации, потому что не отработана привычка. Для того, чтобы научиться последовательности действий, есть смысл не прочитать о них, а выполнить.
Давайте уже оставим в покое бедную Машу и перейдём к процессу обучения как таковому.
Программирование: учиться или делать?
Мы привыкли думать, что, чтобы развиться и стать экспертом в незнакомой области, в первую очередь нужно поступить в университет или хотя бы записаться на курсы. Мы исправно слушаем то, что рассказывают, выполняем задания. Когда же на руках оказывается заветный диплом или сертификат, мгновенно теряемся, потому что так и не поняли, зачем нам столько информации и как конкретно её применять. В этом нет проблем, если дальше в планах — писать научные работы и ездить с ними на конференции. В ином случае стоит стремиться и к навыкам, то есть делать и снова делать конкретные вещи, пробовать и ошибаться, чтобы надолго запомнить, как лучше не поступать.
Одна из сфер, где «набитая рука» или «глаз-алмаз» идут рядом с широтой кругозора — программирование. Если вы пообщаетесь с опытными разработчиками, то услышите бравые истории, в которых человек с юных лет занимался математикой/физикой/преподаванием, а потом устал и перешёл в бэкэнд. Найдутся и программисты без высшего образования! В первую очередь в разработчике ценят не сертификат, не диплом, а количество и качество написанных программ, скриптов и сайтов.
«Но подождите!», возразите вы, " Красиво звучит — бери и делай! Я не могу запросто написать себе программу, если до этого не программировал(а)! Мне важно понимать, где писать, как в принципе разговаривать на языке программирования с компилятором. Это не телефон сантехника в гугле найти.".
Горькая правда есть и в этом. Один незнакомый аспект тянет за собой другой, тот, в свою очередь, — третий, и скоро этот процесс превращается в шоу фокусника, который продолжает вытягивать связанные платочки и никак не достанет их из цилиндра. Процесс, честно скажу, неприятный, на 5-м «платочке» уже кажется, что глубина невежества близка к Марианской впадине. Альтернатива этому — те же лекции о 10 видах переменных, 3 видах циклов и 150 потенциально полезных библиотеках. Печально.
Hyperskill: мы строили, строили и наконец построили
Мы долго думали над этой проблемой. О том, как долго мы думали, красноречиво говорит дата последнего поста в нашем блоге. После всех споров и попыток интегрировать новый подход на Stepik у нас получился… другой сайт. Возможно, вы уже слышали о нём как о части JetBrains Academy. Мы назвали его Hyperskill, встроили туда project-based learning, привязали к нему базу знаний по Java и заручились поддержкой команды EduTools. А теперь подробнее.
Конкретная цель. Мы предлагаем “меню” из проектов (projects), т.е. программ, которые вы можете с нашей помощью написать. Среди них — крестики-нолики, персональный ассистент, блокчейн, поисковик и т.д. Проекты состоят из 5-6 стадий (stages); результат каждой из стадий — готовая программа. “Зачем тогда остальные стадии, если на первой уже получилось всё?” Спасибо за вопрос. С каждым шагом программа становится функциональнее или быстрее. Поначалу код занимает 10 строчек, под конец может не умещаться и в 500.
Немного теории. Невозможно сесть и, не зная ни слова о программировании, написать даже Hello World. Поэтому на каждом этапе проекта вы видите, какие теоретические азы вам предстоит освоить и, главное, где их взять. Азы расположились тоже на Hyperskill в разделе “Карта знаний” (Knowledge Map). Если для первой стадии проекта учащиеся не обязаны читать данные из файла, пусть и не умеют дальше. Выучат потом сами, для общего развития, или понадобится на следующем этапе.
Карта знаний. На ней видно, какие темы вы уже изучили и как они связаны друг с другом. Откройте любой симпатичный топик. Можете пробежаться по нему глазами, но рекомендуем выполнить и небольшие задачки, чтобы убедиться, что информация уложилась в голове. Вначале платформа вам подкинет тесты, после них — пару задач на программирование. Если код компилируется и проходит тесты, то сравните его с образцом решения (reference solution), иногда это помогает узнать более оптимальный способ реализации. Или же убедиться, что ваше решение и так прекрасно.
Ничего лишнего. Мы ждём и “зелёных” пользователей и бывалых разработчиков. Если вы уже писали программы, не беда, мы не заставим вас снова складывать 2+2 или переворачивать строчку. Чтобы сразу попасть на нужный уровень, при регистрации укажите, с чем вы уже знакомы, и выбирайте проект посложнее. Не бойтесь себя переоценить: если что, всегда можно вернуться к забытой теме в карте знаний.
Инструменты. Это здорово — писать небольшие кусочки кода в специальное окошко на сайте, но настоящее программирование начинается с работы в среде разработки (Integrated Development Enviroment). Опытные программисты знают не только как писать код, но и как конструировать графический интерфейс, собирать разные файлы в проект, пользоваться дополнительными инструментами разработки, и часть этих процессов IDE берёт на себя. Почему бы не научиться и этим скиллам, пока вы осваиваете программирование? Тут приходит на помощь JetBrains и специальная версия IntelliJ IDEA Community Educational с предустановленным плагином EduTools. В такой IDE можно проходить учебные курсы, проверять решенные задачки и подсматривать в подсказки по проекту, если вы что-то забыли. Не переживайте, если впервые слышите слово “плагин” или “IDE”: мы расскажем, что это такое и как его установить на компьютер или ноутбук с минимальными страданиями. Разбирайтесь с теорией, а затем переходите в IDE и завершайте очередную стадию проекта прямо там.
Дедлайны. Их нет! Кто мы такие, чтобы стучать по голове и указывать, в каком темпе вам писать программу. Когда вам нравится писать код и хочется доделать его до конца, вы дописываете его, сегодня или завтра. Занимайтесь разработкой в своё удовольствие.
Ошибки. Все их допускают, допустите и вы на одном из этапов проекта, и тогда этот этап не пройдёт автоматические тесты. Что ж, придётся самостоятельно разобраться, что пошло не так. Мы могли бы сказать, где кроется ошибка, но разве это научит вас писать код внимательно? Читайте подсказки от IDEA или теоретический топик про Bugs, и, когда программа наконец заработает, прилив дофамина, скорее всего, не заставит себя ждать.
Наглядный результат. Итак, вы дописали первый проект, что дальше? Пользуйтесь плодами трудов! Сыграйте с друзьями в крестики-нолики, заодно похвастаетесь успехами. Загрузите проект на GitHub, чтобы показать будущему работодателю, напишите описание самостоятельно, укажите там те знания, которые применяли. 4-5 сложных проектов, и вот, скромное портфолио для начинающего разработчика готово.
Возможность для роста. Предположим, вы смотрите на Hyperskill и не видите там какой-то важной темы или полезного проекта. Сообщите нам об этом! Если ваш бэкграунд шире и богаче карты знаний, то напишите нам в форму Contribute. Наша команда поделится с вами собственными tips&tricks, так что будем рады помочь вам преобразовать ваши знания в полезный контент, понятный пользователям разного возраста и уровня. Может быть, мы даже заплатим, но это не точно.
Добро пожаловать: https://hi.hyperskill.org/ Заходите, смотрите, пробуйте, предлагайте, хвалите и ругайте. Мы тоже учимся вас учить.
Автор: Даша Орлова