Поселок
9 740

Как запустить школу программирования за полтора месяца. Итоги первого заезда в «Хуториум»

Чуть больше месяца назад мы анонсировали на vc.ru запуск «Хуториума» — школы программирования на базе поселка. Пару дней назад у нас завершился заезд первой группы. В статье — подробный рассказ о том, как всё создавалось, организационных трудностях и радостях первого запуска.

Поделиться

В избранное

В избранном

Результаты обучения

Ребята конкретно удивили. Раньше я считал, что курс веб-разработки, лежащий в основе «Хуториума», можно пройти за три недели. Это время, которое затратил мой взрослый друг, попросивший меня помочь ему с освоением новой профессии. Его интеллект — сильно выше среднего, поэтому казалось, что срок действительно минимальный, а в реальности прохождение займёт намного дольше.

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

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

В общем, оказалось возможным за шесть дней освоить верстку до уровня создания сложных страниц и использования CSS-фреймворков, интерактива на чистом JavaScript, повторение того же интерактива на ООП, а затем — на React, основы сервер-сайда на чистом Node и создание динамических веб-страниц на EJS. Дальше ребятам предстоит освоить работу с MongoDB и организацию REST API, использование Express, концепцию SPA, настройку Webpack и изоморфный рендеринг — всё это уже в режиме онлайн-занятий.

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

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

Наверное, сейчас вы смотрите на фотку, и думаете: «Как же круто, какие умные сосредоточенные лица, сидят за макбуками и осваивают фронтэнды с бекэндами, ребята молодцы — и студенты, и организаторы, как же круто всё получилось, умницы».

На самом деле за всем этим стоит кромешный организационный ад.

«Трамвай построить — это не ешака купить», или как сделать школу за полтора месяца

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

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

Полтора месяца, ага. В отличие от чисто ИТ-проектов, дедлайн в «Хуториуме» было не сдвинуть. Из-за ажиотажа после первой публикации места на первый заезд были быстро раскуплены, люди купили билеты в Киров и уже запланировали приезд.

Марсианский пейзаж и другие проблемы

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

Из-за затяжных дождей в конце мая и первой половине июня удалось сделать это только за неделю до запуска. В результате грунт стал выглядеть примерно как на Марсе:

Грунт в палаточном городке сразу после выравнивания

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

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

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

Краску для здания хотели подороже, заказали в Москве, но поставщик отвез её в ТК на 4 дня позже обещанного. Пришлось срочно покупать другую в Кирове и красить ей.

Заказали теннисные столы — но банковский перевод по непонятным причинам задержался на пять дней, а продавец без подтверждения бухгалтерии не хотел двигаться. Вдобавок, он оказался обычным посредником, и после получения денег только заказал логистику от своего поставщика, которая добавила к сроку еще пару дней. Доставка до нас сработала нормально, но в результате столы приехали только к концу первого заезда. А вот когда заказывали оборудование для оптики, подвела уже ТК — медиаконвертеры, SFP-модули и роутер приехали за 2 дня до старта.

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

Последний день перед стартом

В воскресенье, 24 июня, в крытом блоке школы одновременно толпились плиточники, установщики натяжных потолков, установщик дверей и сантехник.

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

Планировка учебного помещения

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

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

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

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

День «Х», или Как вы яхту назовете, так она и поплывет

Когда я несколько месяцев назад показывал жене первые варианты логотипа «Хуториума», я был поставлен в тупик резонным вопросом: «А что это вообще за х…?». С целью получения более объективного фидбека я не познакомил её предварительно с глубокой концепцией названия, сочетающей в себе challenge и смысловую нагрузку в виде хутора и ума. Название казалось офигенным.

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

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

Этот фокус поставщики повторяли ещё пару раз, зато потом начали присылать на коробках смайлики и извинения.

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

Это несколько дороже, зато так мы вносим небольшой вклад в концепцию Sustainable Development Goals (конкретно, в цель #12 – Responsible Consumption). Поскольку мы все живем на одной планете, я считаю, что каждый из нас по мере возможностей должен помогать двигаться в этом направлении — прочитайте об этих целях, если вы еще с ними не знакомы.

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

Собственных способностей по настройке нового профессионального роутера не хватило. Он просто не работал. Чтобы никого не задерживать, я сбегал за своим домашним роутером — уже настроенным.

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

Роутер заработал, и я смог выдохнуть. На какое-то время. Не успел я рассказать ребятам о том, куда заходить и как авторизоваться в системе (вспоминая, что систему авторизации я закончил несколько часов назад, и она еще не проверена), как сразу несколько человек объявили, что не могут подключиться. Роутера на всех не хватало. Самое плохое, что не мог подключиться Денис — наш ментор, который должен проверять на задания и помогать решать затруднения. Ребята, которые уже подключились, успели выполнить первые задания, и система не пускала их дальше без проверки.

Тут я вспомнил, что бывает ещё проводной интернет, заказал в городе несколько коммутаторов и патчкордов, а сам побежал домой за сетевым кабелем для Дениса. Когда мы его подключили, он раздал с ноута Wi-Fi ещё на восемь человек, и проблема с интернетом закончилась.

Я снова выдохнул. Но тут Денис отвел меня в сторонку и показал баг в панели управления, который позволял ему проверять только собственные задания. Снова паника. Я показал ему, как делать это через отправку API-запросов в Postman, а сам сел на пол в соседней комнате (стульев не хватило) и начал чинить. Ещё через пятнадцать минут всё было готово.

Я вышел обратно под навес, чтобы показать баг-фикс Денису. И только тут я осознал. Всё работало. В клиентской части ничего не сломалось. Интерфейс оказался понятным и не требовал объяснений. Кое-кто успел пройти несколько первых заданий, упёрся в сложное и спрашивал Дениса. Одни ребята читали задания или документацию, другие — обсуждали сложности с соседями. Всё шло как надо. Впервые за несколько последних лет я испытал то ни с чем не сравнимое чувство, когда люди пользуются твоим продуктом.

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

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

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

Если бы не эти проблемы, за первую неделю было бы вполне реалистично добавить к освоенному MongoDB и концепцию SPA. Не влез бы только изоморфный рендеринг, но им и профессиональные разработчики не все владеют.

Итоги

Некоторые ребята специально выбрали первый заезд — чтобы почувствовать на себе все сложности и посмотреть, как всё начиналось. Это крутая точка зрения, и она никогда раньше не приходила мне в голову. С первой группой сложились совершенно особые отношения. Когда наступил последний день, и ребята начали собирать первые палатки, это оказалось очень грустным и каким-то неожиданным. За эти несколько дней мы успели привыкнуть и казалось, что так будет всегда.

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

Новости школы «Хуториум» публикуются в Telegram-канале и на сайте школы. Как обычно, готов ответить на все вопросы в комментариях к статье.

#образование

{ "author_name": "Поселок ", "author_type": "self", "tags": ["\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435"], "comments": 178, "likes": 73, "favorites": 29, "is_advertisement": false, "section_name": "default", "id": "41174", "is_wide": "1" }
{ "is_needs_advanced_access": false }

Комментарии Комм.

Популярные

По порядку

0

Прямой эфир

Подписаться на push-уведомления
[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } } ]