softmax: AI/IT in London
285 subscribers
1 photo
2 videos
6 links
Я Макс, ML/AI инженер в Isomorphic Labs 🧬 | Spotify 🎧. Недавно переехал в Лондон из Мюнхена

Здесь про:
- будни в ML и AI
- поиск работы и иммиграцию
- путешествия и прочее смежное

Disclaimer: all views are my own. Only publicly available information.
Download Telegram
Немного о себе 👋

Я Макс, ML/AI-инженер в Isomorphic Labs (стартап, отделившийся от Google DeepMind, чтобы сосредоточитьсяна фолдинге протеинов). До этого работал в Spotify, перед этим — в Bosch. В сумме набежало >7 лет опыта в индустрии, хотя как-то не чувствуется.

➜ В 2015-м году я поступил в магистратуру университета Штутгарта и переехал в Германию. Большую часть магистратуры я учил компьютерную графику и мечтал работать в геймдеве. В конце программы я «запивотил» в Machine Learning. Магистерский тезис я написал в Bosch и вдогонку провел там первые 3 года своей карьеры.

➜ В Bosch я работал Research Engineer в группе, которая занималась Reinforcement Learning. Мне повезло работать с невероятно талантливыми людьми над очень интересными и довольно «неклассическими» проектами. Мы юзали RL, чтобы оптимизировать ABS-контроллер в машине, учили контроллеры для MagLev-платформ и оптимизировали продакшн-планы на фабриках.

➜ В Spotify я был Machine Learning Engineer. Первый год работал над довольно стандартной рекомендательной системой. ML там, конечно, был не из последних публикаций на NeurIPS, но весь интерес был в скейле и количестве реквестов/инференсов в секунду. Позже девелопил «бандитов», чтобы эффективно эксплорить весь новый публикуемый контент, а последний год препарировал и файнтюнил внутренние LLM-ки.

➜ В прошлом году, спустя 10 лет, я получил гражданство Германии и первым делом переехал в Лондон, чтоб фолдить протеины в Isomorphic Labs.

#карьера@softmaxFn
8🔥7
Гайд по поиску квартиры в Лондоне (от человека с PTSD из Германии) 🏠

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

➜ Рынок съемного жилья тут намного более ликвидный. Город огромный, и каждый день на рынок выкидываютдостаточно много новых предложений. Однако улетают эти квартиры тоже довольно быстро. Здесь, в отличие от Германии, большинство квартир сдается риэлторскими компаниями. И в то время как в Германии частные лендлорды любят устраивать интервью-процесс с несколькими раундами и ребатлами, в Лондоне процесс предпочитают не затягивать и выбирают из первых кандидатов. Поэтому очень важно назначить просмотр в первые дни после того, как квартиру выложили, и одними из первых сделать «оффер».

Про-типс:

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

🔸 Не бойтесь говорить, что «вы готовы сделать оффер» на просмотре квартиры. До того как вы внесете reservation deposit, вы ни к чему не обязаны. Но если вы скажете агенту, что вам нужно пару дней подумать, квартиру, скорее всего, уже сдадут.

🔸 Если вы уже посмотрели одну или несколько квартир в доме, который вам нравится, можете спросить у агента, есть ли у них похожие квартиры, которые вы можете «take off the market». Это когда вы заключаете контракт, не видя квартиру вживую (максимум план и несколько фоток). Довольно рисковый мув, но может быть оправдан, если снимать квартиру у большой компании с хорошими отзывами в доме, который вы видели до этого.

➜ Когда вы внесли reservation deposit, следующий шаг — это referencing. Риэлторская компания передает ваши документы в отдельную компанию на проверку вашего бэкграунда. Если это ваша не первая квартира в ЮК и у вас стабильная работа в большой компании, то переживать, в принципе, не о чем. Если вы только переехали, может быть довольно хардкорно. Процесс всегда разный в зависимости от того, на какую referencing-компанию вы попадете. Если повезет — процесс может завершиться с минимальным эффортом с вашей стороны: скинуть рабочий контракт, пару выписок из банка и все. Если не повезет, можете попасть по полной. Вам могут две недели еб*ть мозги, требуя все возможные и невозможные документы и даже требуя, чтобы ваш бывший лэндлорд и текущий работодатель заполняли для них какие-то формы. Как вы поняли, у нас был второй вариант.

Про-типс:

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

