Главная » Хабрахабр » [лонгрид] 20 лет программистской карьеры в большом маленьком городе

[лонгрид] 20 лет программистской карьеры в большом маленьком городе

We do what we must because we can — GLaDOS

Ижевск, наши дни

Первого февраля исполняется ровно два десятилетия, как я начал официально подвизаться в должности инженера-программиста:

Фото первого разворота трудовой книжки с датой 1 февраля 1999 года

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

И всё ещё не устал. Конечно, мерило «успешности» у каждого своё, но моим служит тот факт, что последние 15 лет я работаю на сеньорских должностях на проектах, в основном завязанных на крупных корпоративных или зарубежных заказчиках, и почти каждая новая работа находит меня сама.

Читателю без технического бэкграунда может быть сложно, так как в нём полно программистского жаргона (часть терминов я постарался объяснить, но не все). Хочу предупредить, что мой рассказ — это типичный лонгрид в формате интервью от первого лица, местами нудный, и почти без картинок, потому что я, в основном, бэкэндер. А ещё порядочно древних мемов, ностальгических подробностей, и локальной культурологии.

Но вы ведь любите автобиографии с аутистическими шутками, не правда ли?

Ижевск, середина восьмидесятых

Началось всё давным-давно. Однажды матушка, работавшая программистом в обычном советском НИИ, занимавшемся реверсным инжинирингом образцов западной вычислительной техники, взяла меня на работу — показать, чего как, и дать поиграть. Недавно к ним пришли контрабандные «персоналки» — PC/AT, на которых запускались всякие диггеры и тетрисы.

Ещё матушка периодически моталась в командировки с пакетами «блинов» — сменных накопителей на магнитных дисках весом этак килограммов по 15, боявшихся поездок в троллейбусах, — так что к экскурсии я был морально готов. До появления «персоналок» НИИ работал на советских ЕС (клон IBM S/360, занимает комнату) и СМ (клоны VAX, PDP-11 и др., обычно шкаф размером с пианино), так что дома у нас валялось некоторое количество бобин использованной перфоленты и распечаток с ассемблерными листингами. Ожидал увидеть нечто, похожее на декорации тогдашних фантастических фильмов.

Но мигающие лампочками и гудящие вентиляторами шкафы, в которых что-то крутится, впечатляли не так сильно, как «Диггер», пусть даже на монохромном экране. И увидел. Как и софт для разводки печатных плат, рисовавший их на плоттере (смотреть, как чернильный маркер летает по листу формата А1 — это казалось просто каким-то волшебством), и бесконечные полотна знакомых уже ассемблерных листингов программ для станков с ЧПУ, над которыми тогда работала матушка.

Мне было семь лет, и я не помню, мечтал ли когда-то быть космонавтом, пожарным, или кем там обычно хотят быть дети, до того, — но как только я решил, что стану программистом (причём, хорошим, потому что какой смысл становиться плохим?), меня уже ничто другое не интересовало. Надо ли говорить, что решение стать программистом оформилось в голове второклашки моментально, и закрепилось там накрепко?

Первые три класса общеобразовательной школы я закончил с отличными оценками, и смог попасть в лицей с математическим уклоном. А чтобы стать хорошим программистом, надо хорошо учиться. Каждая — локальный брэнд и династический рассадник технической, гуманитарной, или управленческой, в зависимости от профиля, элиты. Вообще, на тот момент в городе было несколько школ с хорошим качеством обучения — 29, 30, 41 (лицеи), 56 (гимназия). Как, впрочем, и моя матушка (и она в итоге тоже стала руководителем, но об этом позже). Особенно «тридцатка» — практически все местные заводские руководители (а Ижевск традиционно был городом-заводом) закончили именно её, причём, как правило, маткласс.

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

Из 30 человек отличников, пришедших со мной в пятый класс, к финалу на математическом направлении осталось десять, остальные разбрелись по иным, или вовсе отсеялись. Культура была высокой, а конкуренция — очень жестокой. На самом деле, матклассов было два, но только ученики из первого, занимавшие верхнюю половину рейтинга успеваемости, могли участвовать в олимпиадной команде, традиционно занимавшей места на республике и России (а иногда и в международных соревнованиях).

По правде говоря, олимпиадным мышлением я не обладаю — хорошо вкапываюсь в суть проблем, но мыслю слишком медленно и всегда делаю несколько пробных подходов, так что выше городского этапа ни разу не продвигался. Я болтался где-то в районе шестого места, периодически забираясь выше, поэтому в периоды подготовки к олимпиадам частенько оказывался с остальными продвинутыми ребятами на задних партах, где мы вместо самостоятельных работ решали задачи+, задачи° и даже задачи**. Ну, хотя бы поучаствовал, а результатом можно считать тренировку мозгов на нестандартные (но воспроизводимые, в отличие от решений типичных олимпиадников, которые обычно применимы строго ad hoc) решения.

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

Никак не учился — школьного багажа, включая дополнительные курсы, которые вели те же вузовские преподаватели, было достаточно, чтобы получать «автоматы» почти по всем предметам. По прошествии многих лет, оценивая свои возможности, я иногда начинаю сожалеть, что не выбрал вместо местного технического университета какой-нибудь столичный, — мои одноклассники успешно закончили и МФТИ, и МГУ (и некоторые в итоге работают в Гугле), — но это сожаление быстро проходит, когда я вспоминаю, как я учился в общеобразовательные семестры до «экватора». Это было, как вы понимаете, несложно. Впрочем, даже вступительные я не сдавал — студентом стал ещё в апреле, пройдя подготовительные курсы, и набрав высший балл на пробных экзаменах.

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

