Frontend Dev: хороший, плохой, злой. Часть 3: Злой путь

Illya Klymov
9 min readJul 20, 2016

Предыдущие части:

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

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

Падение курса гривны к доллару пару лет усугубило эту ситуацию. Если раньше разрыв в “официальных” доходах между высококлассным педагогом и “junior+ software developer” был раза в 2 (не в пользу учителя), то сейчас эта цифра составляет 5–6 раз.

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

По итогу все ринулись в IT. Все хотят быстрых и легких денег. Чем же эти люди, отличаются от героев предыдущей части? Тем что на самом деле во главе стола у них стоит не максимизация прибыли в единицу времени, а вопрос выживания в условиях кризиса. Т.е. фактически вся их цель — устроится на первую работу, а там посмотрим. Ведь джуниор фронтенд получает к примеру $300, что в 1.5 раза больше специалиста химической промышленности с 6 годами опыта.

Фактически, вопрос один: как за минимальное время получить первую работу в роли frontend-разработчика.

Акцент делается именно, на минимальном времени. Если Вам просто нужно детальное пошаговое руководство по вхождению в нашу профессию, то вот оно (это хороший путь):

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

Что учить?

Почти все начинают с HTML и CSS. Поверьте моему опыту — сейчас это не так важно. Если вас берут на позицию именно FrontEnd-разработчика, а не “верстальщика с жээсом (c)” — ваша задача показать, что вы умеете решать задачи. Тогда вам простят отсутствие владения “responsive дизайном”, незнание всех хаков для позиционирования элементов на странице и т.д.

Поэтому, берем Кантора, проходим два первых обязательных раздела и раздел “AJAX и COMET”. Поздравляю, вы знаете JavaScript кунг-фу (на самом деле нет).

Теперь берете любой фреймворк по которому много документации (кто сказал Angular 1.x?) и делаете следующее:

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

Это самое идиотское задание, которое я делал! Я утомился три раза делать одно и тоже. И удивился, когда таск с собеседования собрал прямо из кода, которые уже писал и которые я помню

(из отзыва студента, орфография и пунктуация сохранена, словами “утомился” и “удивился” заменены другие слова, которые значат то же самое, но пишутся по-другому)

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

Приведу лишь несколько, которые мне пришли на ум (дополнения в комментариях приветствуются):

  • вкладочки (табы) и динамическая загрузка данных внутрь них;
  • формы и валидация формочек как на клиенте, так и получая ответ с сервера;
  • бесконечный скролл;
  • drag & drop;
  • выпадающие меню
  • кастомные селекты

Впрочем, вы и сами соберете нужные “блоки” достаточно быстро, выполнив пару-тройку тестовых заданий на собеседованиях.

Как учить?

Самостоятельное обучение

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

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

Тем не менее, специфика именно нашей отрасли омрачает самостоятельное обучение. JavaScript развивался хаотично, и изучая его по хорошим материалам, но 5 или даже 2-летней давности вы рискуете просто потратить время. JavaScript долгое время не воспринимали всерьез, поэтому интернет полон bullshit-кода, смотря на который вы научитесь только писать такой же bullshit-код.

В моей примитивной педагогической картине мира, практически любое обучение построено на цикле:

  • смотри как это делаю я;
  • делай вместе со мной;
  • делай под моим присмотром;
  • делай сам, потом покажешь результат

Материалы в интернете эффективно обеспечивают решение первых 2 пунктов: превосходный egghead.io полон видео-уроков, повторяя которые вы чему-то учитесь. У нас в Украине введена 12-бальная система оценивания в школе, так вот это идеально соответствует оценке в 7 баллов:

Ученик способен применять выученный материал на уровне стандартных ситуаций.

Для того же, чтобы быть “полезным”, вам нужен уровень не менее 10 баллов:

Ученик обнаруживает начальные творческие способности, самостоятельно определяет отдельные цели собственной учебной деятельности.

Программирование в целом состоит из разбиения задачи на подзадачи, и дальше реализации этих отдельных подзадач. Без возможности формирования собственных мелких подзадач вы каждые полчаса будете вынуждены дергать большого страшного senior’а, быстро утягивая вашу ценность для компании в опасно отрицательные значения.

Именно здесь становится особо важным наличие у вас ментора в любой форме. Ментор должен делать две вещи:

  • выдавать задания, выполнение которых поможет вам оценить ваш уровень;
  • давать обратную связь по этим заданиям;