🔸 Если планируете переезд в ЮК заранее, постарайтесь остаться в хороших отношениях с прошлым лэндлордом в другой стране. Может случиться так, что вам нужно будет уламывать их заполнить для вас какую-то форму от сторонней компании из ЮК.

🔸 Если вы оказались в ситуации, где referencing-компания требует от вас неисполнимого — например, заставить немецкую компанию, у которой вы снимали прошлое жилье, наплевать на GDPR и передать данные о своих клиентах какой-то мутной компании из ЮК, — старайтесь давить на компанию риэлтора. Да, по идее, referencing — это ваша проблема и депозит вы уже заплатили, но для них, если эта сделка сорвется, это все равно дополнительные расходы и риски. В нашем случае все решилось после того, как я поговорил с менеджером в риелторской компании и объяснил ему ситуацию. После этого они позвонили в referencing-компанию и сказали им «сделать исключение».

#жизнь_юк@softmaxFn
👍41
Прикладная статистика 📈

Если честно признаться, я «не то чтобы очень силен» в статистике. У меня есть хорошее интуитивное понимание линейной алгебры и анализа, но вот любые intermediate и выше концепты в статистике мне даются довольно сложно. Но я активно работаю над тем, чтобы эту ситуацию улучшить. Сегодня как раз подвернулась возможность копнуть поглубже в один из концептов.


Ситуация: У вас есть эксперимент, который вы можете ранать в энвайронменте А и в энвайронменте Б. Идея в том, что А и Б должны быть идентичными, но, несмотря на идентичные входные данные, эксперимент возвращает более низкие метрики в Б. Энвайронмент А будут деприкейтить, и ваша задача — понять, почему Б перформит хуже.

Еще одно усложнение в том, что в А эксперимент может ранаться на TPU и на GPU, а в Б — только на GPU. В результате у вас есть 3 рана для анализа:

1. Энв А с TPU
2. Энв А с GPU
3. Энв Б с GPU

Все три рана показывают разные метрики для тех же входных данных. Ран 1 считается текущим бейслайном, то есть возвращает самые высокие метрики. Но после деприкации А единственная возможность, которая у нас останется, — это 3. Имея эти три рана, нам нужно решить: стоит ли тратить свое время на то, чтобы дебажить разницу в энвайронментах?
Другими словами, нам нужно понять, насколько сильно разница между 1 и 3 объяснена разницей в чипах, а насколько — разницей в А и Б. Если главный контрибьютор — это чипы, тратить пару недель на то, чтобы избавиться от минимальной разницы в энвайронментах, — это довольно плохой инвестмент нашего времени. К счастью, в статистике есть «just the right tool for this job». Мы можем использовать ран 2, чтобы ответить на этот вопрос.

На помощь спешит линейная регрессия. Основная идея в том, чтобы зафитить 1d линейную модель: Y=αX+β. Инпутами (X) будут разницы между метриками 2 и 1, а таргетами (Y) — разницы между 3 и 1.

Дальше считаем R2 скор. Если R2≤0.5: мы не знаем, влияет ли энвайронмент и как сильно — делать нечего, нужно дебажить. Если R2≥0.8, то большая часть разницы, скорее всего, объяснена чипами. Это нам не особо помогает, так как TPU в Б нет, поэтому идем дальше и смотрим на α и β зафитиной модели. Если α>1, это значит, что разница в энвайронментах усиливает разницу, которая уже есть от чипов. Соответственно, если мы хотим уменьшить максимальную разницу в аутлайерах — идем дебажить. Если α≤1, разница в энвайронментах либо не влияет на финальную разницу между 1 и 3, либо ее демпфит (нам очень повезло). β — это фиксированная разница, которую добавляет энвайронмент. Если β намного больше 0, то можно подумать о том, чтобы потратить пару дней, если нет — то справились 😄.

Все это можно посчитать в пару строк, используя библиотеку sklearn в Python.

#мл@softmaxFn
#тех@softmaxFn
Мюнхен vs Лондон глазами велосипедиста 🚴‍♂️

Мюнхен — это один из лучших городов в мире для комьюта на велосипеде. Инфраструктура уровня Амстердама, но совсем не такие толпы. А чего только стоит велосипедный «автобан» понад альпийской речкой Изар… В общем, неудивительно, что у меня, как у многих мюнхенцев, большая часть net worth была инвестирована в алюминий (ну или карбон) с двумя колесами 😀.