Прямо тут же, на кафедре, сисадмином. Только самообразование боем могло меня спасти, и на втором курсе я нашёл себе работу. Минимальная зарплата в 1999 году была 83 рубля 49 копеек (зачем платить студенту больше?), а бутылка «Букета Чувашии» в «деканатском» магазине напротив учебного корпуса стоила 4. Работа так себе, но зато она гарантировала неограниченный доступ к факультетским серверам и интернету, а также позволяла торчать в лабе хоть сутками напролёт — и тратить время не только на трёп в IRC с девочками из соседнего универа, но и кодить что-нибудь для всяческих случайных заказчиков. 60, так что мы с другими такими же студентами-админами иногда скидывались на пару ящиков дешёвого пива для физрука, чтобы не тратить время на бессмысленные круги по стадиону.

Вместо физры время тратилось на собственные поделки на Perl и tcl (запрограммить ирцешного бота-болталку для развлечения девочек из соседнего вуза — это очень интересно), а также на разработку внутренней системы для проведения турниров по правилам ACM.

Тем более что зачёт полагался и так, и этак. В ижевском «механе» тоже нашлась своя олимпиадная команда, тоже на тот момент занимавшая далеко не последние места в международных соревнованиях, но мне показалось куда интереснее обеспечивать инфраструктуру для турниров, чем ломать на них голову. Кроме совсем уж низкоуровневых и скриптовых языков, я не чурался и утилит для бухгалтерии на связке 1С и Visual Basic, и для деканата на FoxPro и Delphi, а для развлечения пописывал аплеты на Java для своего «хомяка» на факультетском сервере.

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

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

Лето 2001 года, Ижевск

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

Микроскопическая веб-студия, но как тогда полагалось любой уважающей себя веб-студии — с каталогом региональных ресурсов, вебчат-сервером, и уймой проектов разного уровня маргинальности. К счастью, подвернулась конторка с говорящим названием «Виртуальный Ижевск». А если я скажу, что у него был закрытый раздел для спонсоров, с более интересными фоточками «моделей»? Как вам, к примеру, онлайновый конкурс красоты «Мисс БикиНю-2002»?

Зато, у директора конторки была идея фикс перевести все разработки студии с тормозного Perl на свежевышедший PHP версии 4, потому что где-то он прочитал, что за ним будущее (а ещё он банально быстрее). Тот ещё гадюшник, короче. Продержался я там всего полгода, но хотя бы выучился сносно писать на PHP — причём, из-за специфики проектов приходилось заботиться о безопасности. В общем-то, директор не ошибся. Ломать их с целью накрутки голосов пытались серьёзно — спонсорские призы в конкурсах были достаточно неплохие, типа поездок на компанию друзей в Турцию, и девочки из того самого соседнего вуза собирали целые команды доброжелателей, готовых вывести их в топы.

В каком ещё городе есть собственный рок-фестиваль на полторы тысячи айтишников? Также интересной была инициатива того же самого директора собрать локальное сообщество веб-разработчиков, — форум, в котором бы тусовались все ижевские разработчики и провайдеры, — и, представьте себе, оно в каком-то смысле живо до сих пор, пусть даже в пятой реинкарнации. Началось же всё там, на самописной доске сообщений, где разработчики и руководители десятка местных контор поначалу в закрытом режиме культурно делились проектами и опытом, а потом начали разводить эпические срачи, быстро вышедшие и в офлайн. А в Ижевске есть РокИжайти. Последние отголоски тех легендарных словесных баталий и бизнес-вендетт начала 2000-х тлеют в местном сообществе до сих пор.

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

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

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

Честно говоря, стена в директорском кабинете, увешанная дипломами от пола до потолка, внушала. Отдел мультимедиа выпускал презентационные диски для местных заводов (например, Ижмаша и СЭГЗ), а отдел интернет-технологий и был той самой веб-студией, регулярно бравшей призы на отраслевых выставках. В основном, клиентам, приходившим на предмет договориться о разработке очередного представительского сайта.

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

Матушка просто притащила меня за шкирку, бросила за консоль конторского сервера, и велела брать всё интернетовское в свои руки. Срочно потребовался «ну хоть кто-нибудь» на замену, а я очень удачно оказался свободен. Мультимедийный отдел точно так же оказался в руках сына маминой подруги, и мы как начали фигачить!

Да ещё и как минимум, не хуже. На самом деле, трудно представить более стрессовую ситуацию: прийти на место признанных профессионалов, подхватить на лету повисшие в воздухе чужие и совершенно незнакомые разработки, и делать вид, что ты способен вот это всё потянуть. И выходные тоже торчать на работе. Я плохо помню последующие несколько месяцев — с утра надо было посещать пары (слава богу, не все, часть предметов мне таки перезачли) в своём универе, потом тащиться через весь город в соседний, и там торчать до глубокой ночи. Ещё и тусоваться хотелось, а то, как же быть студентом, да обходиться без пьянок…

Не только потому что новая метла должна мести по-новому, но хотя бы из гигиенических соображений: за десять лет работы старой команды в проектах, которые велись без какого-либо контроля версий, накопилось много мусора, и на свежий взгляд это было очень заметно. Потребовалось около полугода, чтобы прочитать все RFC по технологиям, все руководства к используемым языкам и платформам, разобрать все нагромождения унаследованного от старой команды кода (особенно, университетские сайты, написанные на жуткой смеси ранних версий Java и PHP с самописными расширениями), и параллельно вести разработку собственного программного базиса — на PHP only.