Идеальный ментор делает еще несколько вещей:

  • следит за “залипами”, когда подопечный слишком долго застряет на каком-то моменте и бьёт туда где болит, устраняя слабые места обучаемого
  • в случае вопросов от подопечного не отвечает на них, а делает так. чтобы человек сам нашел ответы. Другими словами — дает удочку, а не рыбу.

Мне ужасно нравится концепция Assisted Learning: когда вам выдают материал для самостоятельного обучения, а встречи проводятся только чтобы задавать вопросы и давать обратную связь по заданиям. При этом студент может двигаться, как я уже подчеркивал, с комфортной для него скоростью.

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

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

Пособие по удержанию ментора

Курсы

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

Хороший преподаватель способен предоставить отмодерированный список материалов для изучения (у меня все есть мысль создать список рекомендуемых материалов для новичков в JS на GitHub, я видел пару затей, но достойных — нет, если знаете такой — поделитесь в комментариях).

Для многих (я сам такой) важным фактором будет конкуренция. Я не люблю плестись в хвосте группы, что стимулирует меня делать все “с усердием”. Я до сих пор вспоминаю курс С++ Grandmaster Certification, с которым я не справился и это до сих пор болезненный удар по моей гордости.

Как подобрать хорошие курсы? Только по отзывам. При этом идите к человеку, а не к фирме. Именно харизма преподавателя, его способность пояснять вещи определяют эффективность усвоения знаний. Я видел как одну и ту же программу четыре разных тренера преподносят под радикально разными ракурсами с двухкратной разницей по эффективности. Всегда помните об этом, слишком часто компании прикрываются словами “методика разработана самим Х”. Отзывы, отзывы и еще раз отзывы. Только так и никак иначе.

Как пробиться?

Being good is not good enough

У моих коллег не далее как пару месяцев назад была открыта вакансия junior FrontEnd-разработчика. Они разместили вакансию на http://rabota.ua и за неделю получили 79 отзывов на одно место. В пятницу, за кружкой чая со мной делились впечатлениями:

Восьмичасовой рабочий день, сплошь из собеседований Junior’ов. Вереница выпускников самых разных курсов, “академий” и тренингов. Все как под копирку — первичные тесты отсеяли совсем слабых, но как можно выбрать одного из серой массы? В итоге выбирали скорее по ощущениям от встречи, чем по реальным знаниям

Именно поэтому, я считаю что самым лучшим способом пробиться сейчас являются курсы непосредственно при какой-либо компании. Дайте шанс вашим будущим коллегам увидеть вас не в течении получаса собеседования, а “на дистанции”. Пусть они увидят, что вы:

  • способны справлять с трудностями;
  • усваиваете новую информацию и применяете ее на практике;
  • задаете правильные вопросы тогда, когда это нужно;
  • не истерите и адекватны (ох, вы не представляете как важен этот пункт);

Ничего не напоминает? Да, это те самые “стрессоустойчив, коммуникабелен, легко обучаем” из каждого первого шаблонного резюме. Задумайтесь, они попали туда не случайно. Это реально те ценности, которые нужны каждому работодателю.

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

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

  • хорошее знание GIT и аккуратное ведение коммитов (как доказать: сделайте тестовый проект “по всем правилам”, с аккуратной историей — это оценят). Для меня и еще пары знакомых ребят — это хороший показатель, что вы интересуетесь не только “писанием кода”, а еще и тем, что со всем этим делать в дальнейшем.
  • Вопросы на собеседовании по тому “как это у вас работает” (работает, только если вас собеседуют на конкретный проект)
  • изворотливость. Ваша задача — любой ценой говорить о том, чего вы знаете, а не о том чего вы не знаете

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

Вместо послесловия

Три пути. Хороший, плохой, злой. Каждый из них уведет вас по своей дороге, каждый из них по-своему очарователен и по-своему отвратителен. Но какой бы Вы не выбрали, всегда помните об одной вещи — современное программирование не существовало бы вообще без программистов, которые помогают сообществу. Помогают своими opensource-проектами, отвечая на глупые и не очень вопросы на Stack Overflow, выступая на конференциях и т.д. и т.п. И уйдя сколь угодно далеко по любому из этих путей — обернитесь назад и найдите время сказать “спасибо” сообществу, без которого не было бы ни меня, ни Вас как профессионала.

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

--

--