Школа веб-разработки в местном лицее

Ни для кого не секрет, что современное российское образование — это отстой. В поселке мы со временем рассчитываем сделать школу, которая исправит эту проблему хотя бы на местном уровне. У нас было определенное видение того, какой должна быть эффективная образовательная методика, и недавно мы проверили это видение на практике — запустили бесплатную школу веб-разработки в местном лицее.

Под катом подробности — описание методики, выводы, контент курса и описание того, как вы можете сделать подобную вещь в своем городе.


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

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

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


В моем случае выбранной школой стал лицей №9 города Слободской — города, поблизости от которого мы строим Поселок программистов. Я немного рассказал директору про поселок и предложил бесплатно научить желающих школьников современной веб-разработке.

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

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

Стоит отметить важный момент — весь курс устроен так, чтобы не зависеть от технического обеспечения класса. Для выполнения заданий ученику должно хватать только браузера. При этом все client-side задачи решаются в jsfiddle, а весь server-side — в Cloud 9 IDE.


В результате за пять месяцев школьники с нуля научились верстать HTML, писать на чистом JS, потом на React, потом на Node, делать роутинг и обработку HTTP-запросов вручную, потом использовать для этого express-based фреймворк Sails.js, а в финале — делать полноценный изоморфный рендеринг на основе React Router и пользоваться гитом.

При этом освоение технологий происходило на фоне конкретных практических задач, с которыми сталкивается каждый разработчик — bcrypt-аутентификация, компиляция ES6 => js, клиентская сборка и т.п.


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

1. Фан


После выполнения задачи ученика всегда должно ждать «Вау, заработало!». Вещи, которые не подчиняются этому правилу, лучше оставлять на потом — они будут освоены самостоятельно, когда в них появится потребность. Простой пример — когда происходит освоение верстки, не стоит морочить голову правильной структурой документа с head и body, потому что это скучно. Лучше заставить нарисовать красный квадратик и дать почувствовать магию.

2. Роль ментора


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

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

3. Сначала практика


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

4. Сначала низкий уровень (спорный вопрос)


На курсе мы сначала проходили, как задача решается на низком уровне, без применения современных средств. Мне казалось, что только прочувствовав до конца весь геморрой, который приходится терпеть разработчику при решении задачи базовыми средствами, ученик поймет, зачем вообще нужен фреймворк, иногда довольно сложный для понимания (как, например, React Router).

Безусловно, такой подход делает курс медленней. Оправдано это или нет — крайне спорный вопрос, на который у меня пока нет однозначного ответа.

5. Никакой алгоритмизации (спорный вопрос)


На программистских специальностях ВУЗов обучение начинают со скучной алгоритмизации, не имеющей отношения к реальным современным задачам. Вычислить формулу, потом развилка, потом цикл. Считается, что освоив эти «кирпичики», человек поймет, как справляться с реальными задачами. На практике — ни разу не видел, как кому-то такой подход помогает — люди, скучая, пробиваются через эту фигню, а потом все равно не могут сделать алгоритм в реальной задаче.

Я считаю, что алгоритмы должны изучаться только в применении к реальным задачам — например, аутентификации (проверить сессию, получить credentials, поискать в базе, установить сессию).

6. Реальные задачи


Мы делали панель интернет-магазина — с аутентификацией и заказами. Это хорошо понятная современному школьнику проблема, решение которой вызывает энтузиазм. Если решать что-то абстрагированное, устаревшее или оторванное от современного мира — это отрицательно повлияет на мотивацию.

7. Ученик учит других


Нам в школе учительница истории рассказывала, что в 20-х годах в СССР было колоссальное отставание по грамотности — на ликвидацию которого, по всем прогнозам, должны были уйти десятилетия. Фактически проблема была решена всего за несколько лет — путем построения в школах системы, где один научившийся читать обучал других. Никаких подтверждений этому факту я в дальнейшем не нашел, но идея кажется довольно клевой.

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


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

Естественно, это проблема курса. Из-за его несовершенства мир опять получил несколько мерчендайзеров вместо разработчиков. Суть этой проблемы — неравномерное распределение сложности. Для нас с вами это очень сложно почувствовать — ведь все эти вещи кажутся такими очевидными. Поэтому фикс этой проблемы можно сделать только после боевой обкатки.

Еще одна деталь — я просил учеников продумывать идею своего проекта — чтобы, когда курс закончится, они могли бы перейти к его воплощению под моим кураторством и обкатать полученные навыки в бою. К сожалению, этого не произошло — курс затянулся до мая, там начались эти самые ЕГЭ и каникулы, за время которых полученные незакрепленные скиллы скорее всего потеряются. Вывод — такие курсы надо начинать в сентябре, чтобы хватило времени для реальной практики.

Ну и основной вывод — эта штука работает. На одной чаше весов — 5 лет в ВУЗе и багаж неактуального барахла, на другой — 5 месяцев занятия раз в неделю и у тебя — навыки по современным технологиям.


Как я уже говорил, было бы круто, если бы вы нашли время провести подобный курс в ближайшей школе. Вы можете воспользоваться моим контентом, либо сделать собственный курс (например, по iOS-разработке), используя обкатанные принципы.

Я раздавал задания через баг-трекер (Асану), и это было жутко неудобно. Все существовавшие на тот момент конструкторы курсов показались довольно убогими, а потратить серьезный ресурс на улучшение формы контента у меня не получилось — основная работа и поселок забирают довольно много времени. Существующий контент выгружен из асаны в Google Drive в виде «как есть» — без дополнительного форматирования и, возможно, с какими-то ошибками, которые не успел исправить.

По идее этот проект должен быть в форме специального бесплатного опен-сорс сервиса — куда авторы смогут выкладывать курсы, кураторы — проводить по ним занятия, а студенты — вносить результаты для проверки. Есть полное понимание того, как этот сервис должен быть устроен и есть каркас, который можно развивать (Sails.js + React). Не хватает только времени (требуется 2–3 недели фулл-тайма). Если есть желание помочь и присоедниться к проекту — пишите в контакты на сайте Поселка.


Мы довольно давно не писали на Хабре/GT — в основном это было связано с неоднозначной политикой администрации по поводу тарифа «Стартап» и вопросом по поводу того, разрешать ли нам писать на нетехнические тематики.

В общем, у нас все хорошо, только медленно. Поселок в итоге обходится без инвесторов, развивается за счет собственных средств и денег за участки от присоединившихся к нам соседей. Сделано два коммуникационных узла (оптика + электрика + водопровод), строится гостиница.

1022c4e01abb4506aea7c029df86767d.jpg

По жилью — готов первый дом (семья уже живет), до сентября заканчивается отделка во втором, до нового года планируем закончить еще два. Еще три семьи выкупили участки, но пока копят финансирование на стройку, Недавно присоединилось еще две семьи, сделки зарегистрированы, скоро запускаем стройку.

Ну и самое главное — то, ради чего все, собственно, и затевалось. Ребята на время стройки переезжают в Слободской, и у нас постепенно формируется отличная компания с клевой дружеской атмосферой. Это люди, с которыми интересно общаться, отдыхать и даже просто находиться рядом.

За нашими новостями лучше всего следить в инстаграме и на сайте Поселка.

© Geektimes