Каждая контора писала что-то самобытное, с собственным зоопарком. Также стоит учесть, что на рынке в тот момент ещё не существовало сколько-нибудь развитых CMS, да и вообще, «рынком» тогдашнее положение дел в веб-разработке назвать было довольно сложно. Вдобавок, меня тогда пропёрло по теме UX, и, проштудировав все имевшиеся на тот момент HIG, я почему-то проникся майкрософтовским Wizards 97, идеологию которого и постарался максимально воплотить в интерфейсе, реализовав пошаговые мастера на все случаи жизни. Поэтому я обложился всеми доступными примерами опенсорсных «-нюков», и за последующее лето, в аккурат перед пятым курсом, собрал из запчастей своих форумных и конкурсных «движков» простенькую CMS, позволявшую разрулить сиюминутные задачи.

Поздняя версия CMS, мастер создания страницы сайта

Я не только сумел успешно завершить аварийно повиснувшие проекты, — уже на собственном движке, — но и ускорил разработку в несколько раз. Как ни странно, но шалость удалась. Более того, из-за необходимости тщательно задокументировать имевшиеся у нас проекты, у меня само собой возникло подробнейшее техническое задание на типовой представительский сайт для какого-нибудь типового завода — а также методичка для авторского сопровождения сайтов муниципальных образований, так как один из проектов был именно таким, а ФЗ с шаблоном тогда ещё не было.

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

Более того!

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

В мультимедиа-центре, пардон, «Центре мультимедиа и Интернет-технологий Удмуртского госуниверситета» я проработал почти пять лет. Но не будем отвлекаться на философию. Это был первый в истории кафедры диплом на тему чего-то околоинтернетовского, поэтому на вкладыше тема значится как «Система управления континентом [sic!] сайта». Свой диплом для Ижевского гостехуниверситета я сделал целиком и полностью на примере внедрения экспериментальной версии своей CMS для муниципального сайта города Глазова (в будущем он тоже возьмёт награду премии Рунета в своей категории; проект жив до сих пор — в четвёртой версии). Ну не знал ещё в 2003 году никто слова «контент», так что я не стал исправлять тот артефакт эпохи.

Многие ребята, которые начинали карьеру в моём отделе практикантами или дипломниками, теперь руководят собственными конторами и проектами, и являются вполне уважаемыми в городе специалистами. Мы быстро заполнили недостающее штатное расписание такими же студентами (ну может, не настолько целеустремлёнными и упёртыми, как я) — и превратились в этакую кузницу кадров. Я же, поставив разработку на поток, постепенно совершенствовал и сам процесс, и свою CMS (в частности, придумал собственный компилятор языка разметки для шаблонов, позволявший менять дизайн сайта на лету, не только стили, но и HTML, и скриптовую обвязку).

Долгие годы после того, как я ушёл, начатые мною проекты продолжали жить и развиваться. Бизнес-модель, выбранная в конторе, не предполагала отчуждения продукта, — мы скорее предлагали подписку на авторское сопровождение, но при необходимости заказчики самостоятельно вели свои сайты, платя нам только за хостинги и обновления CMS, — подробные руководства пользователя и пошаговые мастера позволяли им работать автономно, не ухудшая общее качество, и многие из них оставались с нами до десятка лет. Без единого разрыва в обслуживании. Последний из собранных моими руками был заменён буквально осенью прошлого года, проработав 13 лет на той же кодовой базе.

Сам не заметил, как стал сеньором. Мне пришлось не один раз поучаствовать в переговорах (особенно тяжело было разговаривать с муниципалами — и, господи, как сильно я удивился, когда в появившемся через время ФЗ нашёл прямые цитаты из своей методички; попала в руки законодателей она скорее всего через одного из наших муниципальных клиентов), разруливать конфликты интересов между членами команды, обучать пользователей, и даже пару раз браться за дизайн.

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

Однажды я забыл сбросить серверный кеш CSS после восстановления сайта из бэкапа, и кто-то из коллег по цеху мгновенно закинул скриншот с напрочь разъехавшейся вёрсткой на линч к Лебедеву. For lulz. Итог: один известный мем.

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

Была такая программа повышения квалификации сельских учителей информатики — когда со всех 25 районов республики их согнали по разным ижевским вузам, и прочитали им курс про основы сайтостроения. Для развлечения я однажды провёл совершенно бесчеловечный эксперимент. Было весело, узнал несколько совершенно неожиданных вещей о паттернах поведения и восприятии пользователей (майкрософтовцы были ой как правы, когда переделали UI Офиса на контекстно-зависимый — он наиболее эффективен; также из интерфейсов совершенно точно НЕЛЬЗЯ убирать кнопку “Save” с дискетой). Естественно, я преподавал на примере своего движка, и не смог не воспользоваться такой прекрасной возможностью, чтобы провести A/B тестирование нескольких версий интерфейса на сотнях несчастных.

Но, в конце концов, мне всё же стало скучно.

Ну ладно, мультисайты (это когда десяток-полтора взаимосвязанных сайтов на разных доменах, но на одной копии движка, и со сквозной авторизацией). Ну сколько можно сайтики клепать? Ну ладно, интранеты, видеоблоги, сайты СМИ (всего лишь специализированные плагины для самобытной CMS, которые по моим спецификациям писали студенты-дипломники). Ну ладно, документ-порталы (каталоги документов, обвешанные метаданными что твоя рождественская ёлка, с поиском по всем параметрам в реальном времени).

К сожалению, я не обладаю достаточными качествами, чтобы быть директором-коммерсом. Было очевидно, что настало время поступить, например, как предыдущая команда, и выйти из здания. На вебе свет клином не сошёлся, да и прогресс на месте не стоит. Техническим — могу, но вот зачем? Что было эксклюзивом в 2002 году, в 2006 уже мэйнстрим, и вообще, Битрикс свёл сайтостроение в ремесло.

