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

История моих терзаний

Illya Klymov
9 min readJul 19, 2016

--

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

Тем не менее и, как ни странно, все описанное далее “основано на реальных событиях”. Эти стратегии позволили моему ученику за 17 месяцев вырасти из Junior Angular developer в JavaScript Tech Leader (c $300 до $3800, если вы жить не можете без конкретных цифр), а второму — прийти в профессию зеленым новичком и спустя без малого 2 года исчезнуть с моего горизонта на просторах кремниевой долины. Здесь конкретных цифр не будет (поверьте, как бы они внушительно не выглядели — жизнь на просторах Сан-Франциско феноменально дорогая).

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

Плохой путь

Давайте определимся с терминами — почему “плохой”? В моей розовоочечной картине мира, есть ровно один сравнительно честный способ резкого повышения своей стоимости на рынке труда — специализация. Даже если вы умеете немного, но умеете это на достойном уровне — вам простят пробелы в общем образовании, незнание “очевидных” вещей и даже откровенные глупости на собеседовании. 6 лет назад, на интервью в крупную аутсорсинговую компанию на позицию Senior JavaScript Developer я не смог написать простейший CSS-селектор — ну не работал я с JQuery, не работал, да и верстка была не моей самой сильной стороной — что не помешало мне успешно пройти собеседование и получить оффер на сумму даже больше, чем я рассчитывал. Тем не менее узкая специализация — это огромный риск оказаться на обочине истории, сделав ставку не на ту лошадь. За детальными рассуждениями на эту тему я опять отошлю вас к упомянутой в предыдущей части статьи дилогии “Звезды — холодные игрушки”. Она правда стоит того, чтобы ее прочитали. Поэтому вступая на “плохой” путь — всегда имейте запасной план. Не стоит приходить в казино и ставить всё на чёрное.

Технологии

Итак. Мы хотим много-много денег. И нам нужна специализация. Стратегия выбора очевидна. Нам нужен фокус на технологии, удовлетворяющие следующим критериям:

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

React

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

Встречает как-то крыса хомячка и спрашивает: «Слышь, хомяк, а почему вашего брата так люди любят, детям в подарок покупают, в мультиках снимают, стишки и песенки сочиняют, а меня чуть завидят — сразу гонят, шпыняют, хвост им мой не нравится…». Хомячок почесал лапкой за ушком и говорит: «Ты знаешь, крыса… наверное у тебя просто пиар плохой!»

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

Как бы мне не нравился React, как бы хорошо за него не платили — не лучший выбор для нашей финансовой независимости — он слишком “хорош” для нас.

Angular 1.х, React и Node.JS глазами меркантильного JS-разработчика

Angular 1.x.

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

Hype, hype, hype!

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

  1. отбросить свою гордость, неверие в книги и изучить ровно одну от корки до корки. Да, я о ng-book;
  2. Найти ментора / друга / тренера, который даст вам задание по AngularJS;
  3. сделать это задание, постоянно подглядывая в ng-book;
  4. получить разгромную критику, найти другого или этого же ментора / лучшего друга или тренера;
  5. Повторить пункты 2–4 в среднем 5 раз (размер одной итерации около месяца-двух);
  6. Разослать резюме, в резюме указать сделанные “проекты”, стыдливо умолчав, что они являются учебными;
  7. Получить тестовое задание на AngularJS, выполнить его почти с закрытыми глазами, т.к. все тестовые задания на AngularJS действительно однотипны
  8. Заучить что такое замыкание в JavaScript и как работает прототипное наследование, пойти на собеседование
  9. На собеседовании на все “каверзные” вопросы отвечать “Да, так тоже можно, но в сообществе Angular есть общепринятые best practices”
  10. Получить оффер на middle AngularJS-developer минуя позицию джуниора

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

  • что такое, черт побери, Promise на самом деле и как они работают;
  • всю эту магию transclude, включая нововведения Angular 1.5;
  • понимать как работают директивы во всех их проявлениях;
  • как работает $watch, когда и как это тормозит;
  • ES2015 и все его фишки;
  • тестирование кода как в реальной жизни, так и на “поговорить” (иногда ошибочно называемое “как правильно”)
  • webpack, или чего-там-будет-модно-для-сборки-когда-вы-будете-читать-эту-статью;

С этими знаниями вы можете гордо идти к руководству и требовать повышения. Если Вы обладаете минимальными коммуникативными навыками (а их тоже надо развивать), вы к этому времени прослывете как специалист, уверенно справляющийся со своей работой — мечта, а не сотрудник. Или, если вы стеснительный, можете начинать “оффер-раны” (это когда человек за год меняет 2–3 фирмы, каждый раз получая +X$ к зарплате) — благо предложений по AngularJS просто пруд пруди — и поверьте, меньше их в ближайшее время не станет — кому-то надо будет поддерживать тонны кода, написанного на первой версии этого замечательного фреймворка

ExtJS / Sencha Touch

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

Для тех кому не знакомы эти буквы поясню. ExtJS — это фреймворк для быстрого и эффективного написания всяких бизнесовых штук. Ну знаете, таких проектов, где таблички отчетов приправлены табличками отчетов и сверху слегка посыпаны табличками. Писать под ExtJS можно вообще не вдаваясь особо в HTML/CSS (правда будьте готовы к тому, что изменение внешнего вида любого компонента — боль), у них собственный слой данных, слой отображения, да даже система классов — и та своя. Да, как и в случае с AngularJS то, на чем вы будете писать, лишь отдаленно будет напоминать JavaScript. Да, забудьте о новомодных тенденциях — вы теперь в суровом “энтерпрайзе”, где не появляются вещи не проверенные временем.