При переезде в Лондон встал вопрос: что делать с байком? Нужен ли он там вообще и стоит ли везти мой?
Я посмотрел видео пары ютуберов из Лондона, которые пели дифирамбы велосипедной инфраструктуре, и решил, что байк мне обязательно нужен. Единственное, что я не учел, — это то, что эти ютуберы были родом из США 😅. Понятное дело, что для тех, кто жил в США (за исключением, может, Нью-Йорка и Бостона), любое количество асфальта, где можно ехать на велосипеде и не бояться, что в тебя въедет 5-тонный пикап на скорости «50 бургеров / 10 североамериканских орлов», — это высококлассная велоинфраструктура. Если сравнивать же с Германией, то лондонская инфраструктура — это 3 из 5 с большой натяжкой.

Главная проблема — это очень маленькое количество дорог с отдельной выделенной или защищенной велодорожкой. Большую часть времени вы делите и без того узкую дорогу с машинами и, что более страшно, — с двухэтажными автобусами! Узкие дороги научили водителей Лондона, что 10 сантиметров между головой велосипедиста и зеркалом заднего вида — это вполне достаточный safety margin 👌. Моя коллега как-то спорила со мной, что велокомьют в Лондоне — это абсолютно безопасное занятие, приведя аргумент: «За 8 лет меня всего два раза сбил автобус». Это как бы на 2 раза больше, чем хотелось бы 😅.
Картину также довольно часто ухудшает влажная погода. Если у вас в офисе нет места, где повесить сушить вымокший хардшелл или где хранить запасную сухую одежду, полагаться на велосипед как на основное средство комьюта — не самая лучшая идея.

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

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

#жизнь_юк@softmaxFn
👍6
Первые 3 месяца в Isomorphic Labs 🧬

Прошло больше 3 месяцев в Isomorphic Labs, я прошел пробный период, а значит, пора бы уложить в своей голове первые впечатления…

Оверолл, Iso — это офигенная компания, и я нереально рад, что смог сюда попасть. Даже если быть полным скептиком и не верить в то, что своей работой ты делаешь маленькие контрибьюшены на пути к “solve all diseases”, — мне все еще очень «доставляет» сам сет проблем, над которыми мы работаем. Вообще немного странно, так как в школе биология и химия были моими самыми нелюбимыми предметами. Не знаю, может, к любой дисциплине нужно просто прийти в «свое время», но сейчас сидеть и разбираться, что такое протеины, из чего они состоят, как фолдятся, — звучит как очень веселое времяпрепровождение.

Еще один определенный бенефит работы в Iso — это сумасшедше умные и талантливые люди, с которыми ты работаешь. Помогает также то, что в Iso очень живая и бурлящая атмосфера в офисе. Офис маленький, почти все приходят минимум 3 раза в неделю, и от этого кухня и кафетерии выглядят как общие комнаты в каких-нибудь университетских холлах: все постоянно что-то друг другу рассказывают, делятся последними ресерч-результатами, показывают графики и т. д. Такая атмосфера очень заряжает, ну и способствует очень быстрому расширению круга знакомств.

Есть у Iso еще один позитивный момент, который мне не так легко артикулировать. Большинство всех топ AI-лабораторий работают над general моделями и пытаются решить “Artificial General Intelligence”. Iso тоже недавно расширили свою миссию до “Solve all diseases”, но даже сейчас это чувствуется как более направленный, сфокусированный эффорт. И то, над чем ты работаешь каждый день, каждый небольшой импрувмент в модель или в трейнинг/инференс инфраструктуру намного легче, как мне кажется, законнектить с лонг-терм целью.

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

#карьера@softmaxFn
🔥9
Кто такие ML/AI инженеры и чем они вообще занимаются 🧑‍💻🤖

Из моих наблюдений за 7 лет, всех людей, работающих над ML, в зависимости от их фокуса, можно условно разместить внутри треугольника с вершинами: Research, Software Engineering, Data.


➜ Люди, которые находятся ближе к вершине ML Research, в основном работают над улучшениями моделей. Day-to-day они твикают код модели и тренировочного цикла и ранают эксперименты, чтоб GPU всегда делали brrrrr 🔥. Анализируют полученные данные, решают, какие метрики трекать, думают над гипотезами для новых экспериментов — и всё по кругу.

Кор-квалификации:
🔹 Возможно, немного неожиданно — Scientific Method. Это умение правильно сформулировать гипотезу, задизайнить эксперимент, проанализировать наблюдения и результаты. Это базовые вещи. У меня на самом деле довольно много времени заняло, чтобы понять и заартикулировать для себя, что так выделяет топ-людей, сфокусированных на ресерче. Мой ассампшн — что это именно осознанное применение scientific method.