Почему бы и да? А не двинуть ли в смежную область.

Только в какую?

Не везде меня, страшного тролля с Ижайти, встречали с распростёртыми (троллей вообще мало кто любит), но выбор был достаточно богат. Я ходил побеседовать в несколько разных контор. NET пойти, и железяки программировать (правда, это на заводе, так что скорее нет, чем да). Можно было и в десктопный . Ещё и версии 1. Но особенно мне понравилась идея разработки больших систем для кровавого энтерпрайза — только вот в этом мире рулила Java, а знание Java у меня было только на уровне тех самых аплетов с универского «хомяка», да лапшеобразного легаси, похороненного на прошлой работе. 1.

Поэтому я принял предложение из местного телекоммуникационного провайдера Ижсвязьинвест (он был «мультисервисный», то есть, предоставлял интернет, телефонию, и телевидение; после кризиса 2008 года умер в агонии и был куплен Билайном, но на тот момент процветал).

Она довольно-таки отличается от типичной для России благодаря компании «Марк» (как бы она ни называлась за свою более чем двадцатилетнюю историю) — ещё с середины девяностых Ижевск очень сильно опережал и скоростями, и покрытием, и меньшей ценой не только все соседние регионы, но и Москву. Тут необходима небольшая ремарка про историю местных интернетов. Даже местная фидошная туса и то была в основном over марковский Ethernet. Причём эпоха DSL-модемов сменилась эпохой меди, а потом и оптики до дома очень быстро, и быстрый интернет в Ижевске стал массовым, а сам этот провайдер явился отличнейшей кузницей технических и управленческих кадров для местной отрасли.

Притащили они с собой и биллинг — монструозную систему, работавшую внутри кластерного Oracle, причём, классического, поверх фирменного сановского железа и под солярой. Выходцы из «Марка» основали не одну конкурирующую контору, включая и Ижсвязьинвест. На Java (версии 1. Почти вся бизнес-логика этого хтонического чудища была зашита в чудо-хранимки, даже письма об оплате клиентам рассылались из асинхронного джоба. На пользовательский же веб-интерфейс смотреть без слёз было нельзя (и не только потому что он был весь шрифтом 7. 4) был написан только небольшой кусочек админки, при том, что почти целиком он генерировался через System.out.println(), и выглядел… хреново он выглядел. 5pt).

А была она HTA-приложением, неотличимым внешне от нативного, и даже не требующем наличия мыши, даром что писана на чистом JS/DHTML. Особенно, по сравнению с тем, во что к тому времени превратилась админка моей CMS. Интеншен был прост — натянуть на хтоническое чудище биллинга красивый, быстрый, удобный, и нативный интерфейс, и продавать его другим провайдерам. Начальник отдела так впечатлился, что немедленно взял меня как специалиста по UX. По набору возможностей и в самом деле он, будучи разрабатываемым с середины девяностых, рвал все имеющиеся аналоги как тузик, но у конкурентов был вменяемый UI, а у TELSI его не было.

To put lipstick on a pig… Однако, нельзя так просто прикрутить интерфейс к логике, если у неё нет эндпоинтов для чего-либо, хотя бы отдалённо похожего на AJAX.

Но в 2006 году Java 1. Слой эндпоинтов надо было написать, интегрировав в существующий код. По ходу изучил технологический стек J2EE, но ввиду специфики ограничился пока что сервлетами и всей сопутствующей обвязкой, а также JDBC (надо же хранимки дёргать), Velocity (как наиболее похожий на PHP шаблонизатор), и, собственно, core Java. 4 была уже совсем реликтом, так что перво-наперво я переписал имевшийся зародыш админки на актуальную версию с попутным причёсыванием и приведением кода в порядок (ага, опять пришлось копаться в унаследованной субстанции).

Постепенно пришло понимание, что вся логика, относящаяся каким-либо боком к показу пользователю, и уж тем более к интерактивному с ним взаимодействию, должна быть вытащена из хранимок, и реализована в слое сервисов на Java, потому как меняющиеся со временем требования к фичам делают конструкцию из сырых вызовов хранимок через JDBC трудноподдерживаемой (менять всё надо в двух местах, а с версионностью кода у баз всё до сих пор плохо, что уж говорить про восьмой Оракл) и хрупкой.

— Окей, — сказал начальник отдела.

Год! Чтобы вытащить всё это дело на свет божий, мне потребовался год. Я за раз могу запомнить около мегабайта исходников, а тут код только хранимок тянул на пять. Объём кода был просто чудовищен. Половина неиспользуемых, другая половина рекурсивно вызывают друг друга, и в целом сплетаются в такой клубок лапши, что распутать его без помощи начальника было решительно невозможно.

Итогом стал микроинсульт (это в 26-то лет, my ass!) и полгода на таблетках. Работать приходилось шесть дней в неделю, по одиннадцать часов в день — остальные программисты сидели над поддержкой существовавшего монстра и не могли мне помочь. Работа не сбежит, а здоровье вот может. Урок усвоил — больше с тех пор не перенапрягаюсь.

Нативно оракл такое не поддерживает, и вообще, с NoSQL в те годы было ещё тухло. Через какое-то время оказалось, что часть данных биллинга удобнее хранить в виде справочников — то есть, не совсем обычных реляционных таблиц, а скорее документов, состоящих из наборов ключ-значение с зачастую заранее неизвестными метаданными на каждую запись.

TELSI, редактор справочника АТСTELSI, конструктор представления справочникаTELSI, редактор записи справочника
Картинки кликабельные

