Quant Valerian
1.8K subscribers
115 photos
6 videos
5 files
263 links
Авторский канал Валерия Овчинникова
Размышления про менеджмент команд, людей, проектов, себя и своих денег

Рандомный винегрет из мыслей и репостов тут https://t.me/quant_valerian_cooking
Download Telegram
Итак, ситуация.
Никаких системных знаний по программированию или даже просто информатике у меня нет, никакой промышленный язык программирования я толком не знаю. Зато есть горящие глаза и желание попасть на курсы.
Я походил поузнавал от компании, о курсах, о людях, пробовал готовиться к собеседованию.
Пришёл, значит, единственное, что смог выдать -- сортировка пузырьком на Си. А ещё собеседование со мной проводил начальник учебного центра, который спрашивал, почему я хочу у них учиться. Тут я начал рассказывать про брата своего одноклассника, который у них в компании работает. Какой он крутой и т.п. Брат этот меня даже по имени не знал, но зачем это упоминать? Оказалось, что он какой-то действительно очень ценный сотрудник и меня решили взять просто потому, что я его знаю ¯\_(ツ)_/¯

Набор был весной, а на лето дали задачек. Мне выпал зип архиватор на java. У меня ничего не выходило, я был в ужасе от самой формулировки. Зато у меня был старший друг, который в это время стажировался в Google, и, заглядывая в будущее, вот-вот должен был стать финалистом ACM ICPC. Java он знал поверхностно, но этого с лихвой хватило, чтобы мне помочь. Так я начал что-то понимать в этом ужасном языке и почувствовал первую уверенность. Летом же я начала читать первый том Хорстмана.

Задачку зачли и начали учить. Лекции достаточно глубокие, а вместо семинаров были проекты. Я делал индексатор локальной сети кампуса (samba), искал там новые серии популярных сериалов. На ejb поднял простенький сервис, где можно было в браузере искать и скачивать серии нужного сериала, отмечать просмотренные и даже получать нотификаций от появлении новых серий в сети (но эта часть работала нестабильно). Тут мне снова помогал мой друг нуглер, а ещё был отличный ментор, который объяснял всю эту мерзкую enterprise java.

Параллельно, в том же учебном центре нам преподавали oracle sql. Курс был довольно серьёзный -- и аналитические и оконные функции, и чтение планов, и хинты. Преподаватель тоже был серьёзный. Получить высокую оценку было трудно.
Но группа была большая, поэтому зачёт они пригласил принимать своих коллег из самого крутого отдела Netcracker -- system performance. И мне повезло сдавать зачёт одному из них.
Получил я свои 10/10, преподаватель был открыто недоволен, но при перепроверке оказалось, что снижать действительно не за что -- я ответил всё и даже больше. (Сам я, конечно, был в шоке, ведь никакой уверенности в своих знаниях у меня не было, да и сейчас я не напишу рекурсивный запрос).

Ещё на втором курсе я нашёл в книжном магазине МФТИ книгу про написание хакерского софта под линукс. В комбинации с курсом по операционным системам, она помогла мне лучше понять некоторые вещи про сетевой стек, многопоточность и Линукс. Но книга сложная, понимал я из неё крайне мало. Что не мешало ставить эксперименты над локальной сетью и измываться над своим ноутбуком, устанавливая очередную версию линукса.

В конце первого семестра в учебном центре лучших студентов пригласили пойти интервью в компанию (обычно приглашали после двух семестров). Пригласили и меня.

На одном из собеседований я блистал навыками написания SQL запросов, на другом красиво рассказывал про свой учебный проект (чуть приукрашивая, естественно), а на третьем зацепился языками с интервьюером на тему хакинга. Короче, буквально ВСЕ отделы, которые меня смотрели, захотели меня взять.
Я посоветовался с начальником учебного центра и выбрал отдел с наиболее senior людьми, к тому же, у них был офис в кампусе, а не на Павелецкой.
Это был отличный выбор! Я работал с настоящей элитой компании (если забыть о system performance, где, впрочем, в основном оптимизировали запросы, а не писали на java).
Эти ребята дали мне отличные навыки и знания для старта.
👍2
В весеннем семестре читалась Java EE, но я пропустил практически все лекции. Зато мне удалось попасть на курс сетей! Локальные сети были осенью и пересекались с моими основными парами по времени (к моему большому сожалению), а весной читали курс по глобальным сетям. Без основы было чуть сложновато, но не слишком. Чтобы понять DWDM больше нужны знания физики, чем ip сетей. А я физик.
На работе я впитывал азы промышленной разработки. Подходы, паттерны, именования переменных и методов и т.п.
Через какое-то время коллега-однокурсник, с которым мы вместе строились в этот отдел (тот самый, который мне рекламировал курс!) показал мне имейл рассылку Java Professional от Heinz Kabutz, я много читал Хабр (тогда был самый расцвет российского java блоггинга — там и Черёмин, и Шипилёв, и Смирнов...).
Всё лето пытался разобраться с моделью памяти, biased locking и прочими "кишочками".
Пытался поступить в ШАД (слышал, что там круто), но потерпел фиаско уже на этапе тестировании. Но, человек, возглавлявший набор в ШАД в тот год, оказался знакомым знакомого и запилил нас двоих вольными слушателями (мы очень сильно просились!).
В ШАДе были очень трудные, но офигительно интересные курсы по алгоритмам, С++ и питону. А завалился я на дискретной математике уже в первом же семестре (впрочем, вольному слушателю это было ни по чем, я продолжил ходить и сдавать курсы дальше).
Очень рекомендую посмотреть на ютьюбе лекции Бабенко по алгоритмам. Больше нигде не видел такого интересного рассказа на тему. Сколько ни пытался изучать алгоритмы ни до, ни после ШАДа.
По дороге из Долгопы до Парка Культуры я читал Clean Code и это было прямо откровение. Мне казалось, я начал понимать, как писать код красиво и хорошо, пусть и не до конца. И я начал писать код гораздо лучше.

