Куда пойти учиться программисту: советы опытного тимлида, преподавателя и новичка

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

Чем занимаются

Владислав Алеев, активный джуниор: Я начинающий верстальщик, мне 24 года. Верстаю и немного пишу на JavaScript. Много учусь программированию сейчас.

Борис Ванюшин, разработчик-наставник: Сейчас мне 32 года, я пишу на JavaScript для нескольких крупных клиентов CSSSR и параллельно веду интенсивы на онлайн-курсах программирования HTML Academy.

Евгений Вецель, опытный тимлид: Мне 37 лет, до прихода в CSSSR я создал один из самых популярных в России сайтов о гаджетах 4pda. Веду бесплатный курс: мы делаем YouTube-уроки, на которых я подробно объясняю программирование реальных компонентов на React от начала и до конца.

Как учились программировать

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

После университета пошёл в крупную контору человек на 50 и сразу попал в мясорубку. Из-за кучи дел моему наставнику было постоянно не до меня. Я ушел оттуда почти сразу, потому что ни учиться, ни работать там не получалось.

Борис Ванюшин: Я начинал учиться программированию лет десять назад, ещё в университете. Но вскоре бросил и переквалифицировался в менеджера проектов. Проработав менеджером несколько лет, понял, что это не моё, и снова пошёл в разработку. Поэтому в 30 лет я начал учиться программированию фактически заново.

Евгений Вецель: Моё обучение было адской смесью из всего подряд. Метод научного тыка, книги, коллеги, много собственной практики и успешных проектов, чужой код, интерактивные курсы в интернете. Из этого винегрета самыми полезными были статьи в интернете, Stack Overflow и официальные руководства по новой технологии.

Есть ли польза от онлайн-курсов и интенсивов

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

Из курсов я проходил обучение в «Школе Программирования» (ныне — Geekbrains) и HTML Academy. После прохождения курса в Geekbrains могу смело сказать, что только зря потратил на них деньги и время. Чуть больше понравились бесплатные курсы от HTML Academy: у них интерактивный формат и интересная подача, но их материал запоминался с трудом. Через месяц после завершения HTML Academy я открывал их задачи как в первый раз. Совсем другое дело, когда сидишь над задачами сам. Несколько часов можешь убить из-за какой-нибудь глупой ошибки, но зато запомнишь пути решения надолго. С курсами такого нет: преподаватель выдаёт заученную программу без большого внимания к практике и твоим вопросам.

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

Еще одна беда интенсивов в том, что они часто работают по принципу «Бизнес Молодости»: тебя заряжают, говоря, «дожми ещё чуть-чуть, и всё получится!». Но заряд кончается сразу после курса.

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

Борис Ванюшин: Я сам занимаюсь наставничеством в рамках интенсива HTML Academy по JavaScript, поэтому знаю процесс изнутри. Курс проходит так: ученики смотрят лекции и выполняют практические задания. Я отвечаю на вопросы по лекциям и даю обратную связь по коду, допущенным ошибкам и возможным улучшениям. Такой интенсив длится около двух месяцев. Приходят люди совершенно разного уровня. Есть даже бабушки, которым скучно сидеть дома без дела. Но чаще всего на курс по JavaScript идут люди, которые уже изучали вёрстку и CSS. Для них знание JavaScript станет развитием карьеры верстальщика.

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

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

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

За 70 тысяч, потраченных на курс, можно сэкономить три месяца. Тот же объём знаний получишь за два месяца вместо трех-четырех, но только если будешь впахивать. Чтобы получить по итогам курса хорошую работу, нужен некий минимум часов, потраченных на написание кода. Можно ориентироваться на 1000 часов. И тут никак не получится перепрыгнуть.

Евгений Вецель: Онлайн-курсы дают много информации, но они не дают «базу». Поэтому после курсов у людей нет знаний разных фреймворков и «полочек», по которым разложены все знания. Эти знания и структуру дают книги и закрепление знаний на практике с ментором, а не интенсивы. Красивые обещания зарплаты в 120–150 тысяч по их итогам — тем более миф. Платить такую зарплату человеку, который не может самостоятельно решать задачи, никто не будет. Вообще курсы без практического опыта — утопия. Я как-то работал с человеком, который закончил такие курсы и видел, как он пытался идти заученными тропами.

Можно ли научиться программированию только по книгам

Владислав Алеев: Я ни в коем случае не советую начинать обучение только с книг. Простой пример: недавно вышла книга Леа Веру «Секреты CSS. Идеальные решения ежедневных задач». Русское издание настолько ужасно, что цветные градиенты в книге стали черно-белыми, а padding (внутренний отступ) стал «забивкой». Если новичок после учёбы по этой книге придёт в компанию разбирать код, используя слово «забивка» вместо padding, разговор с ним будет коротким. По моему опыту, книги будут полезны только вместе с практикой.

Борис Ванюшин: Если учишься полностью сам, то можешь не придавать внимания важным вещам. Например, качеству кода и работе системы за пределами заданий из книги. Ты можешь считать мешанину в коде чем-то несущественным, но это первое, что бросится в глаза на собеседовании.

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

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