Что же получается, все информационные системы примерно на одно лицо, если смотреть в профиль? Блин, но что-то мне это напоминает… Ах ну да, документ-порталы же. И за несколько месяцев реализовал документно-ориентированное хранилище поверх оракловых таблиц при помощи триггеров, хранимок, создающих вьюхи, и какой-то там матери. Ну и ладно.
Окей, сказал я. Пора было шалтая-болтая вводить в опытную эксплуатацию. Получилось не очень быстро, но вроде заработало с полпинка.

И тут в Ижевск пришёл кризис 2008 года

Хотя, он ко всем пришёл.

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

— Теперь я старик, — сказал я, — и я знаю кунг фу, — сказал я, — и я благодарен вам, что вы мне его показали, но я хочу практиковать своё кунг фу, а не ерундой страдать. — Гуд бай, — сказал я.

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

Ну как студии… Веб-разработки у них были, но в большей степени этот «информационно-издательский центр» позиционировал себя как аутсорсера. Очень быстро я нашёл работу в очередной студии (точнее, они нашли меня — всё же, известность в локальном комьюнити, даже слегка тролльская, штука иногда полезная). Такой вот очередной гибридный бизнес. Ну и ещё как типографию.

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

И только сел я его внимательно почитать, как байкеры скрылись в неизвестном направлении вместе с техническим директором конторы, который таким образом, как выяснилось, заманил меня на замену себе. Например, текущий проект был — что-то страшное для датских байкеров, на Zend, с неким аналогом портлетов (не спрашивайте, что это, я знаю только про аплеты и котлеты) и вообще каким-то крайне странным ТЗ.

Нужен был ведущий разработчик на новый проект — тоже ГИС, только про спутниковое телевидение. Ну как, «на замену». SatBeams.com — жив до сих пор, можете посмотреть, только, пожалуйста, не обрушьте.

Да, опять пришлось вернуться к PHP, но там самый цимес был в проектировании базы. Интересный проект. Вещают они пакетами, в каждом из которых несколько (до сотен) телеканалов, каждый из которых обладает набором характеристик (опять, до сотен, потому что языки). На геостационарной орбите висят, каждый над своей долготой, несколько сотен спутников, на каждом из них несколько (до сотен) антенн — транспондеров, вещающих в нескольких диапазонах.

За такую информацию профессиональные любители спутникового ТВ и платят денежки, причём, немалые. Суть задачи: надо не только нарисовать на карте покрытие для каждого транспондера, но и сгенерировать для них в реальном времени дифф изменений всех характеристик всех каналов, принимаемых на тарелку в каком-то месте, и выплюнуть её в RSS.

Декартово произведение всех возможных параметров переваливает за триллион, а нам надо дифф в реальном времени строить. Казалось бы, звучит просто, но погодите-ка… Сотня помножить на несколько, помножить на сотню, помножить на… упс. Вполне олимпиадная задача, кстати.

В итоге всё это вылилось в несколько десятков таблиц, нормализованных до 5НФ, денормализованных таблиц с историей, и вороха запросов по нескольку страниц каждый. Вот тут мне университетский курс баз данных и пригодился, а также весь предыдущий опыт работы с оными, и весь опыт проектирования систем, который только был. MySQL, то бишь. С хитрыми джойнами, учитывающими поведения оптимизатора выбранной СУБД. На другую заказчик не согласился.

Работает, — если вы её хабраэффектом сейчас не уронили, — до сих пор. Вдвоём со вторым программистом справились где-то за год. И не только за бэкэнд, но и за satbar.js — последний интерфейсный виджет, который мне довелось написать (с тех пор я больше к пользовательским интерфейсам не прикасался). Люблю я этот проект.

satbar — переключалка спутников — сверху карты

Зато заказчик хвалился фоткой рабочего стола ПМа Гуглокарт с ярлыком нашего сайта с подписью “nice polygons” — он тайком сделал её, когда был в гостях в тамошней штаб-квартире. Неожиданным препятствием стало рисование футпринтов транспондеров на Гуглокартах — Гугл вообще класть хотел своё толстое mojo на сторонние интеграции, и планомерно выпиливал из каждого нового релиза API карт 2.х фичу за фичей, в результате чего оное обросло невероятным набором костылей, и потребовало постоянной поддержки со стороны второго программиста после сдачи проекта в эксплуатацию, — а на третью версию API он его мигрировал, периодически уходя в депрессию.

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