Здесь, как показывает практика, даже книжки читать не надо. Человек, реально освоивший всю документацию проекта и написавший 2–3 приложения (здесь, справедливости ради, цикл “написания” занимает дольше — 2–3 месяца, пока мозги проникнутся извращенной логикой авторов) уверенно рассуждает о тормознутости ExtJS, способен рассказать 5 хаков при расширении Store и даже уйти от вопроса про наследование на собеседовании, сведя его к рассказу, как это все реализовано “у нас в фреймворке”.

Справедливости ради, количество предложений на рынке труда по ExtJS не сравнимо с Angular. Но каждое такое предложение — в среднем в 1.5 раза дороже. И развиваться там проще — сказывается, знаете ли отсутствие конкуренции.

5 пунктов, которые важно помнить начинающему (или продолжающему ExtJS разработчику):

  • Никогда. Нет, не так. НИКОГДА не забывайте, что вы — посреди пути в никуда. Этот путь более чем денежный (поверьте мне, я долгое время писал на ExtJS), но когда наступит миг ухода — весь ваш опыт придется просто выкинуть.
  • Забудьте о развитии. Путь ExtJS-разработчика — не путь познания себя и кода. Все что Вы будете делать — это учить заклинания, которые делают нужные вещи и оперировать кодом, как волшебной палочкой.

— Что это за словосочетание «Вингардиум левиоса»? Кто придумывает слова к этим заклинаниям, дети дошкольного возраста?
(если вы еще не читали превосходнейший фанфик “Гарри Поттер и методы рационального мышления” — самое время это сделать)

  • Уважение в комьюнити? Забудьте. Вы можете написать сколь-угодно сложный прокси для загрузки данных, вы можете ускорить рендеринг стандартного грида в 20 раз — для всех вы останетесь на уровне “формошлёпа”
  • Очень сложно сохранять мотивацию или, хотя бы, эффективность, делая раз за разом одно и то же. Проекты не будут отличаться разнообразностью
  • А еще (и для меня это было очень важно) с большой вероятностью, вы не сможете размахивать результатами своего труда в резюме. Специфика “корпоративных” проектов обязывает. NDA, NDA и еще раз NDA. Будьте готовы к этому.

NodeJS

Да, я знаю что статья называется “Frontend Dev”. Но ведь мы же сразу договорились отбросить все условности в угоду зеленым хрустящим долларам?

Люди, пришедшие в мир JavaScript со стороны HTML и CSS ощущают сильный дискомфорт при работе с Node.JS. Видимо большинство из них — визуалы, и оставаться наедине с суровыми ответами серверов им некомфортно.

Тем не менее, Node.JS это просто. Посудите сами:

  • у вас нет пачки браузеров, в каждом из которых верстка и JS ведут себя по-разному
  • большинство решаемых задач — “запрос — ответ”. Никаких глупых пользователей, которые умудряются нажимать не те кнопки, когда от них это ожидают
  • возможность писать на “нормальном” JavaScript, а не кусать ногти и поддерживать ископаемый IE9
  • Просто тонны литературы в интернете

А главное, в отличие от фронтенда, на “сервере” у нас есть “четкие победители”: Express.JS и Mongoose к примеру. (Да, несомненно у вас другой, более лучший стек, но реальность такова). Вы осваиваете их — и проходите собеседование. Как показала моя практика подготовки людей — именно Node.JS обладает самым низким порогом вхождения, если у Вас технический склад ума и вы способны понять что такое асинхронность. Пара месяцев битья по рукам — и человек пишет вполне сносный код.

Начните с http://nodebeginner.ru и дальше двигайтесь по любым доступным в интернете материалам. Я рекомендовал бы воркшопы с http://nodeschool.io, но это уже дело вкуса.

Традиционный список того, о чем нельзя забывать Node.JS “разработчикам”:

  • знайте своего врага. Разберитесь уже, черт побери, как работает протокол HTTP, которым вы пользуетесь. 9 из 10 Node.JS разработчиков не могут выполнить http-запрос telnet’ом
  • если вы уж взяли платформу — используйте её на полную. У нас есть Buffer’ы и Stream’s. Каждый раз когда вы сохраняете csv файл размером в гигабайт на диск, перед тем как начать его парсить — где-то сильно плачет один котенок.
  • Научитесь пользоваться отладчиком и профайлером. Стоит каждой минуты
  • Пишите тесты. Вот уж где-где, а на Node.JS это совсем просто. Не ленитесь. Ваш код поддерживать вам же или, что еще хуже, не вам.

Насколько востребованы Node.JS разработчики? Я просто оставлю здесь фотографию, сделанную вчера в офисе компании Dev-Pro (Харьков):

Disclaimer: я не являюсь сотрудником Dev-Pro, но считаю их более чем достойным местом работы

Как вы думаете, сколь велика потребность компании в людях, если они готовы предлагат такие бонусы за рекомендации? Может самое время перековать мечи на орала и сменить свое познание flexbox’ов на спецификацию HATEOAS? Решать вам.

Вместо заключения

Плохой путь легче хорошего в краткосрочной перспективе. Но я видел огромное количество людей, которые пройдя огонь и воду обучения капитулировали перед медными трубами легких денег. И скажу честно — на двух человек, упомянутых в начале статьи приходится еще 6, которые остановились на середине этого пути. Которые достигли суммы в N денег — и решили, что им “достаточно”. Не надо так.

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

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

Stay tuned.

--

--