Куда идти работать новичку

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

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

Евгений Вецель: Мой главный совет новичку — искать себе ментора. А работу выбирать такую, где есть обучение и время для обсуждений. Ментором может стать любой знакомый, если он знает язык программирования лучше тебя. Даже у меня часто бывают ошибки в коде, решение которых может занять несколько дней. Самому можно вообще никогда не найти эти ошибки, особенно если они связаны с внешней библиотекой. Зато ментор их быстро найдет, и не придется буксовать. Закапываясь в мелочах, рискуешь потеряешь весь запал и можешь забросить задачу.

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

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

Что самое важное в обучении программированию

Владислав Алеев: Лучший совет, который я могу дать, — больше практики. Чем больше, тем лучше. А книги используйте уже после, когда будет базовое понимание темы.

Если говорить об инструментах, то я советую смотреть вопросы и ответы на Stack Overflow. Со временем можно самому пробовать давать там ответы. Для новичка, который только начал работать с JavaScript, важно:

  1. Понимать принцип работы и знать синтаксис языка. Без этого простейший код будет вызывать ступор. Пример ключевых слов: IIFE, замыкание (понять, а не заучить), каррирование, всплытие переменных.
  2. Нужно научиться читать и понимать чужой код.
  3. Важен не код, а мышление. Надо понимать, что язык — всего лишь инструмент. Если ты на позиции младшего разработчика можешь описать хотя бы три популярных алгоритма сортировки и поиска, нарисовать к ним схемку и написать хотя бы один на псевдокод — ты уже выгодно отличаешься от большинства новичков. Также нужно знать структуры данных (List, Array, Map, Set).
  4. На практике полезно решать каты из Codewars. На собеседованиях, как правило, дают схожие.

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

Евгений Вецель: Когда изучаешь программирование, получаешь кучу знаний из разных сфер. Если учить это все самому, то просто свалишь все в кучу. Именно ментор помогает раскладывать всё по полочкам. А если у тебя этих самых «полочек» не будет, можно получить кучу информации, запутаться в ней и от испуга уйти из профессии.

Когда делал уроки для своего YouTube-канала, заметил, что гораздо увлекательнее учиться в паре с новичком. Он пишет код, а я подсказываю ему, куда рулить. Ученые уже доказали, что не воспроизведённое хотя бы один раз — изучено зря. Это значит, что практика при изучении программирования нужна обязательно. Я рекомендую всем завести свой небольшой проект, улучшать и усложнять его по мере обучения. Тем, кто учит JavaScript, особенно повезло: это ещё и серверный язык, на котором можно написать цельный продукт.

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

Идеальное движение для изучения того же JavaScript — начать с написания в Codepen простой странички. Начать с HTML, потом перейти к основам CSS, а после создания странички, перейти к JavaScript.

Что читать и смотреть

Владислав Алеев: Если бы я сейчас мог сам себе отправить сообщение в прошлое, то сказал бы так: бегло пройдись по «Современному учебнику JavaScript». Полностью пройди курсы на Hexlet, закрепляя видеокурсом Sorax по основам JavaScript. Решай задачи на Codewars и пробуй писать что-то из реальных проектов — слайдер, валидацию полей формы или калькулятор, тайм-трекер. Периодически проси наставника сделать ревью.

Закрепи всё несколькими крутыми книгами по JavaScript вроде JavaScript: The Definitive Guide, You don’t know JavaScript: this and Object prototypes. Можно и всю серию. Не забывай высыпаться и отдыхать — без этого обучение пройдёт гораздо хуже.

Борис Ванюшин: Давайте я что-нибудь нетехническое посоветую. Например, «Программист-прагматик» Эндрю Ханта.

Евгений Вецель: Для изучения JavaScript и React в частности, я бы порекомендовал посмотреть заседания нашего клуба React learning club. В нём уже более 36 уроков.

Виталий Иванов, React-разработчик, CSSSR: Для тех, кто изучает JavaScript, я отобрал следующие книги, которые надо прочитать:

  1. JavaScript: The Definitive Guide — читать обязательно. Лучше раза три. А потом держать под рукой как справочник.
  2. Eloquent JavaScript — тут есть хорошие задания для начинающих.
  3. Exploring ES6 — сложная для новичков, но показывает много важных тонкостей в ES6.
  4. Coders At Work — как учатся программированию выдающиеся программисты: реальный опыт.

После изучения основ JavaScript стоит начать обращать внимание и на другие языки программирования. Можно посмотреть на Java. Introduction to Programming in Java: An Interdisciplinary Approach — введение в Java с большим количеством интересных задач по программированию. Книга будет понятна начинающим.

Через какое-то время стоит изучить алгоритмы и структуры данных: Algorithms — книга будет легче читаться после Introduction to Programming in Java. По двум последним книгам есть целый курс на Coursera, но они пригодятся и без него.

©  vc.ru