Чем отличается обучение на Хекслете от других школ

Читать в полной версии →

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

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

Предыстория

Сам проект появился и стал довольно известен в 2012 году. Уже на тот момент он насчитывал более 40 тыс. студентов. Его сделал Рахим Давлеткалиев, к которому позже, в 2013 году, присоединился Кирилл Мокевнин (ваш покорный слуга). Изначально Рахим хотел создать аналог Курсеры на русском языке, но с моим присоединением мы изменили курс.

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

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

Читайте также: Чек-лист хороших инженерных практик в компаниях

Как устроен рынок

Как обычно всё происходит? Какой-то человек решил стать программистом, начитался популярных статей, насмотрелся рекламы, посмотрел видео о том, как войти в айти. И затем пытается выбрать подходящее обучение.

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

Реклама сводится к «Выучи Vue.js и устройся на работу через полгода». Коммерческие курсы на 100% отражают спрос. Они дают ровно то, за чем приходят люди. Фактически, вся эта система заточена на одну конечную цель, общую как для студентов, так и для школ — трудоустройство.

В теории всё выглядит здорово и эта схема плюс минус работает, но есть нюансы.

Информационный шум вокруг создает ощущение, что программирование — это знание конкретных технологий. Знаешь React? Есть опыт с Laravel? Берём на работу. YouTube забит роликами на тему, какой язык учить в этом году, какой в следующем. Начинающие верят в то, что версии библиотек или языков значительно влияют на то, получится из них программист, или нет.

К чему это приводит?

Программы обучения

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

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

Такая схема не лишена смысла и действительно работает для части людей. В конце концов они достигают своей цели и устраиваются на работу. Но как инженер я не могу согласиться с таким обучением. Это очень далеко от понятия «программирование». Здесь путь Хекслета расходится с большинством других школ.

Смотрите также: Как эффективно обучаться программированию

Правда про программирование

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

Пример из реальной жизни. Два разработчика получают примерно одинаковую зарплату на позиции middle-разработчика. При этом скорость их разработки может отличаться в десяток раз! Причём внешне похожий результат внутри будет совершенно разным. У одного, который быстрее, понятный и простой код, который легко поддерживать, у второго — сложный, запутанный код, который сам же автор через какое-то время не понимает. Это не фантастика, вокруг множество проектов, программисты которых жалуются на плохое качество кода, постоянное желание всё переписать, отсутствие хороших инженерных практик и постоянное выгорание. Как такое возможно, особенно в проектах, которым от силы пару лет?

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

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

Алгоритмическое мышление

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

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

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

Архитектура

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

Подписывайтесь на канал Кирилла Мокевнина в Telegram — чтобы узнать больше о программировании и профессиональном пути разработчика

Понимание того, как делать правильно, нужно где-то получить, а из опыта оно берется только частично. Архитектура базируется на многих фундаментальных и прикладных знаниях:

Отладка

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

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

Как научиться хорошо отлаживать программы? С одной стороны речь идет про владение конкретными способами и инструментами отладки, с другой — уровень отладки очень сильно опирается на понимание окружения, в котором работает софт. Например, очень важно знать принципы работы операционных систем, иметь представление о том, как функционируют сети и конкретные протоколы (tcp/ip, http), понимать правила эксплуатации проектов, то, как работать с логами (журнал действий и ошибок).

Тестирование

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

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

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

Тестирование — неотъемлемая часть любого современного проекта, независимо от его размера. Даже простые библиотеки тестируются и подключаются к CI. Для этого достаточно поизучать популярные проекты на github.com

Смотрите также: Начинаем писать тесты (правильно)

Инфраструктура

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

Но это только начало — потом придется разбираться с ветвлением в git, ребейзом и мержем. Затем нужно знакомиться с Docker. В свою очередь это может повлечь за собой переезд на Linux.

Дальше различные прикладные программы, начиная от WebPack, и заканчивая базами данных.

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

Эксплуатация

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

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

Хекслет

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

Если внимательно посмотреть на программу обучения Хекслета, то можно заметить, как она отличается от подобных программ других сервисов. Например, одна тема про массивы — это целый курс. Фокус идет не на изучение конструкций, а на разные варианты применения, изучение базовых алгоритмов, понимание алгоритмической сложности и лучших практик работы с коллекциями. Дальше встречаются курсы по автоматическому тестированию, правильному построению абстракций, работе с древовидными структурами данных и так далее. Одна тема по ООП — это 5 курсов, Карл! Ну и, конечно же, прикладные фреймворки и инструменты, но ближе к концу. К этому времени, когда студент доходит до них, он уже неплохо программирует.

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

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

В чём подвох? Хекслет заточен на серьезную подготовку и идеально подходит для тех, кто хочет стать хорошим инженером. Такой подход отражается на сложности материала. Как говорят наши пользователи: «придется покипеть», но эта сложность компенсируется наставниками, которые помогают продвигаться вперед и становиться по-настоящему крутыми разработчиками.

Дополнительные материалы: