24 July 2015

Путь разработчика (Часть 0х01)

JavaScriptHTMLUnity3D
Recovery mode

0х01. Работа не мечта


// Code is Poetry
Джон Касти как-то сказал: «Физика — это частный случай биологии», я считаю — программирование частным случаем поэзии. Здесь так же важно соблюдать структуру, как соблюдается рифма, знать своего пользователя как знать своего читателя, быть одновременно переводчиком и историком, чтобы кто-то, придя из другой сферы смог прочесть написанное тобой. Но сам программист — сочетание характеров писателя, изобретателя и испытателя. Код соединяет несоединяемое: творчество тысяч людей сливаются в один проект, словно десятки художников, со свойственными только им стилями, красками и предпочтениями, берутся за рисование одного полотна. Одно ясно: унификация не удел программиста.

Реалии сегодняшнего дня: проучиться пять лет на одних языках, чтобы в конце обучения выбрать для профессии совершенно другие. Этим языком для меня стал JavaScript и окружение HTML5. Это произошло когда я начал работу в одной крупной конторе над большим и гнилым проектом. Но обо всем этом по порядку.
У меня была задача в получении диплома, той самой книжечки, которую дают, когда ты заканчиваешь универ. Чтобы это сделать, надо было пройти три последних квеста:
* Закрыть сессию
* Пройти госэкзамен
* Защитить дипломный проект

Так начался снежный 2013 год. Закрыть сессию мешал предмет «Параллельное программирование», но третья пересдача смогла его закрыть. Осадок остался достаточный чтобы возненавидеть MPI, OpenMP и поскорее забыть CPP.

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

Каждый выпускник технического вуза после учёбы хочет попасть на работу, где будет современный стек технологий. Вот только это могут позволить две категории контор:
1. Стартапы, которые очень вряд ли возьмут только ощетинившегося студента.
2. Большие конторы, которым пора уходить от старой технологии в пользу приоритетной новой.

Первая официальная работа удивила меня своим ужасным HTML 4.01 — сайтом, прямиком из начала нулевых, с его инлайновыми скриптами, отсутствием вменяемой архитектуры, единого стиля написания и ответов в запросе. Неуклюжий JS код написанный паттернами CPP'шника или Java'иста.

Каждый будний день я ходил на работу в почти самый центр гордо вылепленного Питера; проходил мимо тесно-сжатых друг к другу низких домов с высокими окнами, под которыми красовались чистые новенькие дорогие иномарки стоящие на полуразрушенном асфальте.
Я схватывал на лету нетипичные для меня кадры: как бодрая старушка с пирсингом рассекает дорогу на самокате, как проезжает мимо на дешевом раритетном велосипеде миловидная фиолетоволосая девушка с большими и дорогими наушниками, как слушает Black Metal пожилой водитель троллейбуса… Невероятные в своём облике моменты превращали постепенно меня самого в нереальную копию себя.

Мой типичный день в конторе стал описываться алгоритмом:
1. Взять major задачу в JIRA
2. Несколько раз уточнить её
3. Найти и внести коррективы в огромном солюшене
4. Протестировать во всех браузерах
5. Прибить баги грязными хаками
6. Скомпилировать
6. Перенести обновленные DLL на продакшн
7. Дождаться обновления кэша
8. Отправить тикет на тест
8. ???
9. GOTO 1

И так должно продолжатся восемь часов в день, сорок часов в неделю, одиннадцать месяцев в году.

Поддержка проекта возможна только в стабильном состоянии. Трудно заниматься полезными вещами, когда нужно подвинуть кнопку, в десятый раз подкрутить валидацию, проследить за временем в JIRA, пообедать и провести митинг. На работу не остаётся времени.
Настоящую работу делает Senior, то есть тот, кто всё ещё помнит зачем в коде «этот чертов Magic Number» и Middle, который умеет успешно обновится до следующей версии .NET, поломав менее 24% написанного говнокода. А я Junior, единственная мысль которого — переписать всё сначала.
/* Удалить <,> нельзя <,> допиливать! */
Я нутром чувствовал что контора рушится и принял верное решение — пора валить (Внезапный спойлер: спустя полгода контора с эпической новостью рухнет на всю страну).

Так начался мой переходный этап в поисках лучшего места: полуразрушенный офис в центре города сменился удаленным аутсорсом, который закончился переход в БЦ класса B+ в перде города в неизвестную мне геймдев контору. Поработав совсем немного времени на аутсорсе, мне один чувак сказал: «Из геймдева будет очень сложной уйти». Сейчас я могу сказать, он был прав; геймдев — это путь в сторону, и чтобы передумать, придется идти обратно, сократить дорогу не получится. Я поменял Lean на Scrum, ASP.NET на SmartTV и ограничил себя подписью в контракте. Теперь каждый будний день я выезжал на другой конец города, сопровождаемый массой тленно читающих какую-нибудь книгу или бездумно рубящихся в популярную мобильную игру обывателей.

Маленькая студия это большая проблема. Когда проектов становится слишком много, графики летят к черту. Иногда почти нет работы и сотрудники вынуждены брать неоплачиваемый отпуск. Все верхние ребята друг друга «нагибают», будь-то заказчик или сотрудник звеном повыше тебя. Гибкий график — средство скрыть тот факт, что часто придется задерживаться из-за постоянных срывов дедлайна. Единственная вещь, способная удержать человека в геймдеве — стремление написать игру. Лучше — свою собственную.
/* В области высоких технологий тот, кто владеет нижним уровнем рынка
съедает того, кто владеет верхним @Пол_Грэм */
Игровая индустрия — это особый вид лотереи. Если задержишься, можешь потерять больше чем приобрел. Но обилие молодых ребзей, которые удачно или нет совмещают учёбу и работу, доставляют радости больше, чем пятничное поглощение пиццы и алкоголя.

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

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

