Не так давно была прекрасная и волшебная (учитывая, что в мире нет волшебства) статья о замечательном хирурге, который за 3 года стал тимлидом. Были и другие ассказы, как люди, никогда не интересующиеся IT, становились разработчиками. Но мы не будем обсуждать их. У меня есть своя история.


Это история будет с плохим, но весьма поучительным финалом. В общем эта история из реальной жизни.


Она расскажет о том, как человек в возрасте 35и лет стал frontend разработчиком, получил хорошую ЗП, и растерял все полимеры.


В целях сохранения анонимности, я буду называть Сергея — Константином, и умолчу название продукта, над которым мы трудились.


ВоITите — читается как войтите.

Эта история произошла со мной в 2013 году, вот уже как 4 года назад. В то время, я уже работал в одном маленьком, но хорошо финансируемом стартапе. Делали мы веб приложение (микросервисы, sinatra, angular 1.2.x, а в последствии еще и Docker) и мобильное приложение (под IOS и Android).


Я был ответственный за web часть. Ну как ответственным, я был единственным, кто мог и любил веб, так как знал его еще с прошлого века, и при этом понимал, что это полноценное приложение (как со тороны фронта, так и бэка) и не стал отдуваться просто jQuery. А из списка технологий выше, вы уже могли понять, что я не ищу легких путей в жизни (т.к. angular в тот момент только начинал набирать обороты, а руби заканчивал). Тем не менее, выбор был осознанным, и я до сих пор считаю, что для этого проекта и бизнеса, это был самый правильный и адекватный вариант.


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


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


У меня был товарищ, который всю жизнь так или иначе общался с компьюхтерами, играл со мной в Lineage 2, да и в целом был хороший парень. Он никогда особо не умел программировать, да и тяги за ним я такой не замечал. Тем не менее, за год до начала событий, научил я его немного в веб, помог с парой проектов на фрилансе, научил в jQuery и SASS (и прочим крутым штукам на тот момент, в том числе и Node.js и Gulp), и сказал: "Что ж, Костя, а теперь греби в светлые дали с этими умениями", и он погреб, как мне казалось.


Вспомнив этот эпизод своей жизни, я принял одно из самых роковых решений, за все время работы в компании, да и вообще в моей карьере. Я решил подтянуть, знания своего товарища, да подать его CTO, мол, смотри какой молодец, что мы искали, давай брать.


Так и поступил, сообщив эту мысль Косте, а затем и CTO, начал готовить первого к работе, а второго, к приходу такого "сеньера".


К моему величайшему удивлению, человек, который мне всегда казался прототипом Макса Фрая до поступления на службу, показал дисциплинированность и умение самообучаться. За месяц он, с моей редкой помощью и подсказками, вкурил основы Angular, Stylus'а и Jade (ныне Pug), и начал подавать надежды.


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


Дабы, мой друг, не сбежал сразу и не умер от реального мира, первый месяц я фактически делал всю работу за него и себя, коммитя от разных лиц. Ему же я дал простую задачу: "Смотри как надо, и делай так-же". Он смотрел. Он делал. Конечно же с оговорками на то, что опыта у него было чуть больше чем у джуна.


По окончанию месяца, я начал скидывать на него 20% — 50% его работы, попутно максимально контролируя его и проводя тщательнейшее ревью каждой его строчки. Это небыли слишком сложные задачки: "Добавь кнопку", "Поправь спеллинг", "Добавь от простую страничку". Это был его первый шаг на пути к ~человеку~ хорошему программисту.


В третьем месяце, он уже начал осиливать работу с REST, начал пилить сервисы (для незнающих, Angular это MVC + Java до мозга костей, а сервисы в нем, это что-то вроде функционального компонента), начал делать более осмысленные вещи, чем формошлепство. Тут прозвенел первый тревожный звоночек, он пихал много логики в один сервис, делая из него God object, который не то, что нельзя тестировать, его нельзя расширять без боли. Получил по рукам. Вроде как перестал.


К концу того-же месяца, я заметил, его страстную любовь к моканью всего, что только можно, причем в самом же сервисе, причем, опять же в God object сервисах. Т.е. у нас появился один огромный сервис Mocks, который содержал в себе константы, "случайные" значения, и прочие данные, которые он не мог получить в том или ином виде от REST. Получил по рукам. Но в этот раз, я был перегружен тасками на бэке, и уже не смог проконтролировать. Забегая вперед, скажу, что сервис этот с моками здравствовал почти полгода, и никуда не собирался уходить.