От нечего делать обновил CMS интерфейсными наработками, притащенными с предыдущей работы — включая некое подобие Ribbon UI из свежего Офиса (по ходу, сделал это раньше, чем сам Майкрософт, но, конечно, попроще, хотя, волшебный одиночный ALT там тоже работал. Я снова пошёл по накатанной, и собрал несколько сайтов, практически не приходя в сознание. Взялся даже за разработку десктопной базы на . Как-нибудь покажу, это достойно отдельного рассказа). А, не помню, но на чём-то совсем древнем), но этот проект принёс с собой новый ПМ, претендовавший на роль техдира, и нам не удалось договориться по срокам. NET+SQLite для одного государственного заказчика взамен легаси-решения на Firebird (или даже FoxPro? NET мне не удалось. Так что закопаться в десктопный стек .

Он за прошедшие пять лет вырос в руководителя собственной конторы, по удачному стечению обстоятельств занимавшейся кровавейшим энтерпрайзом — SAP, и ещё немножко разработкой на Java EE. И тут мне вдруг написал бывший студент, когда-то делавший у меня в отделе диплом (те самые «документ-порталы»).

Ему как раз требовался эксперт для помощи над новым проектом. Вот так удача.

Я до сих плохо представляю себе мотивы венчурного капиталиста из Татарстана, который пожелал сделать этакий SaaS/PaaS/коробочный аналог MS SharePoint + Exchange + Lync + Dynamics, но только с серверной частью на J2EE, и с «толстым» клиентом на Java Swing. Суть (и вообще, смысл) этого проекта объяснить сложновато. Плюс ко всему, он был ещё и маководом, из-за чего пришлось покупать в контору мак — свинговые компоненты для толстого клиента вели себя под MacOS временами непредсказуемо. Сначала он называл его NewOutlook, а потом и вовсе OfficeSuite. Но жутко интересный. Очень, очень странный проект.

или в Киеве?, причём основной считалась наша команда: именно нам надо было разрабатывать общую архитектуру и серверной части, и клиента, механизм синхронизации данных между ними, а также для примера реализовать модуль управления личными финансами. Всего им занималось не меньше трёх команд — кроме нас, ребята сидели в Казани и где-то в Минске, что ли? Остальные должны были заниматься Unified Communications и всем прочим, что нафантазировал (без конкретного ТЗ) инвестор.

Клиент, как мы помним, «толстый», то есть, может и должен работать вообще без серверной части, и при этом также должен уметь подключаться к серверу по расписанию или пользовательскому запросу, чтобы обновлять «объекты» (какие угодно) и там и сям. Самой сложной задачей казалась реализация синхронизатора — никто из имевшейся команды не знал, как вообще подступиться к ней.

За умными словами «клиентская и серверная архитектура» на самом деле кроется всего лишь несколько хорошо оформленных в виде структурированного документа набросков по дизайну. Я тоже сначала не знал «как», но глаза боятся, а руки делают. Конечно, «какие угодно объекты» — так себе требование, но, к счастью, проектировать хост-плагинные системы, которые умеют описывать свои типы объектов, я умею ещё со времён мультимедиа-центра, хитрые ORMы после ижсвязьинвестовского монстра меня не пугают, а недостающим J-технологиям из состава EE я могу научиться достаточно быстро.

Кривой перевод с английского System Designer, корректнее было бы «инженер-проектировщик». «Архитектор»… Не люблю, когда это слово применяют к должности программиста. Но, на мой взгляд, процесс создания с нуля прототипа будущего продукта, который себе плохо представляет даже заказчик, куда лучше описывает термин «инженер-исследователь».

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

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

Такой вот он, венчурный бизнес. Блин. Слегка ненавижу.

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

Не всегда к лучшему.

На дворе был уже 2011 год. По-прежнему в Ижевске

За это время в городе кардинально сменился ландшафт. Ряды веб-студий сильно поредели, заводы и прочие провайдеры с внутренней разработкой как-то ужались, зато количество продуктовых контор заметно выросло, и ещё крупные аутсорсеры в город зашли. Особенно, ЕПАМ.

Вот уж где истинно кровавый энтерпрайз.

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

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

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

Из-за хороших формальных правил в ЕПАМах могут работать, и успешно работают:
• люди, с которыми я не только не пошёл бы вместе в разведку, но и вообще ни за что на свете даже общаться бы не стал;
• люди без фантазии, люди без чувства прекрасного;
• люди без божьей искры, но зато с чугунной задницей;
• люди без чувства меры и такта;
• люди, которые психологически друг с другом несовместимы;
• люди-чудаки. Ведь люди — это всегда, в некотором смысле, ад.

Сильно! Их там к счастью, не большинство, нормальных больше, но общую картину такие «отличники» (от других) Очень! Портят!

В ЕПАМах же команда на проект выбираются по формальным признакам как раз из общего ресурсного стада. Также, в традиционных конторах, где человек не «ресурс», а «специалист», и нет понятия «пул разработчиков», а есть понятие «отдел», люди нанимаются не в общее стадо, а так, чтобы им можно было работать друг с другом вместе — то есть, единомышленники.

Как я вообще туда попал?

Не обманули. Позвали, пообещав работу над самым кровавым энтерпрайзным проектом за всю историю офиса, и пообещали сразу дать сеньорские лычки. Взяли сеньором с перспективой лида.

Заказчик — банк с круглым зелёным логотипом, команда на полсотни человек (это только в ЕПАМе, в других субподрядчиках ещё такая же толпа), сама система mission critical. И первый же проект, куда я попал, оказался, реально, монстрическим. Платформа — WebSphere AS и MQ, база данных — DB2. Писаться должна на Java EE, но при этом есть сюжетный твист: вендор — IBM. Даже сама JVM в этой связке экзотическая — J9, довольно сильно на тот момент отличавшаяся от сановского референса, и кошмарно глюкавая (но известно об этом мне стало потом, когда я наткнулся на пачку багов).

Мне сказали: теперь ты ключевой разработчик (и член архитектурного комитета), поэтому вот тебе команда (не смотри, что новички, они ребята неплохие) и ТЗ на этот вот модуль (кирпич на 300 страниц).

Я сказал: ага («архитекторов» набралось человек 15, ребята оказались… разные, а кирпич переписывался по ходу пьесы раза три до неузнаваемости).

Шлюзы во внешний мир. И понеслась… За два года пришлось участвовать в разработке нескольких подсистем. Синхронизация статусов обработки платежей для операторов «большой тройки». Внутреннее файловое хранилище. Система развёртывания модулей — всего их было порядка 25 — на вычислительную ферму (в итоге не выжила, но applications.xml остался в составе продукта).

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

Система контроля версий — SVN. После чего случился некий факап со сдачей релиза, и было принято решение откатить транк к более ранней версии. Сделал это один раз, и… пришлось потом до конца быть «хранителем репозитория» (блин!) и супервайзить все последующие мержи, особенно перед релизами. Ну ладно, надо так надо.

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

А ещё — куча конфликтов в команде из-за того самого фактора личной несовместимости, включая меня и ПМа…

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

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

Но всё равно было некомфортно, так как сам климат в офисе с его подковёрными играми и интригами — он сколько ни дистанцируйся, а давит. На какое-то время отлегло.

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

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

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

А мы люди маленькие, тут себе тёпленькое местечко пригрели, и нам норм. Их позиция была такая: ты тут самый крутой, вот ты всё и делай.

В итоге мне пришлось покинуть свой пост, а иначе обеспечить delivery было бы невозможно, даже если бы я писал код за себя и тех парней по 24 часа в сутки, помимо чисто менеджерских задач. Как я уже сказал, по формальным признакам выгнать этих деятелей с проекта было нельзя — все ассесменты они прошли с хорошими результатами. Я бы просто поймал очередную ишемическую атаку (нет уж, одной было достаточно) и прямо на рабочем месте бы помер.

Но для обеспечения возможности этого нам пришлось пустить в ход тяжёлую артиллерию в лице директоров филиалов, и таки показательно уволить самого злостного «отличника». Новый же техлид имел право изменить состав команды — что он сразу же и сделал (свободные нормальные разработчики волшебным образом нашлись в офисе), и в итоге таки ему удалось довести проект до победного. Это было невообразимо тяжко и гадостно.

Урок номер два: никогда больше не соваться в менеджмент. Урок я выучил: мне действительно нечего делать на фабрике.

После такого нервотрёпного нырка в корпоративную трясину, да ещё и с интервалом погружений чуть меньше чем в год, я сбежал из ЕПАМа — с горящими пятками, в никуда, полностью деморализованный, психически выгоревший, и ментально выжатый, как лимон.

Какое такое выгорание? Выгорание, говорите? Точнее, мне хотелось, чтобы этот мир сгорел к чертям свинячьим, и я сгинул под копытами всадников апокалипсиса в числе первых грешников. Мне просто ничего не хотелось. Учился на права, да изредка выбирался на какие-нибудь айтишные сборища (всё же участие в локальном комьюнити даже в звании полузабытой легенды иногда крайне полезно). Пять месяцев я провёл в чём-то среднем между комой и режимом домашнего овоща.

Ижевск, лето 2014 года

Одна из, гммм… пьянок, — что уж греха таить, именно что айтишных пьянок, — проходила в конторе, буквально только что возникшей из ниоткуда. Американский стартап со смешным названием tinypass (сколько шуток шутили гусары, прикрывая пальцем p на логотипе) решил открыть центр разработки в Ижевске. Основатель и совладелец оказался местным — и только что вернулся на родину. Сразу же кинул клич — чуваки, го в американский стартап, я сделал!

А также наиболее опытные ребята из других контор (включая нескольких кандидатов наук). Наиболее адекватные коллеги из ЕПАМа (которым не меньше моего надоела вся фигня) сразу же оказались там. Ну я и сказал, что через две недели, пожалуй, приду работать. Один из моих бывших коллег (с которым мы подружились ещё во времена венчурного капиталиста), прямо на посиделках, проходившей в новом офисе с выходом на крышу, откуда открывался отличный вид на город, предложил и мне присоединиться.

Посмотрел на проект. Пришёл. Взгрустнул было.

Технический лид — близкий друг основателя родом из Нью-Йорка — самый упрямый человек на свете, которого невозможно ни убедить в чём-либо, ни разубедить, ни договориться. Проект оказался сырым, маловменяемым, отвратительно написанным. И ещё второй лид, который одной строчкой кода может обрушить, нафиг, всё (в итоге от него избавились, но далеко не сразу). Но перехитрить можно.

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

Узким местом оставалось воспитание техлидов, но они сидели в НЙ. Проект же мы постепенно, общими усилиями, привели ко вменяемому состоянию. Здесь-то и пиво можно пить прямо в офисе каждый (никаких исключений!) четверг, и отлично проводить время в компании лучших из лучших разработчиков города. Здесь-то их не было. Хэштег #ижевскийгугл.

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

В том числе и английский, наконец, выучить. Будет сложно описать, чем именно я занимался в Piano (после объединения с конкурентами и смены брэнда ижевский офис остался основным офисом разработки), ведь в стартапе приходится заниматься буквально всем.

Поставил процесс Continuous Integration — и сделал возможным появление в команде QA инженеров. Поначалу много писал всякого на Java, затем сделал несколько крайне неудачных экспериментальных фич подряд (отрицательные результаты очень не понравились упрямым нью-йоркцам, но местные коллеги верили в мой опыт — в итоге я оказался прав, и меня не уволили). А если серьёзно, то постановка процессов DevOps, вероятно, это самое полезное из того, что я сделал там за все чуть более чем два с половиной года. В здоровом коллективе должны быть девушки-тестировщицы!

Вот он был суперский чувак и классный профессионал — жалко, что быстро сбежал (от остальных двух, потому что они его там чуть не съели), и в результате гигантскую работу по локализации системы (никогда не пытайтесь локализовать систему, в которой изначально не предполагалось локализации! Затем снова много писал на Java, уже в составе команды с третьим нью-йоркским лидом. Потом уже медленно и печально доделывали в фоновом режиме. Лучше перепишите её с нуля) мы, потратив год, так до окончательной победы и не довели — с первого раза.

Прикольное ощущение, не каждая американская горка даст такое почувствовать. Вы когда-нибудь пробовали мержить ветку, которая в проекте на миллионы строк кода затрагивает несколько сотен тысяч? Нам выдали локализованный тортик. По результатам мержа… ничего не упало и не испортилось.

Автор (в оранжевом худи) и его коллеги с тортиком. На тортике написано «всё отлично» на 3 языках

Можно было вдоволь пописать кода и на питоне под гугловый BigQuery, и всякую там муру на Node.js (старому джависту очень полезно менять иногда коня, а иногда лыжи). После этого опять был какой-то совсем уж безумный DevOps и плохо формализованные, но классные исследовательские задачи. Ну а вишенкой на торте стала задача, за которую я трижды отказывался браться ввиду её сомнительности в этическом плане.

На самом деле, конечным пользователем той middleware, которую предлагает Piano, является издатель, а тот, кто сидит за экраном — это лишь потребитель контента. Мне отчего-то кажется, что нехорошо детектировать, и тем более пытаться заставить пользователя выключать блокировщик рекламы в браузере. Не ваше дело, включен у меня адблок или нет. Но я, вообще-то, стараюсь людей держать за людей, и уважаю их выбор. И уж тем более некорректно пытаться выяснить это, ведь способов заблокировать рекламу уйма, и технически сложно проверить их все, а от false positive пострадает куча людей, сидящих на плохом канале где-нибудь в метро.

Я, конечно, известный в узких кругах «инженер-исследователь», но в данном случае заниматься задачей не хочу (она интересная, не спорю, но пусть людям портит жизнь кто-нибудь другой). Ну, как знаете.

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

Ижевск, сорок лет уже близко

Как же классно, когда можно ничего не делать несколько месяцев между работами. Но потом всё равно становится скучно, и возникает извечный вопрос — а чем бы ещё заняться? Чтобы на него ответить, я составил чеклист.

11) лет свою CMS пилил, и мне сильно надоело. [x] Веб-разработка была.
[x] ГИС был.
[x] Кровавый энтерпрайз был.
[x] Крутой хипстерский стартап был.
[x] На заводе, где железо, мне явно делать нечего.
[x] Продуктовая разработка тоже не подходит, потому что это надолго, а я и так 11 (одиннадцать!!! Что остаётся?
[x] Разве что игры с прочей трёхмеркой, но там дофига матана, этого ещё в школе полно было.
[ ] А, погодите-ка, Big Data выходит в тренды.

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

Абсолютное большинство предложений были московские, конечно, но, к счастью, не все. Совершенно случайно нашлось.

Ничоси. Пришёл я побеседовать в место, где работаю сейчас, а ПМ прямо с порога заявил, что проект — адский. По-моему, прекрасный вариант! Опять же, ГИС, только расчёты все на MapReduce (а хочется, чтобы на Spark), карты на ArcGIS, и всё это крутится в облаках, которые никто не умеет девопсить.

Пригодилось вообще всё, чем занимался раньше. Прошло уже полтора года, и я всё ещё думаю, что вариант прекрасный. Тут мне и спарк на Java (на Scala не перешёл, потому что не кандидат наук), и AWS с девопсом, и веб-ГИС, и отличный офис с нормально оборудованной кухней, где каждый четверг (ну ладно, пускай с исключениями) можно устраивать заседание кулинарного клуба.

Готовить люблю и умею. Я же, в конце концов, неплохой шеф-повар, с таким-то опытом. И девушек в офисе много. Пиццу, пасту, печеньки, другие вкусности на букву П, — как и на любые другие буквы. Хэштег #сделановудмуртии. А в соседнем отделе пилят HUDWAY.

Итого, продолжаем работать дальше.

Потому что we do what we must because we can, и я пока всё ещё могу.

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

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

Можно просто прийти к таким, как я (а я здесь такой отнюдь не один, много нас), и мы научим всему, что знаем сами, и вы нас ещё сделаете — потому что вы моложе, и мозги у вас быстрее работают. И не надо думать, что для того, чтобы быть ценным кадром, надо было начинать 20 лет назад.

Зарплата там всего вдвое выше, зато здесь можно купить трёхкомнатную квартиру на верхнем этаже новой высотки в центре за те же деньги, что в столице двушку б/у на замкадной окраине (тем более, без mortgage на 25 лет). Ребята, ну вот серьёзно, что вы забыли в Москве (или в заграницах)? Тут нет необходимости тратить три часа в день на выматывающей душу комьют (и необходимости водить машину тоже, общественный транспорт хороший по сравнению с).

Но зато и спокойнее (и, в основном, всё по-русски, хотя и американские стартапы, где всё на буржуйском, тоже есть). Правда, тут нет и аймакса с икеей, и подсветки, как где-нибудь на бульварном кольце, тоже не найти. В конце концов, у нас есть РокИжайти — единственный труёвый айтишный рок-фестиваль ever. А если душа движухи требует, то Казань неподалёку, там двихужа бывает.

Здесь вполне можно жить, заниматься интересными задачами, и не устать даже через 20 лет.


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

PHP-Дайджест № 154 (9 – 21 апреля 2019)

В выпуске: Zend Framework переходит под крыло Linux Foundation, новости из PHP Internals, порция полезных инструментов, и многое другое. Свежая подборка со ссылками на новости и материалы. Приятного чтения! Новости и релизы PHP Internals Инструменты pinba-server/pinba-server — Простой pinba-сервер на ...

Язык Bosque — новый язык программирования от Microsoft

Языку дали название Bosque. Буквально несколько дней назад компания Microsoft представила публике новый язык программирования. Главная миссия дизайна языка — лучше быть богатым и здоровым, чем бедным и больным чтобы он был прост и понятен как для человека, так и ...