🔹 Матчасть: линейная алгебра, математический анализ, статистика, оптимизационная теория. Не нужно быть экспертом в каждой дисциплине, но если вы интуитивно понимаете базовые концепты — это очень помогает.

🔹 Техстек: Python, любой autograd/NN фреймворк, Pandas/SQL для анализа табличных данных.


➜ Ближе к Software вершине мы можем встретить людей, которые работают над написанием фреймворков для массивных распред. вычислений, оптимизацией и скейлингом тренировочных циклов, инференсом с низким лейтенси и инфраструктурой. Если обобщить, тут люди большую часть своего времени проводят над крафтом «тулзов», чтоб другие могли гонять как можно больше экспериментов за меньшие 💸, или работают над интеграцией моделей с другими системами компании.

Кор-квалификации:
🔹 Сильный бэкграунд в Software, предпочтительней Backend/Systems. Есть также очень нишевые позиции с не менее нишевыми скиллами — низкоуровневое программирование акселераторов (GPU/TPU).

🔹 Техстек: as wide as it gets. На самом деле даже перечислять, наверное, не имеет большого смысла, но базовые вещи: Python, Docker/Kubernetes, SQL/NoSQL. Иногда C++ и CUDA, иногда Java или Go, если вдруг нужно будет писать немного бэкенда.


➜ Data. Люди, которые находятся ближе к этой вершине, работают над пайплайнами, которые агрегируют, чистят и процессит MASSIVE data. Также тут занимаются оркестрацией и релайабилити этих пайплайнов, чтоб данные всегда были свежими, как булочки в немецкой бэккерай.

🔹 Тут я заметил еще больше людей с бэкграундом в Backend, которые решили сфокусироваться на Data-стороне. Но есть и люди, которые изначально фокусировались на distributed data processing. В некоторых компаниях, например в Spotify, это даже вынесено в отдельную роль.

🔹 Техстек: Python, Java, SQL, какой-нибудь mapReduce фреймворк, например Spark или Apache Beam. Для оркестрации — что-то вроде Flyte или Airflow.


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

#карьера@softmaxFn
6👍2
Гейткипинг в IT ⛔️

Я тут вспомнил, как почти год назад проходил интервью Meta на Staff MLE, и решил вам поныть про гейткипинг.

Вначале небольшое отступление для тех, кто не сталкивался с IT/ML-интервью и их недостатками. Даже несмотря на 5–6 раундов, которые по идее должны уменьшать нойз и влияние одного неудачного интервью, из-за количества аппликантов во многих больших компаниях даже один негативный фидбэк равен «удачи в следующем году». Это значит, что каждый интервьюер по сути может зафейлить вам весь процесс. И, к сожалению, случается так, что интервьюеры ведут себя нерационально ну или просто гейткипят кандидатов.

В Meta на Staff MLE процесс довольно типичный. Не считая первого созвона с рекрутером, всего 5 раундов: 3 раунда LeetCode по две медиум-задачи каждый раунд и 2 раунда ML-дизайна. Для Staff-позиции дизайн-интервью включают секцию с 2 вопросами о leadership and cross-functional collaboration (xfn) и непосредственно сам систем-дизайн.

По окончании всех этапов я был более-менее уверен в двух дизайн-интервью и сильно сомневался в LeetCode: 6 задач как-никак, мало ли где натупил. Забавно, что фидбэк оказался диаметрально противоположным.

Рекрутер начала с того, что у меня очень сильные кодинг-интервью, но вот по дизайну и leadership and xfn фидбэк смешанный. Я был немного удивлен и приготовился внимательно слушать. Начала она с того, что первый интервьюер сказал, что я не показал «достаточную глубину». Хорошо, что разговор был по телефону, потому что мое лицо выглядело примерно так: 🤨. Для контекста: на этом интервью я в Excalidraw писал формулы cross entropy, потому что интервьюер делал вид, что он «не понимает», что я имею в виду под multi-label и multiclass cross entropy. Это я собственно и обрисовал рекрутеру и вполне серьезно спросил: «Какой же глубины тогда искал интервьюер?» На что рекрутер начала отвечать что-то не особо внятное и даже немного забавное в стиле: «Ну нет, проблема как бы не в том, что у вас нет достаточной глубины знаний… а в том, что вы как бы сами не спустились на эту глубину, а интервьюеру нужно было вас туда за руку отвести». Я, как пел классик, «потихоньку начинаю въезжать…»

