Пишет мне недавно рекрутер(ша): «Павел, вы мудры и с хорошим резюме, не хотите ли на моего клиента поработать?». А у меня как раз очередной экзистенциальный кризис, скучнейший проект, и вообще всё как-то задолбало. А тут «мудры» и всё такое, правильное. В общем, чего уж там, давайте общаться.
Но сначала пришлось немного подумать, на какую роль вообще общаться. Её клиент искал несколько программистообразных человеков. Чисто программистом быть я бы, наверное, заскучал. Но там была ещё и роль техлида — это когда всё ещё нужно программировать, что гуд, много думать о смежных областях — ML/Azure-GCP/Full-stack, что очень гуд, но при этом администрированием людей можно не заморачиваться, что алес супа гут. В общем, со всех сторон красота.
Мадам даже расписала, как и в каком порядке будут проходить интервью: сначала с их эйч-ар — о жизни, потом с каким-нибудь лидом — о высоком, затем с программером — о коде и, наконец, каким-нибудь CTO — о ценностях. Красота. Я только попросил её предупредить принимающую сторону, что перед программерским интервью мне нужно дать хотя бы пару дней поупражняться. Всё-таки последние два года я занимался облаками и консультированием, а это очень специфичная деятельность. Алгоритмы я ещё сформулирую, но привязанные к конкретным языкам программирования спинномозговые рефлексы уже ушли, приходится додумывать головными.
Всех это вроде устроило и веселуха началась. Сначала мы общались с эйч-ар принимающей стороны, и всё было прекрасно. Мне понравились их технологии, им — то, что по половине их них у меня есть какой-то сертификат, и вообще я с ходу смог представить, на каких облаках, платформах и технологиях у них всё отстроено, и предложить что-то дальше. В общем, вылитый техлид.
Но затем пошла какая-то лажа. Мне назначили следующее интервью, и там почему-то было слово «алгоритмы». Пардон, но мы же вроде договаривались, что это будет ближе к концу, чтобы я успел погонять задачки, вспомнить, что да как. Ну акей, может алгоритмы — это просто про них поговорить.
А нифига. Созваниваемся с челом, и мы сразу начинаем писать код. Блин. А на чём писать? За последние два года я серьёзно писал на четырёх языках — JavaScript, C#, Python и Go. Для учебных задачек мне проще всего писать на скрипте, но последний раз я его трогал как-раз почти 2 года назад!
Акей, задача простая, про судоку, но… Вот как мы в JavaScript различали строку-число и строку-не-число?.. Помню есть parseInt, но когда он вернёт «not a number», то я уже не вспомню, как на этот NaN проверить — ведь NaN !== NaN
… Было же там что-то.. isNaN
? Number.isNaN
? Хрен с ним, проверим вот так: +string === +string
. Вроде году в 2013м такой красивый трюк я видел в сырцах asm.js. Так, что там дальше… Функции-итераторы.
Это так больно в мозг — знать, как решать задачу, но не помнить куски языка. Функция all
или every
? all
вроде в питоне, значит в скрипте — every
. Акей, а теперь Array.some
или any
? Второе, кажется, в c#, значит тут some
. И так через каждую вторую функцию. У меня было минут 25, и я успел полностью доделать только два куска из трёх. Вот жеж подстава!
После интервью я всё думал, написать первой рекрутерше или нет. Всё-таки мы с ней договаривались на одно, а тут совсем другое. А с другой стороны, это как-то жалко, ходить и жаловаться. Акей, это они накосячили, пускай хотя бы будут в курсе. «Тётя, возможно на последнем интервью я underperformed, ибо меня застали врасплох и не оставили времени подготовиться». В ответ все поизвинялись, но понятно, что осадок остался.
Следующее интервью меня срубило ещё больше. Общались с директором по технической части который… ей богу, задал те же самые вопросы, что и его рекрутер неделю назад. Я вообще не понял, зачем это интервью было, потому что по итогу абсолютно ничего нового они не узнали. На вопрос первой рекрутерши «как всё прошло?», я честно ответил «бессмысленно».
Затем мне понадобилось дня четыре, чтобы добиться от конторы ответа на вопрос «что дальше?», и ещё неделя на допрос рекрутерши на предмет деталей «почему так?», ибо первые ответили, что будут искать кого-нибудь другого. Когда, наконец, рекрутерша заговорила, то призналась, что те ожидали от меня большего именно по коду. Даже без подготовки. Такие вот дела.
Минут тридцать после того письма я провёл в состоянии великих коней. Да какого хрена?! Потратить моё время на пару в высшей степени непоследовательных интервью, и в конце назвать меня плохим программистом? Да я первой же задачей Жорика-Аннигилятора сделаю обратить вас в радиоактивный пепел! Да я назло сейчас устроюсь к вашим конкурентам, помогу им сделать лучший продукт, а затем мы вас купим и уволим!
Пришлось сильно напрячься, чтобы понять, почему я так завёлся. Но вроде догадался. Я, походу, сильно испугался. Ведь вдруг я не так хорош, как мне всегда казалось. Это ж капец какой удар. Вдруг те вещи, которые я иногда воспринимаю как показатель своего профессионализма, типа сесть и прямо с Python и GCP начать писать плагины на Go для Terraform под Azure, ни с тем, ни с другим, ни с третьим до этого особо не работая, вдруг это всё фигня, на которую способна любая мало-мальски тренированная обезьянка? Кто сказал, что то, что я делаю, на самом деле сложно? Блин, а вдруг я не «тру»? Ведь получи та контора раздутое резюме посредственного чувака, они, возможно, вели бы себя точно так же, как и со мной.
Над такой мыслью я колбасился уже подольше. Ведь практически всё знаковое, что происходило с моей карьерой, запросто можно было объяснить и как «чувак знает, что делает», так и «ну акей, чувак что-то знает». Ох ты ж тьюринг-то… Если я не замечательный как человек, не особо выдающийся в качестве отца, посредственная версия себя, про качества супруга вообще думать тошно, да и программист, как теперь выясняется, с душком, то тогда какой я? Ну так, чтобы хоть за что-то было испытывать гордость. Ну хоть родинка особенная какая-нибудь, смайликом. Есть ли во мне хоть что-нибудь замечательное?
Прострадав недели две и на всякий случай побрившись налысо, я решил, что… не знаю. С точки зрения детей — наверное, да, и на самом деле это важно. А с точки зрения человечества — хрен его знает, но вообще вряд ли. Может, это и есть тот кусок кризиса среднего возраста, когда люди понимают, что реальность — она несколько реальнее, и такая, с большего прозаичная. Ох.
Среди этих душевных метаний одно хорошо — стрижка налысо не превратила меня в Квазимоду и фундаментально решила сразу две проблемы — страх облысения и необходимость ходить в парикмахерскую. Серьёзно, кругом карантин, а я могу сам себя стричь хоть пять раз на дню. И шампуня почти не нужно. Хорошее приобретение. Нужно было лет пять назад попробовать и не выпендриваться.
Но программирование жалко. Отсюда либо в печаль идти, либо в прагматизм. И непонятно, что хуже.
Мир несправедлив, и это не изменить.
Повод для самоедства найдётся всегда.
Капиталист ищет исполнителей, чтобы достигать своих целей; во внимание принимается только то, насколько испольнитель в данный момент подходит к планам капиталиста; былые заслуги в расчёт не принимаются.
Вывод: либо совершенствоваться в отдельной области знаний, чтобы всегда быть готовым к встраиванию в систему, либо самому становиться капиталистом.
Первое обидно для эго, но даёт некоторую уверенность в регулярном получении зарплаты. Второе даёт свободу в принятии решений, но полностью поглощает свободное время и влечёт дополнительные риски оказаться банкротом.
Не хватает вот как-то фотки побритого тебя! :-/
+1, Паша заинтриговал! Ждем фото!
Сочувствую.
Увы, это показатель, что менеджеру (-ам) нужен не техлид, а «от забора до обеда». И ищут они специалиста по чтению мыслей, который вотпрямвчера делал то же самое, что они сейчас делают, и впрыгнет в работу вотпрямзавтра, и сразу в продакшн, не разбираясь, что там как устроено и зачем, ибо некогда.
Ну и нафиг такое счастье.
Лучше всего работать у человека, который сам быстро соображает и в людях ищет это же. Потому что сегодня жабоскрипт, завтра его проглотил питон, послезавтра питона зажарит какая-нибудь юлия, а потом юлию еще кто-нибудь съест.
Кстати, о жорике. Что он уже умеет?
Ой, у Жорика вообще прогресс прогрессный. К спинномозговому ESP32 добавился черепной Jetson Nano, они друг с другом общаются по UART и вообще на Jetson Nano крутится ROS, который воспринимает данные с сенсоров по сообщениям, а ещё там есть камера, которая может стримить видео, и вообще сегодня я игрался с Jupyter notebook, в котором писал tank.takePicture или tank.move(200) и он-таки делал фотку и ехал. В общем, ух!
Классно! А что может ROS?
Например, можно ли Жорика поставить в незнакомую комнату с задачей «определи и сохрани план этажа с размерами», с поправками на мебель и обитателей? Насколько сложно такое программируется на уровне ROS?
ROS в целом просто даёт фреймуорк для распределённых процессов и обмена сообщениями между ними + утилиты для перехвата сообщений, визуализации сенсоров и прочих магических приблуд. Это то, что я непосредственно потрогал руками. + я так полагаю, что комьюнити вокруг уже сделало большенство алгоритмов и паттернов, которые легко положить на ROS. Про незнакомую комнату и мебель с обитателями, такая задача называется SLAM — simultaneous localization and mapping. Её делают в том числе и на ROS, но я не знаю, есть ли уже вовсю готовый пакет, который можно apt-get install, натравить на сенсоры и оно всё просто заработает.
SLAM точно есть в моём списке вещей, которые обязательно надо сделать. Непонятно только, нужно ли lidar для этого покупать 🙂
Лазерный дальномер? Лучше да, хотя бы носовой. Иначе трудно удостовериться, что Жорик перемещается именно настолько, насколько думает, что перемещается. Это же не дрон в полёте, у которого GPS.
(И отдельно как-то должна решаться проблема пробуксовки, в самом подлом варианте — «проходящий ребенок начал плавно вытаскивать из-под работающего Жорика ковёр».)