Я — разработчик серверных компонент со стажем в 10+ лет (C++, python). Не трейдер и не квант. Эта статья — результат моих годичных наблюденией, когда после 8 лет в больших IT‑корпорациях, я внезапно нырнул в HFT‑стартап с коллективом в сотню человек. Что в разнице подходов к разработке удивило меня сильнее всего?
Для начала, пара слов о рассматриваемых сторонах:

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

  • HFT (high frequency trading) — ниша технологических компаний, которые занимаются автоматической торговлей на биржах, и, исходя из определения, делают это с высокой частотой. Термин весьма неспецифичен, и задачи, подходы, статусы на рынках у таких компаний довольно разные. Однако, технические решения похожи — критическим фактором для успешности в области является скорость реакции на рыночные изменения. Скорость позволяет обходить конкурентов и хорошо конвертируется в деньги. В этой сфере есть несколько больших игроков, но и множество маленьких компаний вполне способы зарабатывать себе на безбедное существование (если верить их hr).

В целом, многие из моих наблюдений могут быть объяснены значимостью скорости ваших программ и частотой релизных циклов. Вы можете возразить, что скорость важна и в корпорациях. Не зря же они все эти деревья просят развернуть на собеседованиях да асимптотики спрашивают. А как же экономия на тысячах серверов и мегатонны выбросов CO2? Но я не соглашусь, так как везде, где я работал, более важными свойствами систем были надежность и универсальность, а потом уже оптимизация, если вам совсем нечего делать. Выделить 19 ядер на простой веб сервис с БД при нагрузке в 1 rps? Почему бы и нет, зато все надежно, реплицировано и защищено от отряда экскаваторщиков в поиске кабелей датацентра.

Итак, перечисляю основные тезисы и стараюсь не нарушить никакие NDA:

Лучшие решения - простые

Вроде бы, ничего нового и особо умного. «Все гениальное — просто», принцип Парето, Бритва Оккама и т. д. отлично согласуются с этим наблюдением. Но есть нюанс: многие вещи вокруг нас только внешне очень просты.

Например, есть у вас дата+время в текстовом потоке данных, и их надо распарсить. Большинство разработчиков обратятся к документации их любимых языков в поисках нужного модуля, подключат эту штуку и будут молодцами в 99% случаев. Один вызов для конвертации текста в нужную структуру и все готово, что может быть проще? Но если посмотреть, что происходит в этом модуле, то мы обнаружим работу с текущей локалью ОС, какие‑то непонятные виртуальные функции для работы с календарем, всевозможными форматами дат и еще невесть что. А у вас всегда один и тот же формат, данные всегда в одном порядке, и потом еще выяснится, что вам из даты нужны только месяц и день. Код, который делает ровно то, что нам от него надо, будет работать очевидно быстрее.

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

Больше велосипедов богу велосипедов

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

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

Отсутствие авторитета стандартов и подходов

Раньше я довольно наивно полагал, что умение писать высоконагруженные системы на C++ так или иначе пересекается с владением многопоточностью. Активно применял ее в своих проектах, изучал свойства модели памяти, семантики атомарных типов и т. д. А потом, в окружении с приличной нагрузкой и огромной важностью задержки, я встретил постулат «никакой многопоточности». Так как это сложно, делает код неочевидным и обладает известными накладными расходами. А накладные расходы, как мы уже заметили, это плохо. И тут я напомню, что некоторая синхронизация потоков также проросла в такие безобидные инструменты C++ как static и в некоторые умные указатели. И вот вы в 2023 перестаете смущаться использования сырых указателей, которые были избегаемы вами много лет. Ведь вы знаете, что делаете. Что может пойти не так?

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

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

Доступность не так уж и нужна

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

Для таких компаний репутационные потери от даунтаймов — это очень плохо, инвесторы такое не любят. Вот они и хотят, чтобы сервисы их компании были в работе все 100% времени. Но на разработку и поддержку подобных проектов, защиту от невозможных ситуаций и иные способы страховки разработчики тратят действительно много времени, которое они могли бы потратить на запуск чего‑то нового. Чего‑то, что принесет больше денег, чем защита от даунтайма на пару часов раз в несколько месяцев. Хотя, отсутствие этой защиты и сделает вашу работу несколько более нервной. Особенно во время дежурств.

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

Найм умер

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

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

Насколько для вас это проблема или преимущество — вопрос открытый.

Интересные ежедневные задачи

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

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

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

Что в итоге

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

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