Ну ладно, думаю я, давайте послушаем, что там было не так со вторым дизайн-интервью. «Во втором интервью, — начала рекрутер, — дизайн и техсторона были очень сильными, но вот с leadership и xfn немного есть проблемы». Сижу молча, жду деталей. «Главная проблема в том, что вы совсем не продемонстрировали, как вы менторите джуниор-коллег…» 🫤 Опять — спасибо огромное, что разговор по телефону, потому что моя кабина держать pokerface была уже не в состоянии. Дело в том, что на этом интервью у меня спросили два вопроса: как я доношу информацию нетехническим стейкхолдерам и как я приоритизирую задачи в роадмапе. Нужно ли мне было начинать каждое интервью с «Здравствуйте, меня зовут Макс, и я отлично менторю джуниор-коллег», я у рекрутера решил уже не спрашивать 😅

По итогу предложение Меты было: «Мы принимаем тебя в совет, но не даем звание магистра». То есть мне дали оффер на Senior, который я вежливо не принял.

Еще хотел бы пояснить: в Meta работает огромное количество выдающихся инженеров, и планка действительно высокая. Я не считаю себя «top of the pack» и обычно спокойно принимаю негативный фидбэк, пытаясь извлечь из него наиболее конструктивные экшн-поинты. Но в данном конкретном случае меня не покидает ощущение, что вначале было принято решение задаунгрейдить меня до Senior, а потом уже фидбэк зарэтрофитили, чтобы «история сошлась». Поэтому я и назвал это гейткипингом.

Были ли у вас ситуации, где вы чувствовали, что вас откровенно гейткипят? Пишите в комментах — выговариваться помогает 😀

#карьера@softmaxFn
😱76
softmax: AI/IT in London pinned «Кто такие ML/AI инженеры и чем они вообще занимаются 🧑‍💻🤖 Из моих наблюдений за 7 лет, всех людей, работающих над ML, в зависимости от их фокуса, можно условно разместить внутри треугольника с вершинами: Research, Software Engineering, Data. ➜ Люди, которые…»
Vacation time 🛫🏔️🏂

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

У меня есть к вам вопрос — кому-нибудь тут будут интересны периодические посты про сноубординг, горы, путешествия в целом:

👍 - да, почему бы и нет
👎 - нет, спасибо, мамкин трэвел-блогер.

Вы катаетесь на доске/лыжах? Любите горы зимой? Хотите попробовать? Пишите в комментах.

#путешествия@softmaxFn
👍203
LeetCode rollercoaster 🎢

Сидел тут, вспоминал про то, как первый раз решил податься в «бигтех» и про сопутствующий этому LeetCode-грайнд, и решил написать пару своих смешных наблюдений.

Я надеюсь, все понимают: LeetCode (LC) не определяет ни ваш интеллект, ни ваш скилл как девелопера. С LeetCode страглят все. Даже топ-талантам в индустрии он не дается легко. Это классическая numbers game — то, насколько ты хорош, определяется только тем, сколько ты практиковался. Поэтому LeetCode — это как инвестиции: тут главное не интеллект, а дисциплина и mental resilience. Главное — не сдаваться, верить в результат и прилежно грайндить.

За несколько своих LeetCode «кампаний» и из опыта друзей, которым я помогал, я понял, что весь путь до заветных 100 задач можно разделить на 3 сегмента. И самое интересное, что самый тяжелый — это не первый.

Если вы никогда не гриндили LC, первые 20–30 задач даются для менталки не так уж тяжело. Это такой себе honeymoon период. Вы всё еще в beginner mode, не требуете от себя многого, все задачи еще кажутся довольно новыми, и вы сосредоточены на усвоении знаний, а не на результате.

По моим ощущениям, 30–70 задач — вот это где начинается трэш и настоящее испытание вашей мотивации. Я называю его «Долина Сомнений». Именно тут начинаются ситуации, где вы уже вроде как видели похожие задачи, но всё еще страглите с каждой второй. Именно тут начинают в голову лезть мысли: «Я тупой. Это не для меня. Какой вообще в этом смысл? Каков смысл в моей жизни?» и т. д. Тут главное помнить, что так у всех! Не зацикливаться на том, что даже похожие задачи не решаются, не тратить время на overanalyzing каждой не получившейся. Нужно просто пушить вперед: step by step, task by task.

