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

Три сотрудника 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, важно:

  • Понимать принцип работы и знать синтаксис языка. Без этого простейший код будет вызывать ступор. Пример ключевых слов: IIFE, замыкание (понять, а не заучить), каррирование, всплытие переменных.
  • Нужно научиться читать и понимать чужой код.
  • Важен не код, а мышление. Надо понимать, что язык — всего лишь инструмент. Если ты на позиции младшего разработчика можешь описать хотя бы три популярных алгоритма сортировки и поиска, нарисовать к ним схемку и написать хотя бы один на псевдокод — ты уже выгодно отличаешься от большинства новичков. Также нужно знать структуры данных (List, Array, Map, Set).
  • На практике полезно решать каты из 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, я отобрал следующие книги, которые надо прочитать:

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

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

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

11
39 комментариев

HTML и CSS – не программирование. Совсем.

---

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

Интенсивы дают только информацию, которуб без подкрепления практикой вы через пару дней забудете. Такие объемы и для профессионалов даются тяжело. Для новичков - это ад. Мозг просто не может работать в таком режиме.

Вебинары - это перенос всех недостатков классно-урочной системы в интернет:
1. У учеников разная скорость усвоения материала. Для новичков это критично.
2. Скучные непрофессиональные преподаватели. Они может и крутые программисты, но педагоги слабые.
3. Нужно подстраиваться под график удобный преподавателю.

Хотите научиться программировать - не выбирайте вебинары и интенсивы - это самые неэффективные способы.

---

Книги. Книги нужно уметь подбирать. Очевидно, что не стоит начинать путь в CCS с "Секреты CSS. Идеальные решения ежедневных задач". Нужно начинать с лайтовых книг. С азов. Как подключить стили, как изменить цвет бокса, как вывести данные в таблицу.

Есть хорошие авторы, есть хреновые. Как и везде. Читал книгу Харви Дейтела по программированию на C++. Очень толковая. В процессе авторы предлагают создать проект симулятора лифта. Главное когда книги читаете - повторяйте весь код за авторами.

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

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

---

Ютюб-уроки. Основная проблема - нет хорошей программы обучения. Есть набор роликов без связанной с ними практики. Без практики научиться программировать невозможно. Посмотрел 10 лайтовых уроков и тебе кажется, что ты умеешь программировать. Нихрена ты не умеешь.

Если ролики подкреплены практикой - отлично. Это один из самых эффективных способов обучения.

Смотришь как пишет код учитель. Не больше 10 минут. За это время можно объяснить/понять 1-2 понятия и мозг не устанет.

Повторяешь за учителем (как с книгами, только видео). Повторил, понял, поиграл с кодом, сломал программу, починил, разобрался, знания закрепились. Решил пару задач на эту тему. Перешел к следующему уроку.

Это важно. Ученики ленятся и начинают смотреть всё подряд. Без практики и повторения. Что сводит на нет всё обучение. Поэтому изучайте дозировано. Урок-повторение-задача-урок-повторение-задача.

Плюс можно отмотать и посмотреть урок еще раз, если не понял. Или ускорить видео, если схватываешь налету.

Совсем не разобрался в теме - пиши автору курса или на форуме.

Не успел на вебинаре - сам дурак, вебинар для среднего ученика, как вся школьная и вузовская программа.

Короткие уроки с последующей практикой - это один из самых эффективных способов обучения. Не верите? Посмотрите как учатся дети - смотрят за взрослыми, повторяют, привносят что-то своё, закрепляют. Природа же.

---

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

---

Учитель. Хороший учитель лучше книги и лучше видео. Но только когда у него один-два ученика. Даже с двумя уже будут проблемы в скорости восприятия.

Если вы совсем новичок, то можете смело учиться паскалю. Учителей паскаля много, учителей js мало. Перескочить с паскаля на другой язык - без проблем. Замыкания и прочее освоите позже. Возможно с наставником.

---

Свой проект. Можно решать небольшие задачи, а можно сразу взяться за большой проект. Сайт школы сделать. Вирус написать (я написал, запустил, словил проблем, больше не писал). В большом проекте учишься быстрее, особенно всему современному, архитектуре, последним новинкам, библиотеке языка.

Я когда HTML и CSS учил - верстал уголовный кодекс. На фреймах. Динозавр.

Когда PHP учил - делал автопортал. 2 месяца программировал через боль. Потом фирму открыл и начали деньги зарабатывать. 2006 год был. Интернет - 3 рубля за мегабайт.

Потом Python и Django - снова свои проекты. Лучший способ научиться.

---

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

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

---

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

Знания - это то, что вы получаете на уроках (видео или офлайн) и то, что у вас остается в мозгу. Самая ненадежная структура. Если не подкреплять, то через пару дней от знаний ничего не останется.

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

Навык - это умение, доведенное до автоматизма. На этом этапе вы становитесь программистом. Требует много практики. Очень много.

Пройдете весь путь ЗУН - будет счастье.

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

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

32
Ответить

В вашем комменте одно плохо - далеко мотать наверх, чтобы поставиь палец вверх :)

1
Ответить

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

1
Ответить

Этот коммент достоин отдельной статьи

Ответить

Такое громкое название, куда пойти учиться программисту. А на деле спросили верстальщика и двух мужиков с front-end'а. Очень показательно! В общей сумме они даже не покрывают полный стек веб разработки. А распинаетесь о программировании. Куда более наглядным было бы название "куда пойти, если твой максимум - это верстка и фронтенд"

27
Ответить

Спасибо, посмеялся

Ответить