Честно говоря, сам факт работы в игровой индустрии довольно захватывающий, и подумай я об этом ещё три года назад, я бы не поверил. Но суть не в этом, главное — выход первой игры — это дань тому маленькому мальчику, который конструировал собственные миры сидя в трамвае, автобусе, авто непрерывно смотря в окно, а приходя домой, переплетал фантазии и реальность уходя в новый, магический мир грёз. И пусть, выпущенная игра на самом деле полный ацтой, но я верю, что именно благодаря играм мы все учимся, обретаем опыт и движемся вперёд, подготавливая себя к предстоящей за окном жизни. Я надеюсь, мой скептицизм к современным играм улетучится, а на место сегодняшних казуальных развлечений придут игры, в которых как и прежде, царит дух настоящих побед и неиллюзорных поражений.
/* Вот ты наговнокодишь и тебе приятно работать с говном? @Друг */
В какой-то момент начало было положено. Когда сообщают что компания планирует продаваться, становится не по себе. Особенно, когда полугодом ранее ты, общаясь с Senior HR смутно понимал это, и нутром чувствовал недоговорки, на прямой вопрос к которым следовал ответ: «Тебя это не касается». Именно такими тупыми решениями маленькие конторы оставляют людей. По мне, отношение между людьми гораздо важнее чем приманка гринкартой и переездом в новый офис в центре. Даже если станет лучше, ты будешь помнить, как тебя могу поиметь.

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

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

Попасть на работу в мировую контору чрезвычайно сложно. Обычно, приятные офисы таких контор находятся рядом с хреном города; обязательно, совсем рядом будет фитнес. Заходя внутрь, тебя ожидают молодые охранники чтобы дать бейдж. Ты заходишь и ждёшь. Ждёшь достаточно, чтобы появилось желание вернуться назад. Возможно, это часть интервью, но дальше всегда будет что-то невероятно тупое. В основном тупыми будут вопросы, задачи и само интервью в целом. Даже сейчас, мне кажется что такие конторы ищут чересчур непонятных ребят. Мне повезло, они искали уверенного Linux пользователя знакомого с Bash и Python, в совершенстве владеющим AngularJS, умеющий быстро разобраться в неизвестной NoSQL базе данных и написать REST на NodeJS. Всё это за 60 минут. Лавровым листом этого Full Stack супа были чисто математические задачи с извращенной логикой. Короче, я не прошел собеседование в окружении труъ программеров и понял, что никакой я не математик, ни программист, ни бэкэндщик, ни фронтэндщик, ни знающий английский, а некий сторонний человек, обычный разработчик, чудом остановившийся в окружении огромных плазменных экранов, окруженный от мира гиками и нердами. Чувство антисоциопатии и сжатых сроков нахлынуло на меня.
/* Приходи пораньше, отсыпайся пока никто не видит и уходи пораньше @Лень */
Мне стукнуло 23. Я проснулся взрослым человеком, приходит осознание того что все запланированное не сможет стать реализованным. Единственный верный путь в такой ситуации — убрать все лишнее и оставить лишь самое необходимое; то чем еще пользуешься и чем планируешь пользоваться дальше. Я начал с каталога игр и удалил с десяток тайлов, которые решительно хотел пройти прежде. Затем в корзину пошли программы которые не успели выделить меня — это были музыкальные секвенсоры и редакторы, на обучение которых у меня так и не нашлось времени. И как никогда я понимал, что жизнь следует схватить за гриву и бежать от того, что меня держит, найти наконец нечто, что меня ждёт. У меня не было кредитов, ипотек и постоянной девушки. Меня ничего не держало. Вернее держало. Я врос в этот город, меня держали проекты на работе и девушки, на которых иногда оставалось время.

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

Проект который я делал для SmartTV закончился, меня переключили на iOS. Опять C#, Unity3D (который я пытался изучать, будучи на 3-ем курсе) и совершенно новый для меня облачный бэкэнд. Прошло менее месяца и я остался в проекте один на один, заканчивать приложение полуторагодовалой давность с отсутствием документации, как в старые-добрые времена. В xCode у меня не было никакого опыта, да и тестового устройства к тому времени не оказалось. Продолжение цикла, первый индекс которого был когда я начал делать игру для SmartTV имея лишь эмулятор.
/* Какой в этом толк, когда твой программист плачет? @Nonename */
Когда тестовое устройство появилось, я прифигел, сколько всего надо сделать. Так я понял, что хороший специалист всегда имеет при себе новые девайсы и последние версии ОСей. И дома имеет тот же набор программ что и на работе.
/* Когда я начинал это писать, только Бог и я понимали, что я делаю. Сейчас остался только Бог */
Хочу свободы, хочу жить в собственной квартире, хочу на байке добираться на работу за полчаса. Но у меня нет желания горбатится десять лет ради этого. Я посылаю своё CV в разные конторы, и благодаря другу, который работает в стартапе, решаюсь идти к ним. Всё что у меня – только я сам и это мгновение что отделяет меня от моего будущего. Хотя меня очень сильно влекло поработать в большой конторе, к тому же, снова в центре, я несмотря на подсказки и уговоры коллег и друзей, оставляю всё и ухожу в стартап.

Итогом стала кардинальная смена курса: Питер сменился Москвой; разработка игр на мобильных платформах на C# уступила место бэкэнду на NodeJS; типичный офисный обыватель трансформировался в стартапера.

Продолжение следует…
Tags:разработкапрограммирование
Hubs: JavaScript HTML Unity3D
-6
6.6k 55
Comments 10