70–100 задач — это отрезок «просветления». Вы начинаете видеть паттерны, вы набили руку на базовых алгоритмах и можете на автомате закодить структуру BFS/DFS, а потом адаптировать ее под конкретную задачу. Где-то в этом периоде, как говорил один мудрый человек, вам «этот мир стал абсолютно понятен» 😅.

Из моего опыта, после 100 задач начинается diminishing returns. Из каждого потраченного часа пользы выходит всё меньше. На этом этапе я бы уже советовал фокусироваться больше на других факторах, усложняющих настоящее интервью: стресс и общение с реальным человеком. Больше всего с этим помогают, конечно, мок-интервью.

Дисклеймер: если вы сомневаетесь, стоит ли грайндить LeetCode или нет, пожалуйста, не воспринимайте этот пост как аргумент «за!». Я заметил, что по индустрии структура тех-интервью начинает потихоньку меняться. И хоть для бигтех-интервью процесс всё еще включает LC в 99% случаев, в будущем (возможно, недалеком) этот скилл, вполне вероятно, может стать менее ценным. Стоит ли инвестировать в него время — это только ваше решение.


А вы грайндили LeetCode? Какие стратегии вам помогают?

#карьера@softmaxFn
👍125
This media is not supported in your browser
VIEW IN TELEGRAM
Полезные советы от сезонного сноубордиста. Часть 1: Даты 🗓️

Если собираетесь кататься на доске или лыжах в Австрии или Швейцарии — запомните эти даты: 12–20 февраля. В этот период жители южной Германии и половины Нидерландов совершают свое ежегодное паломничество в Альпы. Причина — удлиненные выходные после праздника Fasching и последующие зимние школьные каникулы.

За ночь с 11 на 12 количество людей на больших курортах увеличивается в ~5 раз, а очереди на подъемниках — раз в 10. Условия на трассах ухудшаются в соответствующих пропорциях. Еще до обеда уже можно встретить метровые бампы и снег разбитый в «жидкий лед», предлагаемый в барах как освежительный напиток 🥃.

#путешествия@softmaxFn
4👀2❤‍🔥1🥰1😨1
🧑‍💻 Тейк-хоум задачи в интервью процессах

Я заметил, что в Лондоне довольно много IT-компаний — от стартапов до крупных банков — вместо LeetCode-раунда дают задачу «на дом» с последующим ее обсуждением.

Задачи довольно сильно варьируются по интересности и сложности.
Чаще всего дают темплейт простого CRUD-сервиса, где нужно заимплементить недостающие эндпоинты. Но встречаются и довольно интересные таски — например, где нужно писать эффективный процессинг большого датасета (что-то вроде One Billion Rows Challenge, только проще и меньше 😅).

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

#карьера@softmaxFn
🌿 Sapling (часть 1)

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

Начнем с плюсов: Главный сэллинг-поинт Sapling — это упрощение работы со stacked PRs. У меня есть две любимые фичи. Первая — это то, что он по дефолту переносит весь твой стэк во время ребейса. В ванильном гите (до версии 2.38), если у тебя есть две ветки, одна поверх другой, и ты хочешь все перенести на новый main, тебе нужно было делать два ребейса: сначала нижнюю ветку на main, потом верхнюю на новую нижнюю. В Sapling это одна команда.

P.S. Как оказалось, в новых версиях Гита это тоже можно делать с флагом --update-refs при ребейсе 🤦‍♂️. Вот как иногда полезно писать в ТГ-канал, без этого и дальше бы ребейсил мануально, как бумер.

Вторая power-фича Sapling — это его «волшебная» команда absorb. Представьте: стандартная ситуация — вы открыли stacked PR и получили реквесты на изменения к каждому. Тут начинается большой головняк. Вам нужно зачекаутить нижнюю ветку, залить туда изменения, потом зачекаутить верхнюю, залить изменения в нее, заребейсить на нижнюю с последующим форс-пушем (и боже упаси, если еще и веток больше чем две). Sapling пытается вас избавить от этой участи. Вы можете написать все свои изменения в верхней ветке и потом выполнить волшебную команду sl absorb. Sapling постарается распределить все ваши изменения по нужным веткам сам. После этого одной командой sl pr submit вы сможете заапдейтить все свои PR (Sapling выполнит все форс-пуши за вас).

Когда это работает out of the box, ощущается как магия. Но ключевое слово здесь — «когда» 😀. Про это и другие минусы — в следующем посте.

А что вы юзаете для source code control?

#тех@softmaxFn
3👍1