На четвертый месяц, мне удалось поработать с фронтом, был огромный микросервис с пользовательским видео, и я взял огонь на себя, да за одно решил скорректировать работу Кости. Работали плодотворно. Он косячил, но я уже успевал его вовремя останавливать, и объяснять, как сделать лучше. Он стал брать более сложные задачи, и как мне казалось очень хорошо справлялся, для человека, отработавшего 4 месяца в своей жизни.


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


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


Отработав, к этому моменту, полгода, я дал ему волю творчества. Стояла задача, сделать сервис с профилем пользователя, его настройками, словарями из английских слов для изучения и формы общения с учителем. Мне предстояла долгая и кропотливая работа на бэке, а также чатик на сокетах (2014 год, Socket.io, не то чтобы готов, он еще сырой как тесто).


Константин получил в свои руки небывалую мощь. Я дал ему волю написать все с 0. Вот прямо с нулевого нуля, с "новой папки". Архитектура, роуты, структура проекта, все стало исключительно его. Как вы понимаете, это была его точка максимума, после которой реальным мир вернулся и больно шлепнул меня по темечку. Но я забегаю вперед.


"Сеньер" перенес структуру проекта из прошлого сервиса, поставил только нужные зависимости, и на удивление, сохранил Code-style. Учитывая, что бэк писался параллельно, то ситуация с отсутствием REST роута была вполне обыденной. И Константин вернулся к своей школьной любви, к мокам. В этот раз они достигли своего апогей. Все, что могло лежать в моках, лежало там. Сколько же было файлов с моками? Естественно один. Я решил закрыть на это глаза, т.к. надеялся, что файл рассосется со временем сам, в нормальные сервисы и фабрики, в отдельные мок файлы.


И я с упоением начал пилить бэк.


Вернувшись из этого увлекательного трипа, я увидел ад. Кипели котлы; летали крылатые твари; структура роутов была похожа на список тегов, причем иерархический. Один контроллер мог обрабатывать 3 страницы. Компоненты, директивы, фильтры, что-за дивные слова? Файлы со стилями? Как тебе один на 5000 строк? Bootstrap? О да, такого абьюз бутстраповых классов я еще не видел. Блоки на float'ах обнимали flexbox'ы.


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


Я начал задумываться о суициде.


Оглянув 4 месяца потугов, я понимал, что исправить это можно только огнем. Огнем и fire'ом. Первый готовился для той лапши, что я видел на мониторе, а второй для человека, сидевшего за соседним столом. Константин резко стал Костей, если бы мне позволяли правила русского языка, я бы даже сказал Кстй.


Зачем-то, Косте был дан шанс все исправить. Он попытался. Становилось лишь хуже. Таски в джире только росли, половина из которых были с тегом Bug. Поняв, что все это тщетно, он ушел в себя, затем в запой, а затем притворился психом и начал нести какой-то бред.


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


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


Все задачи Кости свалились на меня и еще одного разработчика. Что же касается проекта, чувствуя моральную вину, я закупился кофе, и молча, не комментируя своё решение, начал переделывать работу Кости в нерабочее время. Жить с его наследием, было чисто физически невозможно. Как итог, я получил x3 к работе и x1 к ЗП на следующие 6 месяцев. Моя душа чиста, я переделал все. Бизнес же не понес никаких за это издержек, разве что на успокоительные, чтобы забыть бывшего работника. А сервис радует и привлекает новых пользователей ежедневно.


Мои история кончилась, чуть позже в 2016 году, когда я переехал во Франкфурт.


Стоит ли писать итог для этой истории? Думаю, нет. Каждый сам сделает для себя вывод, но меня эта история научила нескольким вещам.


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


Второе, вы можете научить человека программировать, можете привить ему Code-style и обложить линтерами, но его знания будут пустыми. Это будет просто имитация знаний и мимикрия под хорошего разработчика. Как только вы дадите задачу, выходящую за рамки понимания этого человека, он не станет пытаться получить новые, необходимые знания, а просто лопнет. Как шарик. "Пуф". Вы лишь позанимаетесь самообманом.


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


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

Комментарии (2)


  1. lair
    22.10.2017 12:07
    +2

    Второе, вы можете научить человека программировать, можете привить ему Code-style и обложить линтерами, но его знания будут пустыми.

    Что-то в этой фразе не так. Если вы научили человека программировать, то его знания не пустые. Если его знания пустые — то вы не научили его программировать.


    А если все-таки фраза верна, то откуда же берутся люди, которые умеют программировать?


  1. qw1
    22.10.2017 12:46

    Да, это печально, когда коллеги пишут низкокачественный код: глобальные переменные, утечки памяти, классы на 100500 строк кода (не метафора, бывало и больше)

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