Комментарии (23)


  1. Stas911
    00.00.0000 00:00
    +3

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


  1. Vadem
    00.00.0000 00:00
    +4

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


    1. bynull
      00.00.0000 00:00
      +8

      В FAANG-е как раз и платят больше, иначе он бы никому не нужон был бы фаанг этот ваш


      1. csharpreader
        00.00.0000 00:00
        +2

        Далеко не всегда.


        1. bynull
          00.00.0000 00:00
          +11

          Всегдее чем обычно


      1. Vadem
        00.00.0000 00:00

        В FAANGе платят больше чем в среднем по рынку, но далеко не топовую компенсацию. Для сравнения в Гугле сеньёру платят 351k$ в год:

        https://www.levels.fyi/companies/google/salaries/software-engineer/levels/l5

        Медиана по США 210k$:

        https://www.levels.fyi/t/software-engineer/levels/senior/locations/united-states

        А в Страйпе, например, уже 482k$ в год:

        https://www.levels.fyi/companies/stripe/salaries/software-engineer/levels/l3

        И это далеко не топ.


        1. bynull
          00.00.0000 00:00

          Дык страйп это и есть супер топ, один на миллион, который может платить больше чем гугл)). (Я хотел про страйп написать в прошлом сообщении потому что знал заранее, что его приплетете. Жду историй про скверу:) )

          Мне даже интересно, а какой стартап вы назовете топ тогда?


          1. Vadem
            00.00.0000 00:00

            На вскидку:

            https://www.levels.fyi/companies/snap/salaries/software-engineer/levels/l5

            https://www.levels.fyi/companies/netflix/salaries/software-engineer/levels/l5

            https://www.levels.fyi/companies/databricks/salaries/software-engineer/levels/l5

            Это из того, что я на levels.fyi за 5 минут нашёл.

            Но вы конечно и про эти компании хотели написать, так как знали заранее, что я их "приплету" :))

            А вообще топ постоянно меняется. Из последнего что я слышал, например, сейчас много платит OpenAI и HFT стартапы как раз. Но далеко не у всех есть достаточно данных на levels.fyi.

            И самое интересное, что из FAANGа как правило уходят на одну-две позиции выше.


            1. bynull
              00.00.0000 00:00
              +1

              в какой момент Netflix стал стартапом? ????

              Тогда гугл тоже назовем стартапом и покончим с этим вопросом)


              1. Vadem
                00.00.0000 00:00

                Речь шла про зарплаты. Про стартапы это уже вы придумали непонятно к чему.


                1. bynull
                  00.00.0000 00:00

                  FAANG, буква N означает NETFLIX :)

                  В нетфликсе платят больше чем в нетфликске! - рекурсивное доказательство у вас какое-то получается


                  1. Vadem
                    00.00.0000 00:00

                    Да. Тут я не прав. Забыл, что нетфликс входит в фаанг.

                    Но это всё равно не отменяет того факта, что в остальных 4 компаниях ЗП далеко не топовая. Особенно учитывая размеры этих компаний. Нетфликс это всего 11000 человек. В одном только гугле примерно 180000.


  1. csharpreader
    00.00.0000 00:00
    +3

    В представлении многих разработчиков это последняя инстанция

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

    (пишу совершенно беззлобно, просто искренне удивлён такой публикацией в 2023-м году)


    1. MrBlazerer Автор
      00.00.0000 00:00
      +1

      Находясь внутри этих китов, время течет немного медленее:)
      Ну и выборка мнений там смещеннее


  1. VladimirFarshatov
    00.00.0000 00:00
    +3

    Подпишусь под каждой строчкой статьи. Спасибо! Часто и даже очень часто, и более того, все чаще и чаще, встречаешься с ситуацией "кровавого энтерпрайз", где требования сверхнадежности просто убивают продукт, например: "146% работоспособность в ущерб времени отклика web-сайта до 10-30секунд".. Повальное применение сторонних решений, доходящее до HR-требования, типа "программист-разработчик не должен смотреть в код стороннего пакета, но должен уметь применять их легко и быстро" .. видел и такое уже.

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

    Сам, "старый велосипедист" с 1979года в ИТ, со вьевшимся в пальцы пониманием термина "стоимость команды процессора". Совершенно не нужное и вредное свойство для любого HR.


  1. megamrmax
    00.00.0000 00:00
    +1

    Большая ФААНГа это в первую очередь интриги мадридского двора, а уж потом все остальное


  1. sva89
    00.00.0000 00:00

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


    1. bynull
      00.00.0000 00:00
      +1

      5 мелких собеседований по 45 минут в виде одного конского, всё по-классике - алгоритмы, бехэйвиор, дизайн. Ты встречаешься с случайными людьми которым плевать на тебя, на хайринг, на их компанию, им нужно заработать очков чтобы не вылететь с работы. За это время на тебя смотрят то как на дурачка то как на идиота. После всего этого так сказать "купания" тебе выносят вердикт.
      Чтобы пройти надо наплевать на технические навыки а год-два потратить на насилование leetcode.
      Вот и вся романтика


      1. sva89
        00.00.0000 00:00
        +1

        Я так понимаю это про фаанг? Я бы про HFT и около послушал.


        1. shybovycha
          00.00.0000 00:00

          все то же самое, только не так сильно сношают на алгоритмах и структурах данных


  1. VFaland
    00.00.0000 00:00

    Как резидента ФААНГа тоже волнует вопрос "куда дальше", и вот переход в области где "высокий порог вхождения в отличие от" итп вообще непонятен. Ну вот работал ты в ФААНГе, ни разу не в финансах и трейдинге, и тут хочешь устроится в HFT (больше денег богу денег!). Ну и на собеседовании они от тебя хотят кучи специфических вещей которых ты не работая в HFT не знаешь. Как раз таки с ФААНГами все понятно, литкод +книги/видео по систем дизайну + любой опыт разработки, не нужно никаких сакральных знаний и умений, или там 10 лет опыта в новейшем фреймворке и тысячи звездочек в гитхабе.

    Специфики не хватило, что конкретно ценят в HFT чтобы разработчик без опыта в HFT мог войти в отрасль не джуном.


    1. shybovycha
      00.00.0000 00:00

      по моему опыту - ценится не столько опыт в конкретно HFT, сколько скиллы и опыт в целом


    1. MrBlazerer Автор
      00.00.0000 00:00

      Тоже будут секции с кодом, но более вероятно встретить вопросы про
      * конкретный язык, под который ищут разработчика
      * системное программирование и сети
      * дизайн сервисов (но это и у корпораций есть)

      Похоже на собеседования в до-фаанговскую эру:)