
Сижу, к интервью готовлюсь, повторяю всякое разное базовое и поскрипывая мозгами, на leetcode прохожу паттерны алгоритмов. Отвык, если честно - долгое время не требовалось решать алгоритмические задачи. Ищу работу. Давно не искал, целую вечность - а вокруг сменилась эпоха.
В расслабленном разговоре с молоденькой рекрутершей (вообще не предполагал говорить о техническом, только хотел узнать чем занимается компания и что требуется от соискателя) — мне в завершении неожиданно предложили пройти небольший технический скрининг и первый вопрос был «расскажите что вы знаете о классе Object, какие его методы вам известны?». Про второй вопрос и далее не буду - меня пробило на смех еще на этом вопросе. В итоге расстались мы на хорошей ноте, настроение мне вопросом подняли — я им не подошел и они мне тоже не подошли потому что вакансия была совсем о другом, в моем представлении.
Лето провел специально не с Java а с Python и ML/AI, для расширения кругозора, что и продолжаю делать ежедневно — отгрызаю по кусочку, правлю устаревшие примеры с pytorch в одной книжке и d2l прохожу вместе с обзорными курсами от deeplearning.ai. Кругозор это святое! Нужно быть амнидекстером - неизвестно с какой стороны прилетит, желательно иметь широкую базу, хотя бы для кругозора. Еще Spring AI чуть глянул, чтобы знать насколько они в тренде и что можно сделать. Специализация это хорошо но для архитектора, если планируешь им стать, кругозор важен (и разносторонний опыт). Пилить только Java до конца дней перспектива не радостная.
И задумался я - а кто же я, "вкатыш" или не совсем?
Существует такой термин — лейтенант военного времени. Если коротко, то «теории мало, а практики много» - сразу в бой, минуя теорию. Вот и я, к примеру, из таких недоучек практиков - не совсем "вкатыш", все таки клацал по клавиатуре перед тем как стал программистом, но скорее, не считал программирование занятием которым хотел бы заниматься - но в итоге оказался им.
Как же это произошло, как я дошел до жизни такой? А как обычно - случайно, жизнь заставила. На безрыбье, как говорится, и сам членистоногим станешь.
Первая работа - стартап.
Консультировал по программированию знакомого студента, в далеком уже 2000 году (а для меня как будто вчера было) - он только только закончил местный CS факультет но был совсем зеленый и неожиданно, через знакомство заскочил в стартап. Я в это время переходил из админов в программисты на Java (бэкграунд был в С, Паскаль, Фортран но любительский, для души и на двух кафедрах волонтером) и с админством не вписался в рынок — программисты были нужны, бум 2К шел вовсю, наборы программистов были а админов не особо набирали - все таки админ лицо доверенное, и если судить по пропорциям, то нужен один админ на 10 программистов.
Чтобы не нищенствовать на велфере и держать себя в тонусе, работал во вторую (практически ночную) смену на заводе (4 смены по 10 часов в неделю, до 2х ночи, дома появлялся в 4 утра, зато было три выходных для учебы и достаточно денег для нормальной жизни), снимал клетушку в мансарде (комната была в длину чуть больше чем длина кровати, ширина как кровать, под коньком крыши, с маленьким окошком со слюдяными вставками, свинцовый переплет, дом 1920х годов), рядом с Jane & Bloor St. W в Торонто. Перековывался с админа на программиста Java— решил пойти в джуны на Java - купил пару компьютеров и гонял на них примеры клиент/сервер (с апплетами и без). Виртуалки тогда до меня еще не дошли. Основная проблема была не в программировании а в английском - я не тянул телефонные разговоры. Для расширения социальных связей собирал людям компьютеры по выходным - прикинул что за полтора года собрал 52 компьютера и сильно расширил сеть знакомств. Знакомых было много, позже даже в банках попадались - "привет, а я тебя помню, сейчас мы тебе кредитную линую улучшим!" - через несколько лет разок мне хорошо так кредитную линую увеличили и процент уменьшили по ней. Социализация рулит.
Вдруг новость от знакомого из стартапа - индус, программист Java (с нужными сертификами и регалиями) оказался липовым программистом, обделался и покинул компанию. Сертификаты были а способностей нет - не потянул простенькое приложение с парой десятков классов (Java апплет). Тогда помогалок не было - не погуглишь особо и не "повайбкодишь". В стартапе предложили попробовать и предложили оплату чуть выше чем у рабочего на заводе, на контракте — справишься, оставим, нет — выбываешь. Срок: неделя чтобы показать результат. В тот же день ушел с конвейера — зуб на заводских у меня был — начальство меня продинамило с повышением зартплаты после того как обучил персонал работать с bending robot, от Педразолли (который до этого стоял мертвым грузом), вроде вот этого: https://www.pedrazzoli.it/en/catalog/tube-benders/bend-master-45-tube-bending-machine/ и снова вернули меня сварщиком на конвейер. Пришел в цех, сказал что ухожу - мастер смены встал на мое место на конвейере (не будут кидать работяг, урок им, думаю пару смен мастера отработали вместо меня). Так то у меня вышка техническая, но подработка была нужна и стимул хороший когда есть возможность облегчить себе жизнь а на велфере многие загнивали.
В стартапе после цеха было круто! Офис в чайна тауне, свежий ремонт, опенспейс из матового стекла (прямо на стенах можно рисовать схемы фломастером), кондиционер (после сварочного аппарата в металлическом ангаре в 30 градусную жару его особо ценишь), чай и кофе в любое время, прогулки вокруг офиса для «обдумать задачу». Один только минус — писали код до 2х а то и 3х часов ночи и инвойсы по неопытности я не каждые две недели закидывал а каждые 15 дней, так что подарил часть своего времени компании.
Команда была пестрой как в комиксе про злодеев: в бэкенде сидели двое: профессор математики, спец по волновым процессам, не помню был у него чек дома от Кнута или нет, но он про него что то рассказывал а трехтомник Кнута держал на столе как маньяк (вот его бы на алгоритмическое интервью вместо меня). Мы позже сошлись и общались довольно долго, когда он «распрощался с ремесленничеством» и занялся преподавательской работой в США (где с его слов, множество его знакомых из Питера работали преподавателями). Программирование у него было временным занятием, долгоне получалось найти ставку преподавателя в Канаде (дикий край, с подобной работой там туго). Другой бэкендер был абсолютно безнадежен как программист, абсолютная противоположность профессора — бывший военный (тоже из Питера) совершенно без аналитического склада ума (до изумления) - когда писал CGI код на C, путал сишный код и вставки на javascript, у меня сложилось впечатление что он не понимал что пишет. Впрочем, профессора хватало одного для стартапа - он бы и нас на Java заменил, если бы не брезговал Java как языком. Профессор писал строго на С и не подходил к Windows (считал ее вирусом).
Список моих достижений, как сейчас принято говорить, в этом стартапе: набил руку с апплетами в различных браузерах, попробовал J++ (мертворожденный), решил проблему с тупящим gargabe collector (не успевал деревья разбирать, у нас они активно использовались и в итоге приложение вставало после нескольких перезагрузок в браузере после Refresh - в ранних версиях Java finalize() иногда был необходим для помощи сборщику мусора) и познакомился с Linux (windows был только у тестеровщиков). Набил руку с UI, добавил анимации всякие (такие были хотелки), асинхронную обработку событий мыши и клавиатуры (в прототипе была синхронная обработка событий с перерисовкой и могло зависнуть) - в целом ничего особенного но для новичка это был хороший опыт. Ранняя Java а апплете позволяла сделать полноценный time bomb в случае ошибок в коде (будешь полчаса пытаться graceful рестарт сделать в Win 95/2000 — все могло колом встать с 100 процентной загрузкой процессора).
Новый жизненный опыт: один из основателей стартапа жил в чайнатауне и знал все ходы и выходы и я познал китайскую кухню и секретные места в чайна тауне — за неприметной дверью без вывески мог находиться ресторан для своих на вынос с табличкой «лучшая кухня за 20 лет» - кто знает, найдет.
Осенью 2001-го стартап схлопнулся — вышел MS SharePoint и прибил его как таракана тапком. Затянули с выходом на рынок — все было готово еще на полгода раньше но владельцев неожиданно заклинило что нужно использовать Oracle (для солидности) а не PostgreSQL и UI фасад обязательно под Мак мимикрировать (было под Windows). Внешние интерфейсы Мака и Винды я научился делать неотличимо на Java, наполировал UI глюкало от души.
Мораль: выходи на рынок когда концепция работает даже если не устранены недостатки.
Если честно, я выдохнул с облегчением — много перерабатывал (политикой в стартапе была набивка глючного кода по ночам и его исправление на следующее утро), к тому же успел заскочить на «full time» и отработать на нем полгода - предвкушал что смогу наконец отдохнуть на страховых выплатах (сгонять на Кубу) - все таки забег в 2 года без перерыва на 3х работах с переработками. Подвыдохся я.
В числе последних трех человек «выключил свет в аэропорту» и отвалил на отдых в самом начале сентября 2001 г. Помню получил первый чек по безработице (который был выше моей зарплаты на заводе) - сижу с чашечкой кофе (бабье лето в Торонто лучшее время года) утром на завтраке в гостинной у хозяйки (она занимала первый этаж а комнаты на втором сдавала, примерно как житье на Бейкер стрит у Шерлока Холмса — старушка на первом этаже а постояльцы на втором).
И тут наблюдаю как в прямом эфире в WTC влетают самолеты (тайм зона одна), так и завис на новостях. Ну думаю, сейчас точно работы не будет, что то начнется. Не угадал я с отдыхом - новый хомут сам нашел мою шею - в конце сентября постучали в окно и предложили работу в другой компании - не отгулял я даже месяца.
Вторая работа - консалтинг
На прохождении интервью когда отвечал на вопросы по Java, интервьювер вел себя странно — заглядывал под стол. Позже спросил - оказалось он вопросы и ответы на бумажке смотрел, сверялся - в Java он был абсолютно нулевой и когда я отвечал отходя от темы, то подвисал, и это было заметно. В этой компании оказался первым кто вообще что то реальное писал на Java. Особых приключений не было, обычный консалтинг и интегратор — было много проектов по различным огранизациям, от министерства финансов (провинциального), Toronto Police (узнал как миниторят тачки на дороге, наш софт там использовался) до автоматизации работ в аэропорту. Из самого интересного был аэропорт — облазил аэропорт Пирсон в Торонто, все терминалы, когда внедряли автоматизацию сервиса такси и лимузинов и автоматизацию работ для персонала аэропорта. Было интересно посмотреть как живет аэропорт изнутри. Есть ходы и тоннели где можно хорошие снимки самолетов сделать на взлете и посадке, есть они и снаружи аэропорта. Старшим по IT там был молодой китаец, позже весь IT вынесли на аутсорс, свое отделение сократили.
Как то сгорел самолет при посадке, airbus — молния попала, воняло керосином будь здоров… Офис наш был в паре километров от аэропорта, в бизнес квартале — долетало и туда. Нашел там одноклассника — он работал на деайсинг машине некоторое время, рассказал истории интересные (к примеру как мойщик проткнул самолет корейской авиакомпании штангой, хорошо что в туалет попал а не в пассажира,а то насадил бы его на трубу как энтомолог бабочку на иголку).
В 2004 зарегистрировал корпорацию, перешел на контракты (прощай full time, здравствуй свобода!) и вернулся в Россию в 2005 - первый канадский этап с созданием базы закончился, начался период кочевничества (а также освоения Quickbooks, бухгалтерии, налоговых деклараций и других форм отчетов о которых я не задумывался когда открывал компанию).
Конец первой части.
PS Теперь вы понимаете мою реакцию на «расскажите все что знаете про класс object?» Я кстати, сделал из этого невинного вопроса выводы и залез под капот JVM, освежил знания не только про Object.