Это же осенью меня попросили прочитать лекцию про Collections&Generics в учебном центре NetCracker. Я честно готовился. Но это было фиаско! Я валился на простейших вопросах из аудитории, ошибался. Мне было ужасно стыдно.
Тогда я решил заботать сам язык. Сделать это не так уж трудно — благо есть сертификации! Я взял книгу Kathie Sierra SCJP 6 и пофигачил. Узнал много разных тонкостей, эта книга как раз о них. Понял логику компилятора и вывод типов. Я на инерции от прочтении этой книги даже потом репортил баги в компилятор java 8, когда она вышла.
Впрочем, из головы не выходила тема concurrency. Взял в ШАДе курсы по распределенным вычислениям, взял книгу Brian Goetz JCIP, продолжал читать статьи и Java Language Specification Chapter 17. Остальные главы, кстати, тоже любопытные. Да и JVMS можно полистать, хотя не помню, что мне там показалось интересным.
Пришел в ШАД на курс по алгоритмам во внешней памяти с JCIP, а пацаны (плюсовики!) мне и говорят: "о, прикольная книжка, я читал". Плюсовики! Как я отстал! Мало того, что они сюда _поступили_, сдали большинство курсов лучше меня, так они еще и по Java, похоже, больше меня знают. Чувствовал себя абсолютно отвратительно.
Еще где-то примерно вокруг этого времени меня не взяли в яндекс после долгого мурыжания на скайп интервьюшках. А эти ребята уже работали в яндексе!
👍2
На работе коллега включил меня в классную рассылку с Java Pazzlers от главы System Performance. Там как-то раз была офигенная задачка про восстановление phantom-reachable объекта. И этот способ не противоречит спецификации языка! Отправил задачку Heinz Kabutz'у (с разрешения автора, естественно), а он еще паре корешей, включая Wouter Coekaerts (знатного джава ломателя). Wouter зафайлил это как секьюрити баг в jdk. Но все остались под впечатлением.
Тот же коллега рассказывал мне про final в контексте concurrency, помогал с моими каверзными вопросами. По его совету я прочел Effective Java — рекомендую.
Уж не помню как, но я раздобыл исходники внутренней тулы авторства Ситникова для горячей перезагрузки классов в JVM. Посмотрев на нее и ничего не поняв, начал изучать java-agent API и сделал тул для подмены времени в System.currentTimeMillis (очень надо было для тестирования некоторых фичей на application server'ах).
На работе мне стало скучновато и я начал читать статьи про garbage collectors и performance, отправил заявку на участие в graduate program от Дойче Банка, стал проситься в команду system performance. Вот такой неожиданный исход от методов воспитания моего начальника: он научил меня быть самостоятельным, находить нужных людей, писать им, добиваться своего. Обучиться этому можно, естественно, только через практику.

В system performance меня не брали. Читать лекции в МФТИ тоже больше не доверяли — отправили тренироваться на ВМК-шниках. Зато заставили менторить небольшую команду физтехов, один парень из той команды теперь какой-то крутой дата сатанист. Ну вы поняли.
👍1
Держите, кстати, его канал
А то без имён как-то совсем скучно
@i_failed_again
Раз уж я тут рассказываю про computer science дисциплины, то стоит рассказать и про свою кафедру.
Попал я туда случайно, когда господин Никитов меня грязнейшим образом обманул и кинул (а сейчас он ИМХО вообще обезумел, можете погуглить видосики с ним). В общем попал на одну из самых непопулярных кафедр. Но! На поверку оказалось, что это чуть ли не лучшее, что есть на квантах для любителей компьютеров. Заведующий кафедрой член. корр. РАН, один из создателей Электроники СС БИС и даже БЭСМ-6, Митропольский. Он читал нам лекции по суперкомпьютерам и архитектуре компьютеров вообще. Рекомендую ознакомиться (здесь есть и история суперкомпьютеров) https://drive.google.com/drive/folders/1tXulSNdhERN-810H4oPWRmK1d20mqBVr?usp=sharing.
Мое же направление на кафедре — квантовые компьютеры, физическая реализация. Чтобы понять, зачем делать кубиты, нужно разобраться в основах квантовых вычислений. Так что у нас были замечательные лекции и семинары на эту тему. Если кому интересно, то один из первых постов в канале — о квантовых компьютерах, а ознакомиться более фундаментально можно по книге Нильсена и Чанга.
👍1😢1
В общем, после четвертого курса я сидел с довольно посредственным дипломом бакалавра, с несколькими зачтенными и одним незачтенным курсом ШАДа и страстным желанием делать что-то performance critical.
Тут коллега мне на хвосте принес весточку. Какой-то там типан с Павелецкой, который учился с нами, работать начал на полгода позже и ничем особо не выдавался рассказал, что ему зп поднимали уже n раз. И получает он, соответственно, ощутимо больше нас. Начались рассказы про то, что это все из-за менеджера, который не следит и какой-то такой бред (тогда мне не было понятно, что это бред).
И вот вместо того, чтобы пойти к начальнику и попросить прибавки (давно ж не было — никогда после испытательного срока), я начал уже всерьез задумываться о том, чтобы свалить (перейти в другой отдел внутри у меня так и не получилось).

Тут мне звонит рекрутер из Дойче Банка. Посмотрел я на требования к вакансии: _требуется_ опыт с low-latency, garbage-free, три года опыта с java (у меня на тот момент два), etc. и говорю, что, извините, но это не мой уровень (эту ошибку я потом совершу еще минимум один раз). Но рекрутер убеждает меня, что это все формальности и всем пофиг — надо идти. Соглашаюсь.
Одновременно соглашаюсь на собесы в Люксофт. Как оказывается, на проект Дойче Банка. Забавно.

В дойче прохожу тест, потом технический собес, где меня спрашивают всякую дичь (по мере того, как я отвечаю сходу на все более сложные вопросы). Заканчиваем мы алгоритмами работы CMS и Parallel GC, а также написанием lock-free стека (затащили статьи Максима Хижинского про lock/wait-free на C++, ищите на хабре). Интервьюеры в восторге, я выхожу с температурой.
В люксе меня мучают какими-то уровнями изоляций транзакций и прочими датабазными штуками. Рекрутер говорит, что интервьюер не может закрыть этупозицию уже 9 месяцев и готов взять меня, но, о ужас, только мидлом. Я ведливо отказываюсь (вспоминая вопросы про базу) и прошу все-таки проект с Дойче.
Отправляюсь снова в офис Дойче на собес "с заказчиком". Там вопросы уровня изич: типа написать пинг понг на двух тредах. Это, естественно, оффер.
Тем временем начинаются проектные собесы в Дойче. Там я вращаю бинарные деревья и прочее, а еще рассказываю, что я в магистратуру иду. Менеджер проекта сомневается, боится, что уйду в отпуск по учебе на диплом. Он думает неделю и отказ. Дальше должны быть собесы в другие команды, но, фиаско, — хайринг фриз. Однако мне прозванивается другой рекрутер из Дойче и приглашает на собес в Graduate Program (помните, я отправлял заявку полгода назад? Я тогда тоже забыл уже!). Я говорю, что они меня достали уже собесами, они чекают внутри мой профиль и я после забавного собеса я получаю оффер. Так из-за хайринг фриза я вместо Assistant Vice President становлюсь Analyst (это на две позиции и в лучшем случае 4 года ниже).
А собес забавен вот чем. Заходит человек, вице президент весь из себя. Начинает задавать всякие задачки брейн-тизеры. А я все их просто знаю. И формулировки и ответы. Отвечаю мгновенно. Он задает и задает, а я все отвечаю. Наконец, он начинает задавать задачу, которую я слышал в яндексе. Ответа на нее я не знаю, но я заканчиваю за него формулировку... Он говорит, мол, сдаюсь, ты все знаешь. На этом задачки кончились. Я потом с этим человеком подружился и признался в этой хитрости. А он мне довольно много помогал и во время работы, и когда я уволился, и даже позже позвал меня в другую компанию, где я и сейчас работаю.

Из двух офферов я, очевидно, выбрал Дойче (несмотря на чуть больший уровень компенсации и лычку "синьор" в Люксофте). Ведь там известные в performance мире Черёмин, Долженко, Рагозин, там low-latency, garbage-free, ммммм...
Звучит как сказка для меня тогда, да?
👍4
Надо ли потом собрать все источники, которые я ботал, в отдельный пост?
Anonymous Poll
79%
да
5%
нет
0%
не понимаю о чем речь
8%
не понимаю, что я тут делаю
8%
нет мнения
В Дойче я начал лихо. Меня посадили разбираться с проектом, где использовался самописный garbage-free транспорт. Как только я застрял на полчаса с кодом, жмакнул annotate в гите и побежал по списку контактов в поисках авторов. Часть из них были какие-то давно покинувшие банк немцы, но нашлись и ребята буквально с соседнего этажа. Написал одному из них (оказался какой-то Vice President), сходил к нему, потрещали, он мне все объяснил, хотя на лице был явный шок. В таком духе я проработал примерно месяц. Начальник был очень доволен.
Но тут началась Java школа. Школа очень хорошая, вёл её Евгений Кривошеев, вёл круто. Но я, напомню, успел подготовиться к сертификации (но не сдать, зачем??). Так что на занятиях я проходил курс Одерского по Scala на курсере. Начальник всё спрашивал, не мог бы я как-нибудь сбежать с этих занятий, но я не мог и не хотел. Там я общался с ровесниками из разных ВУЗов, которых набрали в разные команды Дойче и которые очень горели java'-ой (как и я).
К тому же у нас были командные лабораторки (написать биржу и трейдинг ботов, например). Это весело! Нам проводили тренинги по финансовым рынкам и инструментам, но все было на английском с невероятным количеством акцентов — мне было тяжеловато, хотя английский я вроде знал неплохо. Компенсировал я свое отставание чтением Hull, "Options, Futures and Other Derivatives".
После интенсива по java и финансам нас отправили работать в проекты. Параллельно, два раза в неделю нас забирали на воркшопы. Например, Рагозин рассказывал про garbage collection (спали все, кроме меня, очень тяжелый он рассказчик), nio, concurrency & testing, build tools и прочее очень нужное.
Через полгода нас должны были ротировать между проектами, но почти всех участников программы начальники не захотели никуда отпускать! Ребята действительно были топовые! Многие получили оценку за год exceptional (я тоже), которую нормальным людям ставят раз в никогда. Хочешь-не хочешь, а проект сменить надо. Так что меня пересадили с большого проекта (деривативный риск блоттер) моего начальника на маленький проект моего же начальника (спот риск блоттер). Большой проект начался за неделю до моего прихода в компанию, так что я был офигенно рад колбасить новый код! Маленький проект начался как раз в момент моей вынужденной ротации. Под него наняли большого специалиста по low-latency java и выдали ему меня в качестве орудия труда.
К тому моменту Евгений Кривошеев оживил во мне интерес к паттернам. Я узнал, что кроме книги "банды четырех", которую я прочел еще в Netcracker, есть целая серия книг POSA (Patterns Of Software Architecture). Читать я их, конечно же, не стал. Но зато посмотрел на курсере курс Дагласа Шмидта по его книге (кажется POSA vol. 6) паттерны сетевого и многопоточного программирования. Узнал много нового. Рекомендую. Интересно, что в качестве "Appendix'а" к курсу шел целый другой курс — по классическим паттернам из gang of four и pattern language. Его я посмотрел взахлёб.
Вооруженный знаниями новых паттернов, прочитанными статьями от LMAX и твиттером Martin'а Thompson'а, я начал предлагать свои "гениальные" архитектурные решения для приложения. Типа давай сделаем всё однопоточным, с конвеерами? Этот паттерн называется reactor! Здесь не нужен volatile! Но мой тим лид и так всё это знал :) Меня радовало уже то, что я предлагаю правильные вещи, значит, понял всё верно!
В Дойче банке были шикарные внутренние курсы для сотрудников. Некоторые вели сами сотрудники, другие — приглашенные тренеры. Тут вам и всякий agile, и лидерство, и аргументация, но были и крутые технические вещи: про карточки Solar Flare, про ловушки latency в протоколе TCP, про арендованную линию микроволновой связи и самый быстрый оптоволоконный линк между Лондоном и Токио. Отдельно хочу отметить лекции по финансовой математике, которые проводила команда Артёма Бакулина. (pdf'ки я до сих пор нашу везде с собой, держу у сердечка, не пишите — не поделюсь).
👍1
В общем, я кайфовал, к тому же зарплата в евро! Я быстро обогнал тот оффер из Люксофта. На диком драйве я отфигачил год, как сумасшедший и снова получил exceptional. Некоторые коллеги напряглись (ведь пулл оценок общий и ограниченный, а тут такое), но никто на меня не злился, команда была настоящая, дружная.

Примерно в это время я понял, что программирование и перфоманс это все, конечно, очень интересно, но. ВЫ ВООБЩЕ ВИДЕЛИ ФИНАНСЫ? Это же физика! А я люблю физику.
👍1
Однако был еще важный демотивирующий фактор. На этой Graduate Program в наш год случилось сразу несколько досадных изменений. Во-первых, нас не повезли учиться в Лондон, как это было обычно. А наоборот, привезли препов к нас. Но это мелочи. Главное, что, когда нас нанимали, обещали, что через год лучшие смогут получить промоушен (и зарплату). Но немецкие шишки включили свой diversity и запретили нас повышать через год (только через два), потому что кому-то там в какой-то там стране обидно, что русские такие привилегированные.
Обещал — делай! Я начал возмущаться на внутреннем международном форуме, акцентируя внимание на том, что по крайней мере нам тут, в России, обещали вот такое-то. Звонит телефон.
- Алло?
- Добрый день, Валерий?
- Да.
- Это *** ***, начальник отдела кадров, HR Business Partner. Зайдите ко мне в кабинет, пожалуйста.
- А вы где сидите?
- Соседний кабинет с СЕО, *** ***.
- Сейчас немного занят. Через 20 минут нормально будет?
- Да, вполне.
Доделал свои дела и пошёл.
Надо вам сказать, что КАБИНЕТ в Дойче был мало у кого. Встретила меня женщина с выпученными глазами и сказала, что меня ждут.
Оказалось, что кто-то из топов начал очковать, что русские (я от лица всех участников программы, мы это обсуждали) жалуются на притеснения. Я свою позицию объяснил, пообещал уточнить в тексте, что речь не о расизме. Мы мило побеседовали. Она посетовала, что несмотря на роль business partner, к ней не прислушиваются (как раз на мою тему — промоутить за заслуги, а не выслугу лет), я посочувствовал и ушел.
Коллеги встретили меня обеспокоенными взглядами. Очень удивились, что я в хорошем настроении. Сказали, что обычно из того кабинета выходят сразу на улицу.

Продавить биг боссов, естественно, не вышло. Так и остался куковать без корпоративного титула с соответствующей зарплатой и одинаковым на всех в моей роли бонусом. Что было обидно — так это то, что чувак, который целыми днями сидел на 9gag получал столько же (мы его, правда, выперли через полгода бытия на нашем проекте).
👍1
На новом проекте было круто — мы действительно замеряли персентили, оптимизировали gc, да ещё что-то финансовое считали самостоятельно! Примерно через год после старта тим-лида отправили делать проект покрупнее, с командой побольше, а тут всё осталось целиком и полностью на мне. Чтобы иметь возможность разрабатывать, а не только поддерживать проект, мне пришлось написать очень подробную документацию, сделать миллион JMX-ручек, провести несколько лекций по работе системы, запилить тулов для поиска отклонений.
Например, все расчеты я начал писать в формате json — так можно было найти ошибки как в рыночных данных, так и в сделках и, естественно, в коде, — всё полностью автоматически.
Прочитал What Every Programmer Should Know About Memory — пробежался по коду, оптимизируя обращения к памяти. Послушал доклад про CMS от каких-то трейдинговых ребят и сразу начал изучать все его опции, чтобы дожать до заветных 100мс (100%-ile), дожал.
Примерно в это же время меня начали интересовать распределенные системы. Я пошел по списку Henry Robinson'а и шпарил просто подряд. Некоторые вещи я не понимал (PAXOS я не понимаю до сих пор), поэтому начал читать The Art of Multiprocessor Programming в надежде понять разницу между serializable и linearizable (понял, и еще много очень интересных вещей там узнал). Наконец, моих навыков стало достаточно, чтобы начать разбираться в барьерах памяти и архитектурах кешей разных моделей процессоров. Я читал JSR 133 Cookbook и никак не мог понять, как же это на Power'ах возможен фейл теста independent reads of independent writes (IRIW). Я не мог понять это МЕСЯЦАМИ. И тут я впервые отправился на JUG-овскую конференцию. В первый же день было прям вау! Я ужасно устал и там же чуть не уснул. Я выслеживал Шипилёва, чтобы он мне объяснил про IRIW — он не понял вопроса (была толпа, у всех очень важные вопросы). Вопрос услышал один там известный эксперт, но тоже, можно считать, что просто нахер меня послал (отмахнулся с мотивацией, что это мне не нужно).
Ночью мне снилось, как Шипилёв объясняет мне про IRIW 😂.
На следующий день надежды у меня практически уже не было. Я пытался получать удовольствие от конференции, но получалось с переменным успехом. И вот уже в конце дня я увидел офигенно замученного Шипилева, одного в холле! Поймал его и начал чуть ли не трясти. Про IRIW он мне объяснил, но это было разочарование и скука, зато он показал мне, как такие вещи можно понимать самому! Оказывается, есть такая исследовательская группа под руководством Peter Sewell, которая занимается тем, что придумывает разные эксперименты, а потом с их помощью реверс инжинирит модели памяти различных процессоров. Эта же группа совершала попытку формализовать memory model C11 (почитайте — интересно). Огромное спасибо Алексею за эту жемчужину. Я многократно возвращался к статьям группы, когда мне что-то было не ясно. Очень советую статьи из раздела Relaxed-memory concurrency. Считаю, что важно понимать разницу между x86 и ARM/Power (про альфу даже я тогда уже не читал).

Видимо, я много гуглил про распределенные системы, потому что мне написал рекрутер из гугла и пригласил на собеседование на SRE. Я согласился и потопал читать, кто такой этот ваш SRE. Быстренько прошел телефонный скрининг, где обратил внимание на вопрос: какой хендшейк в протоколе TCP. Ответить-то я ответил, но это же скрининг, а значит, к собесу нужно заботать сети! И вместо того, чтобы тренироваться решать whiteboard паззлеры, я налёг всеми силами на Олиферов. Книга великолепная, по сетям лучше ничего не видел.
Собес я закономерно провалил, потому что надо было код писать, а не умничать.
👍1
Немного отступлю от рассказа

Тут в комментариях спрашивают, как сложились карьеры других выпускников graduate program, с которыми я учился вместе.
У тех, про кого я точно в курсе, всё прекрасно. Одна девочка уже пару лет назад стала Head of IT в Сбере (это что-то типа серьезного тимлида у них), другой парень сейчас активно набирает команду, чтобы построить первый российский техцентр Сити Банка (хорошие программисты, пишите), ещё один парень работает в лондонском Дойче квантом. Ещё с одним мы пересеклись, когда я работал в Револют, теперь он там лид разработчик, тоже в Лондоне. А с одним парнем мы даже работаем в одном месте сейчас, где он тимлид соседней команды.
Есть несколько человек, которые продолжают работать в московском дойче, но я, к сожалению, не знаю на каких позициях (думаю, что не ниже AVP).
Мало умных людей.

1860 год, 16 августа
31 год
В общем, стал я прошареным в конкаренси и прочих распределенных алгоритмах, научился оптимизировать gc, освоил несколько разных профайлеров, тулов для анализа JVM и приложений (включая внутренние дойчевские) и поприменял это всё на практике. Тащил на своём горбу проект, который обслуживал нужды трейдеров от Нью-Йорка до Сиднея (24/6), торговавших через HFT машинку для токсичных клиентов. Еще были какие-то voice fx forwards/swaps трейдера, но их мало. Данные из приложения я отправлял в реальном времени через solace (это такая hardware JMS) в хранилище для той самой HFT машинки (для бектеста рисков и исторического анализа), еще в какого-то Сингапурского робота и в команду американских даунов, которые считали позы кривыми SQL-запросами (которые я им исправлял два раза, но в итоге мы решили их просто выбросить). Латенси распределения были просто шикарные: 95%-ile прижаты к полу, да и 100%-ile не поднимался выше 100мс на commodity JVM. Внутрення система трейсинга времени давала небольшой сбой из-за рассинхрона в NTP (причем стабильного, дело, видно было в кривом gps в одном из пыльных ДЦ), что приводило к тому, что сообщения, вылетали _в_ мою систему после того, как они вылетали _из_ неё — я шутил про "настолько быстрый", да.
Трейдеры, с которыми я работал были совершенно разными: от добродушного американца до занозы в заднице из Австралии. Но в итоге со всеми договорился, все были довольны. За ресурсы сражаться особо не приходилось, потому что начальник честно отдавал в мой проект половину времени очень крутого desktop фронтендера и высочейшего качества тестировщицы.
Но, конечно, не все шло, как по маслу. Эта система должна была прикончить старую, написанную на С++, т.к. плюсовая версия была 32-х битной и падала с ООМ в конце каждого дня, оставляя трейдеров по всему миру без понимания своего риска. Документации не было. Так что я буквально разбирался в исходниках очень сомнительного и старого плюсового кода. Всё бы ничего, но я выковыривал из него формулы расчета рисков. И обнаружил, что они неправильные. Хватание за грудки трейдеров не помогало понять, а как же правильно. Тогда пришлось разбираться. Теорию я знал. Теперь же, мне предстояло с помощью экселя и какой-то матери зареверсинжинирить вычисления, которые делала одобренная банком внутренняя библиотека с моделями и вычматами.
Это было офигенно интересно. После такого приключения я захотел ещё. И тут! Дойче решил делать бренд в университете. Кинули клич в поисках препов по финансовой математике. Я откликнулся. И это было лучшее мое решение! Лекцию я взял самую простую — про спот и линейные деривативы на валюту, временную стоимость денег. Зато я познакомился с крутыми людьми из совершенно разных подразделений банка. А в конце семестра мне нужно было принимать зачет, так что курс пришлось заботать целиком 😂.
Сегодня этот курс вы можете легко найти на просторах интернета. Хотя моей лекции (и семинара) там уже нет.
Короче, делал я продукт с горящими глазами и как мог помогал банку во всех его начинаниях.
👍1
Но меня несколько терзало, что я, очевидно, делаю работу, за которую людям рядом со мной платят в два раза больше. Я начал капать на мозг начальству. Они всё понимали и обещали сделать что смогут. А начальство у меня было ого-го! Не могу сказать, кто именно, но поверьте, люди ныне известные далеко за пределами не то, что ТехЦентра, но и Дойче Банка вообще. Но сделать они ничего не могли. Потому что "матричная система менеджмента", "твои менеджеры из Германии/Британии" и т.д. В общем, большие зарубежные боссы не разрешали даже уволить меня и взять следующим днем на новую позицию.
Я закончил магистратуру. Женился. Получил от оффер от Яндекса. Представляете, даже скупой (по крайней мере в то время) Яндекс предложил мне ощутимо бОльшую зп, чем я получал в Дойче. И это при том, что я собес прошел с большим скрипом.
Договорился разбить обычный адово длинный яндексовый собес на два. Оба в пятницу вечером. С одного пришли восторженные отзывы, а со второго резко негативные. Так что меня пригласили в субботу (типа на свежую голову) приехать на собеседование с "арбитром". Интересная практика, кстати.
В любом случае, позиция мне показалась скучной и я отказался (чтобы смотреть другие позиции, нужны были еще собесы — никакого желания их проходить у меня не было). Сидел я грустненький.

Через два с половиной года после начала моей работы в компании и три оценки Exceptional подряд (нет, это _реально_ очень круто) меня таки повысили до Associate. Со словами: вообще, за такой проект, как у тебя, обычно дают Assistant Vice President, но извини, за одно и то же, два раза не повышают. На мой вопрос: а что бы мне такого еще сделать? Внятного ответа я не услышал.
Я начал искать другое место работы.
👍1
Тем временем я угорел по распределенным системам настолько, что пошел в аспирантуру на кафедру информатики МФТИ. Я искал, с кем бы заняться этой темой по всем кафедрам ФИВТа, но, видно, не судьба. А ФУПМ принял меня с распростертыми объятиями. Ведь сразу несколько аспирантов постарше меня рекомендовали зав. кафу. Там и мой давний друг, помогавший решать домашку в учебный центр Неткрекера, и его сокомандник по ICPC, к которому я пару раз заходил на курс по алгоритмам, и очень крутой парень, с которым мы вместе учились в ШАДике. Короче, перехвалили, взял меня зав. каф. аж себе. И, так как он вычматист, заставил фигачить вычматы. Я что-то там пытался возбухать, но армия не дремлет, друзья.
Вступительные экзамены в аспу было сдать не трудно. Английский я зачел автоматом (у меня был диплом переводчика в сфере профессиональной коммуникации), философию я очень люблю (но сдал на все равно на хор), а на специальности я, по ощущениям, вообще знал больше всех (а знать надо было не много). У меня, конечно, была рекомендация от моего предыдущего научрука, но физика тут не котировалась, так что это вхолостую. Подводя итог: главное договориться с зав. кафом и найти научрука, остальное добавится.
Пока готовился к экзамену по специальности, пришлось ботать вычматы. Нашел в Дойче на кофепойнте бомбическую книжку для этого дела — Пирумов, Численные методы — рекомендую. Книга простая, без доказательств и лишней шелухи. Чисто идеи всех основных численных методов, чисто, чтобы понять суть. Всё, как я люблю.
Для отчета по НИРу я вяло кодил моделирование взаимодействия жидкостей с твердыми объектами методом sph. Да, оказывается, с его помощью можно не только игры рисовать, но и считать давление, температуру и прочие физические показатели так, что это вполне соответствует реальному положению вещей. В идеале надо было взять работу моего ШАДовского коллеги (там сеточный метод, Галёркин и красивые разрушения) и сшить его модель с sph на границе взаимодействия твердого тела с водой или "кашей". Это бы помогло лучше моделировать взаимодействие стальных опор нефтяных платформ в Арктике с айсбергами или что там у них ледяное плавает. Наука тоже работает в направлении денег, а вы думали?
В общем, я с грехом пополам научился моделировать водичку, которая плещется в стакане. Даже настоящую вязкость не добавил. Но на первый год прокатило.
А уже со второго года у меня началась пед. практика, так что меня не выгоняли из аспирантутры в основном за то, что я хороший преп. А преподавал я операционные системы осенью и объекто-ориентированное программирование весной. По факту же, мы занимались основами системного программирования под линукс, я рассказывал, что такое виртуальная память, прерывания, как устроены заголовки сетевых пакетов и т.п., а в конце семестра фачил бедных второкуров вопросами по тому, что рассказывал, до потери сознания. Потому они и что-то знали на выходе.
Весной я максимально лайтово учил кодить на Java в IntellijIdea и накликивать десктопные приложушки в UI дизайнере. У многих это снимало страх перед программированием. Кроме того, весной я заставлял всех работать в командах и делать "проекты" (читай курсовые). Обычно все делали игры, поэтому на зачете-презентации проектов мы просто занимались летсплеем. Это весело. Вот вам и хороший преп.
Пока преподавал всё это дело, естественно, и сам всё заботал. А чтобы было веселее изучать устройство памяти процесса (кучи и стека), я собирал уязвимые виртуалки и показывал на них всякие stack-smashing приколюшки. Заботал ту самую книжку "Программирование боевого софта под Linux", купленную аж на втором курсе и собственноручно кодил стенды с пасхалками, чтобы студенты по исходникам писали эксплойты. Например, при отправке специального ICMP пакета открывался баш на определенном порту, к которому можно было подцепиться обычным неткатом. За все время ни один студент не справился с этим заданием, не переживайте.
👍1
На курсах по финансовой математике, которые мы проводили в МГУ, я узнал про портфельную теорию Марковица. Сходил к лектору, который это рассказывал, и он мне круто объяснил, как это устроено в Дойче, какие еще у нас есть стратегии для портфелей. Я решил, что это мега тема для личных финансов и прошел на курсере специализацию портфельного управляющего от Rice University. Довольно интересно, но не слишком полезно, рекомендую только для удовлетворения любопытства. Примерно в это же время появился Финансовый автопилот. Я посмотрел на него и решил, что это невыносимый кал за кучу денег. Так родилась идея для стартапа!
Я решил, что надо запилить MVP, попользоваться самому, и, если понравится, попробовать попитчить это пиплу. Ничего не понимал в предпринимательстве. Не то, чтобы сейчас я стал понимать сильно больше.
А раз я менял работу, то решил пойти в стартапчик на, как я ожидал, не пыльную работёнку.
Прособесился в Chatfuel, но их не СТО, но кто там главный программист, меня реджектнул. Я даже расстроился, они мне очень понравились. На всякий случай сходил в одноклассники, где меня унижали сомнительными вопросами. И это после элементарнейшего первого этапа, дикий контраст. Получил ещё офферы от HFLabs и Револют. В Револют ушел мой друган по Неткрекеру, Дойче и Физтеху, а ещё там был прикольный СТО на собесе. В ХФ же был проект Сбера без доступов к проду, хотя чуваки тоже весёлые (зачем-то спросили меня на собесе как относятся множества непрерывных, непрерывно дифференцируемых и непрерывно интегрируемых функций). Так что выбрал я Револют.
Я ещё никогда так не ошибался.
Несмотря на опыт в трейдинге и рисках, меня почему-то отправили не в трежари, а пилить кредиты. С другой стороны — оказали доверие всё это задизайнить. СТО был приверженцем XP, TDD и DDD. С первыми двумя меня подружил еще мой начальник в Неткрекере, а вот про DDD пришлось почитать и поботать. Тексты, я вам скажу, мутнейшие, книжки огромные и наполнены водой. Но дорогу осилит идущий. Могу порекомендовать разве что блог Фаулера, но тоже с натяжечкой. Хороших мануалов у меня для вас нет.
В общем, задизайнил кредитов, покодил одно, потом другое, потом третье, первое мы выбросили, второе переписали заново, третье никак не получалось запустить из-за легальных ограничений (кредитов, оказывается знаете сколько видов!). Короче, работать надо было день и ночь. Очень "лайтово". Но самое жесткое для меня было то, что сразу после окончания дизайна нового субдомена, на 90% работа превращалась в написание CRUD-ов. Причем, внутренний фреймворк был идеален для этого бойлерплейта, думать не нужно было совсем. Сериализации в/из json _руками_, в/из jooq record руками, веб ручка со всеми валидациями, прописанными _вручную_ и 10 строк бизнес логики по обновлению состояний объектов в табличках внутри транзакции. Это настоящий enterprise, это настоящее DDD.
Развлекался я общением с мобильщиками. У них был постоянный движ, какие-то доклады про котлин, влажные мечты про kotlin native. Я с умным видом слушал и старался делать ценные замечания. Котлин классный.
В начале трудоустройства нужно было съездить в Лондон на три недели, познакомиться с командой. Хоть Лондон мне и не понравился, как потенциальный город для жизни, там очень круто быть туристом или в командировке. Кроме того, в Лондоне был весь бизнес движ. Наш ПО и бизнес девелопер брали меня на некоторые встречи, чтобы не играть в глухой телефон, да и в принципе мы много общались всей командой, пока я был там. Так я впервые получил представление о задачах бизнес девелопера. Это довольно интересно, интеллектуально и времязатратно.
1👍1
Как-то в феврале, когда я уже работал в Революте, нас с женой позвали на школу мобильной разработки в сочинский Сириус. Занятия надо было вести у школьников, которые выйграли какой-то контест. Мы и согласились. Она взялась за несколько лекций по криптографии, а я за лабораторки-семинары по Java.
Дорогу нам оплачивали, ехали мы на поезде, каком-то классном, где купе открывались по карточкам, внутри было все очень функционально от сидушек, то крючков для полотенец. Чистый душ, вкусный хавчик — красота. Еще и ехали вдвоем в купе. С поезда нас встретила машина и отвезла прям ко входу в отель при Сириусе. В общем, прибыли в прекрасном настроении.
А потом у меня была перманентная гонка — заранее я не подготовился, так что каждый день после занятий, я готовил следующее. В очередной раз пока рассказывал, выучил сам всякие новомодные штуки типа swagger. Погулять покайфовать у меня особо не получилось, но пока мы с другими препами ели и ездили в учебный корпус, довольно продуктивно общались. Например, вторую часть криптографии вел труъ-криптограф, который исследует сами алгоритмы, из профильной организации. Так что я у него выяснил ответы на все свои вопросы про телеграм, кузнечик и что там вообще у них такое происходит интересное.
Сириус это очень крутой проект. Там комфортно жить, приятно гулять и наверняка интересно учиться. В стильных учебных корпусах, по которым мы шли к своим аудиториям, я видел всякие навороченные (по школьным меркам) лаборатории, каких-то роботов, ультрафиолетовые камеры с растениями. И там действительно занимались дети — в стенках прозрачные окна и иногда внутри сидели товарищи в белых халатах и тех самых роботов шевелили с компов.
Если вдруг захотите позвать меня преподавать туда еще раз, то после пандемии я готов.
👍1
Однажды, я осознал, что недостаточно владею командной строкой linux и в целом не очень понимаю, как оно все там устроено. Старший товарищ посоветовал мне великолепную книгу Керниган, Пайк "The UNIX Programming Environment". Она есть в хорошем русском переводе (большая редкость!) и вы даже без труда найдете в интернете версию для ознакомления. Там описывается работа с ОС UNIX так, как задумывали создатели этой системы (авторы книги). Есть отсылки к истории и объяснения всяких названий и поведений по историческим причинам. Очень хорошо описана работа с sed и awk. Есть ещё раздел о программировании в среде (системные вызовы и иже с ними), но я эту часть не читал, рекомендовать не буду. Для продвинутого пользователя эта книга просто must read!
Продолжу свои мемуары

В Революте я ощущал, что мои знания и навыки используются от силы на 5%. Я сначала терпел и ждал. Потом очень удачно сотрудники HR начали собирать у нас фидбек о работе, и я очень развернуто пожаловался им. Потом я пробовал доносить свою обеспокоенность СТО. Но ничего не работало. Стартап должен деньги зарабатывать (на самом деле нет, только популярность), а не удовлетворять сотрудников. Я был не один такой и дискомфорт разработчиков копился, аккумулировался с недовольством некоторыми управленческими решениями внутри разработки, и это всё выливалось в постоянное нытье и некоторую токсичность в неформальных чатиках. А иногда и в официальных обще-организационных. Реакция менеджмента на это все была от вялой до пассивно-агрессивной.
Я вспоминал как кайфово было в трейдинге, где был перфоманс, всякие кастомные железки, а еще иногда можно было повтыкать в сложные формулы. Еще вспомнил, что были в нашем Дойче квант-девелоперы, которые кодили модельки. Там оптимизации были уже не только наши классические, бизнесовые, но и в выборе численных методов, а также в хитрых бизнес моментах, где можно срезать углы, что можно не пересчитывать, что можно считать не так точно и т.п. Захотелось заняться такими вещами. Тем более хотелось поглубже вникнуть в сам трейдинг и модели.
Встретился с бывшим начальником из Дойче. Я с ним и так встречался, но тут у меня еще и дополнительный повод появился. Спросил, нет ли у него такой работы (он стал уже совсем большой шишкой). Он попросил подождать, мол подумает.
Согласился пообщаться с тонной рекрутеров. Поделал всякие тестовые задания и попроходил собесы в кучу разных около трейдинговых контор от Кипра до Казахстана. Отказов нигде не получал. Но не нравились все локации. Кроме одной, меня пригласили на собес в Амстердам. Я с удовольствием поехал. Некоторые так даже бесплатно путешествуют, но я так не умею, это был пока единственный раз. Собесы я прошел.
Тем временем мне позвонил бывший начальник и объявил, что он перешел в другой банк, с маленьким инвестиционным подразделением, и предлагает мне пойти работать туда с ним, писать торговых роботов для опционов. Мы с ним неоднократно до этого обсуждали математические аспекты опционного прайсинга и рисков, так что я знал, что это будет интересно. Я согласился пообщаться с новой компанией. Техническое интерфью мне поставили через пару дней после этого разговора! Я говорил, что совершенно не готов (потому что это было еще до всех моих очных собесов, я только тестовые задания в несколько мест успел отправить). Но товарищ убедил меня, что я и так пройду. В итоге вся моя подготовка к собесу свелась к тому, что я посмотрел доклад будущего интервьюера с какой-то джуговской конференции, интересный!
С техническими вопросами на этом интервью мы разобрались минут за 15, а дальше были вопросы про бизнес, про торговлю в дойче, как она устроена. Естественно, я ничего толком не понимал, потому что до техцентра не снисходили такие детали, я знал только немного математики, механику рынков да термины. Это ж не револют, где я был в гуще событий! Но этого оказалось достаточно. Второе интервью, с командой, мне поставили уже после поездки в Амстердам.

В конечном счете я получил офферы из Амстердама и из конторы с бывшим начальником. Как мы с женой принимали решение — это отдельная история. Переезд в другую страну с полугодовалым ребенком дело страшное! Взвесив все за и против, я решил, что пойду в московский офис, потому что маленькая контора, никакого опционного кода еще нет — смогу лучше во всем разобраться. Так я и остался в Москве.
👍1
Главная мораль всех этих баек в том, что кумовство решает!