С учетом комментариев, сделал расчет зп в месяц на руки (после оплаты налогов). Также сделал зум на первых годах карьеры, до переезда. Учить многопоточность я начал в 2014. Учить алгоритмы и system design я начал в 2015.
👍162👎1
Сколько выходцев из СНГ работает в FAANG/Big Tech компаниях?

Я работал в двух FAANG компаниях. Работал в Европейских офисах и неоднократно бывал в командировках в офисах США, а также постоянно взаимодействую с коллегами из разных офисов. Моя личная оценка, что в Европейских офисах выходцев из СНГ работает 10-20% на инженерных позициях. В офисах США немного меньше (5-10%) . В целом можно сделать оценку в 10% от общего числа программистов.

А сколько это в абсолютных числах?
Для этого нужно ответить на вопрос, сколько программистов в FAANG/Big Tech компаниях. Я проделал такую оценку на основе профилей в Linkedin.
Я разделил FAANG/Big Tech компании на 3 уровня, в зависимости от сложности собеседования и уровня компенсации. Tier 1 - туда сложнее всего попасть и самые высокие зп. В подборку я включил 11 компаний.

Для каждой компании приведены 3 цифры: число профилей на Linkedin, число программистов, оценка числа выходцев из СНГ. Например, Google: 287k/80k/8k - в Google работает 287k человек, из них 80k программисты, и моя оценка числа выходцев из СНГ. Или Amazon: 736k/112k/11.2k. В Amazon работает больше людей (1.5M), но половина из них не имеет профилей на Linkedin, т.к. это, в основном, рабочие складов, доставщики и т.д. Программистов всего - 112k (когда я там работал их было 100k, после был сильный рост, после были массовые сокращения). Я не уверен на 100% в этой цифре, но она дает правильный порядок величины.

Tier 1:
Google: 287k/80k/8k
Facebook: 119k/32k/3.2k
Netflix: 15k/2.5k/0.25k
Two Sigma: 2.2k/0.7k/0.07k

Всего программистов: 115k/СНГ(оценка): 11.5k

Tier 2:
Amazon: 736k/112k/11.2k
Apple: 172k/36k/3.6k
Uber: 97k/8.2k/0.8k
Lyft: 23k/1.7k/0.17k
Citadel:4.4k/0.8k/0.08k
Jane Street: 2.2k/0.5k/0.05k

Всего программистов: 159.2k/СНГ(оценка): 15.9k

Tier 3:
Microsoft: 228k/102k/10.2k

Итого:
Всего программистов (FAANG/Big Tech): 376k/СНГ(оценка): 37.6k
Т.е. по моим оценкам в топ-IT компаниях работает ~400k программистов, из них примерно 40k программистов - выходцы из СНГ. В основном, это выходцы из России, Украины, Казахстана и Белоруссии. Но представлены все страны.
👍13
Распределение по уровням в FAANG

В FAANG компаниях уровни разработчиков не ограничиваются Junior, Middle, Senior. Обычно их 6-7 уровней. Иногда даже больше. В некоторых компаниях у вас даже не меняется тайтл при смене уровня. В Facebook, например, все разработчики имеют тайтл Software Engineer, и их уровень скрыт. Этот уровень знают только их менеджеры. При этом там 7 уровней разработчиков от E3 до E9. Компенсация при этом меняется от ~$100k-150k на E3 до ~$2M-3M на E9 в год гросс.
В Amazon есть тайтлы и уровни: SDE 1 (L4), SDE 2(L5), SDE 3/Senior Software Engineer (L6), Principal (L7), Senior Principal (L8), Distinguished (L9). Т.е. в Амазоне 6 уровней. Из-за того, что они нарезаны более крупно, то они часто не соответствуют уровням и тайтлам в других компаниях. Например, SDE 1(L4) соответствуют и Junior и Middle с небольшим опытом. SDE 2(L5) - очень опытный Middle или Senior. SDE 3 (L6) - это скорее Staff Software Engineer в большинстве компаний. Principal (L7) - это скорее Senior Staff в большинстве компаний. Senior Principal (L8) - это Principal в большинстве других FAANG компаниях. Google в этом смысле хорошо соответствует уровням в Facebook.
Маппинг уровней можно посмотреть тут: levels.fyi

Сколько же разработчиков на разных уровней в процентном соотношении?
В Amazon, до массовых сокращений было примерно такое распределение: SDE 1 - 35-40%, SDE 2 - 40-45%, SDE 3 - 10-15%, Principal+ ~1-5%. После массовых сокращений соотношение могло измениться, т.к. очень часто при сокращениях увольняли людей на более низких уровнях. В Facebook сейчас: E3 - 5-10%, E4 - 25-30%, E5 ~50%, E6 - ~10-15%, E7+ ~5%. Т.е. картины похожие. Senior разработчики самые массовые - порядка половины. Мидлов и джунов осталось очень мало, меньше 30-40%. Staff порядка 10-15%. Уровни выше Staff - единицы процентов.
👍10
Чем отличается Senior программист от Middle?

Ранее я публиковал пост про отличие Junior от Middle: Чем отличается Junior от Middle программиста?

1) Самостоятельность. Ваша самостоятельность продолжает расти. Вы можете драйвить и овнить самые большие и сложные проекты в рамках вашей команды.
2) Скоуп/размер задач. Часто, импакт ваших проектов не ограничивается только вашей командой, а распространяется и на другие команды.
2) Delivering through others. В силу того, что проекты, над которыми вы работаете, становятся большими и сложными, в одиночку вы их сделать не сможете в ограниченный промежуток времени. Поэтому вам нужно быть лидером и основным овнером проекта, но реализовывать его отдельные части могут другие программисты (Middle и Junior).
3) Dealing with ambiguity(работа с неопределенностью). Этот скил продолжает расти на всех уровнях. На уровне Senior вам нужно в рамках своего проекта или area of expertise уметь производить декомпозицию большого и сложного проекта на отдельные маленькие и понятные части, над которыми будут работать другие более junior программисты. Это достигается благодаря вашему дизайну решения, обсуждениям и согласованиям с другими людьми из вашей или других команд, благодаря вашей экспертизе или тому что вы раскопали в коде или интернете.
4) Качество кода. Вы становитесь тем, кто задает и повышает стандарты написания кода в рамках вашей команде. Это достигается собственным примером, качественными code review и установлениями общих политик написания и качества кода в рамках команды.
5) Mentorship. Вы становитесь ментором для Middle и Junior программистов в вашей команде. Помогаете онбордить людей в команду и компанию. Занимаетесь собеседованиями и наймом других программистов.
6) Экспертиза в рамках команды. Вы становитесь тем человеком, к которому идут если у них возникли какие-либо вопросы в рамках каких-либо компонент, которые овнит ваша команда. В том числе и из других команд.
7) Visibility. Т.к. часто ваши проекты распространяются и на другие команды, то про вас, вашу экспертизу, ваши скилы знают за пределами вашей команды. Вы делаете презентации, пишите доки с результатами/планами/целями работы всей команды или проекта. О вас и вашей работе знают другие менеджеры, не только ваш непосредственный менеджер.
8) Планирование. Вы один из существенных контрибьютеров в roadmap вашей команды. Вы помогаете с постановкой целей, метрик и конкретных проектов, над которыми будет работать ваша команда.
9) Unblocking others. Вы проактивно помогаете другим программистам в рамках вашей команды или проекта разблокировать себя. Проактивно находите самые приоритетные вещи, которые замедляют или блокируют других программистов и помогает их разблокировать.
10) Проактивный багфиксинг и импрувмент. Вы проактивно находите и фиксите баги в коде вашей команды или проекта. Находите способы улучшить код или его производительность.
👍172🔥2👻1
Какие базы данных используются в FAANG?

Разные компании используют разные базы данных по тем или иным причинам. Очень часто в FAANG используются базы данных, разработанные внутри компании. FAANG-компании исторически первыми начали работать с гигантскими объемами данных и большим числом пользователей. Начав использовать существующие на тот момент решения, они столкнулись с их ограничениями, а других решений на рынке не было. Поэтому они начали разрабатывать свои технологии, чтобы соответствовать требованиям решаемых задач. Также FAANG-компании часто хотят иметь возможность быстро кастомизировать код базы данных под свои задачи, поэтому использование сторонних решений не всегда подходит. Часть этих решений базируется на существующих на тот момент решениях и является просто надстройкой. Некоторые, по сути, создали новый вид баз данных и хранилищ, которых не было до этого.

Для примера я приведу, какие базы используются в Amazon и Fb. Существует много разных видов баз данных (SQL, NoSQL) и хранилищ. Поэтому я приведу самые распространенные базы, по типам баз и типичные use-case их использования.

1) Relational database (RBD/Реляционная база данных):

Amazon: AWS RDS (разработан внутри компании) - позволяет создавать и разворачивать базы в облаке. Поддерживает множество движков: MySQL, PostgreSQL, Amazon Aurora (совместима с MySQL и PostgreSQL, поэтому легко мигрировать существующие базы), Oracle, Microsoft SQL Server, MariaDB. Чаще, внутри компании используется Aurora, MySQL или PostgreSQL в качестве движка. AWS RDS же позволяет легко создавать кластеры реляционных баз данных, в том числе развернутые в разных регионах планеты, конфигурировать репликацию данных, бэкапы и многое другое.
Fb: MySQL с масштабными внутренними надстройками для партиционирования, кластеризации и т.д. Поверх сделан собственный слой кэша гигантских масштабов.

2) Data warehouse. Применяется для логирования гиганского объема данных из всех компонент для последующего анализа. Эти данные потом используются для получения разного рода метрик, анализа, а также данных для Machine Learning. Применяется для обработки больших объемов данных не в режиме реального времени, а асинхронно. Часто, при помощи ETL.

Amazon: Amazon Redshift (разработан внутри компании).
Fb: Apache Hive(разработан внутри компании). Всегда применяется в комбинации с движком Presto (разработан изначально внутри компании)

3) NoSQL. Основной use-case - key-value хранилище для большого числа данных (что дорого если использовать in-memory cache).

Amazon: Amazon DynamoDB (разработан внутри компании)
Fb: RocksDB (разработан внутри компании), ZippyDB (разработан внутри компании)

4) Blob. В основном, применяется для хранения медиа файлов (картинки, видео и аудио), а также больших выгрузок данных, как промежуточный этап ETL или для анализа.

Amazon: AWS S3 (разработан внутри компании)
Fb: Свое внутреннее хранилище.
👍17🤔3
Посмотрел ролик от канала редакции про онлайн образование: https://youtu.be/OLlHpXhR29Q?si=CjbP1g7VjnM2Gx4L
Удивили истории, как кто-то решил менять профессию в уже сильно зрелом возрасте и наличии другой нормальной специальности на айтишную. Интересно, есть ли тут такие люди? Какой был ваш опыт? Я сам учился на курсах в 2006 году по Java и SQL. Но я тогда был еще студентом и курсы были от компании, которая потом многих брала на работу.
👍3
Подборка постов в канале, не связанная с задачами. Часть 2

Часто у подписчиков возникают вопросы, на которые я уже писал пост. Решил сделать подборку и закрепить ее по аналогии с подборками разборов задач. Обновление подборки.

Релокация:
1) Планируете переехать в другую страну для жизни и работы?
2) Плюсы работы и жизни в Лондоне
3) Минусы жизни в Великобритании
4) Через сколько лет можно получить гражданство разных стран Европы?
5) Небольшая подборка компаний в Европе, которые нанимают людей из постсоветского пространства
6) Что лучше: большая зп в абсолютных значениях или лучше меньше зарабатывать и жить в стране с меньшими ценами?
7) Стоимость жизни в Лондоне и сколько нужно зарабатывать, чтобы хорошо тут жить
8) Что сейчас происходит на рынке труда программистов США и Европы?
9) Мои первые впечатления, когда я начал работать в Европе, Часть 2
10) Global Talent Visa UK
11) Число вакансий в tech индустрии медленно, но растет
12) Ситуация с хайрингом в Big Tech (и не только) в Европе и США на январь 2024
13) Мои первые впечатления, когда я начал работать в FAANG
14) Стоимость покупки недвижимости в Лондоне vs Москве

Онбординг:
1) С какими сложностями я столкнулся на своей первой работе программистом?, Часть 2
2) Как быстро адаптироваться в команде и компании?, Часть 2
3) Что не стоит делать при онбординге в новую компанию?
4) Team Selection и on-boarding в Facebook
5) Как устроен onboarding процесс в Amazon?, Часть 2

Уровни:
1) Чем отличается Junior от Middle программиста?, Часть 2.
2) Чем отличается Senior программист от Middle?
3) Странные тайтлы в инвест банках
4) Распределение по уровням в FAANG
5) Структура FAANG/Big Tech компании

Прочее:
1) История о том, как я провалил собеседование в Google.
2) С чего начать поиск работы в IT?
3) Минусы работы в IT/программистом
4) Заменяют ли программистов в топ компаниях на нейросети?, Часть 2
5) Стоит ли целенаправленно готовиться к собеседованию в FAANG, если у вас нет технического образования и вы учитесь на курсах и хотите стать программистом?
6) С чего начать изучать программирование в 2023?
7) Что я думаю про курсы по программированию, которые рекламируют на каждом углу?
8) Подборка фильмов, сериалов и документалок о программистах, BigTech, стартапах и их основателях
9) Заменят ли программистов нейросети в ближайшем будущем? Update, Часть 2
👍4🔥4
🔥9👍3
Подборка алгоритмических задач с решениями и описание алгоритмов уже опубликованных в этом канале
#interview #собеседование #алгоритмы #подборка

Обновление подборки.

Общие статьи:
1) Как выбрать язык программирования для алгоритмического собеседования?
2) Как решать алгоритмические задачи на подготовке, чтобы это было эффективно
3) Как не забыть решения задач и алгоритмы
4) Шпаргалка по основным алгоритмам для алгоритмического собеседования
5) Шпаргалка по Java для алгоритмического собеседования
6) Подборка из easy задач для начала подготовки к алгоритмическому собеседованию.
7) Сбалансированная подборка из 100 задач для подготовки к алгоритмическому собеседованию.

Two Pointers:
1) Проверка на палиндром.
2) Усложненная версия проверки на палиндром.
3) Merge Two Sorted Arrays
4) Самая длинная палиндромная подстрока
5) Удалить дубликаты в отсортированном массиве
6) Видео: Merge Intervals
HashTable:
7) Two Sum
8) Видео: Сгруппировать анаграммы
9) Задача с собеседования в Google. 939. Minimum Area Rectangle
10) Задача с собеседования в Microsoft: Самое большое палиндромное число
Stack:
11) Проверить скобочное выражение.
12) Удалить минимальное число скобок, чтобы сделать скобочное выражение правильным
Sorting:
13) Первый пропущенный положительный элемент массива
LinkedList:
14) Удалить n-й элемент с конца в односвязном списке
15) Deep Copy списка со ссылкой на случайный элемент.
BinarySearch:
Описание алгоритма BinarySearch.
16) Пропущенный элемент в отсортированном массиве.
17) Пиковый элемент.
18) Число итераций в бинарном поиске.
19) Первая плохая версия
DFS:
Описание алгоритма DFS.
20) Flood Fill.
21) Видео: Число Островов
BFS:
Описание алгоритма BFS.
22) Проверить полноту дерева.
23) Обход дерева по уровням.
24) Remove Invalid Parentheses
Топологическая сортировка:
Топологическая сортировка
25) Видео: Top k elements
Binary Tree:
Алгоритмы обхода двоичного дерева
26) Invert Binary Tree
27) BranchSums
28) Максимальная высота дерева
29) Максимальная сумма пути в бинарном дереве
30) Сумма элементов бинарного дерева поиска в диапазоне значение
31) Удалить вершины в дереве и вернуть оставшийся лес/forest
Dynamic Programming:
Основные этапы решения задач на динамическое программирование Top-Down методом
32) Top Down подход на примере задачи про ступеньки
33) Задача на динамическое программирование. Разделение на слова.
34) Количество дождевой воды
35) Bottom-up подход: разменять деньги
36) Видео: Longest Increasing Subsequence
37) Лучшее время для покупки и продажи акции
🔥6👍5
Подборка вопросов и ответов для подготовки к собеседованию на Java программиста
#java #interview #собеседование

Обновление подборки из статей, которые я уже написал и опубликовал в этом канале.

Общие вопросы:
1) Методы класса Object
2) Иерархия и типы исключений
3) GC
4) Сравнение строк в Java

Коллекции:
5) HashMap
6) ArrayList vs LinkedList
7) Иерархия коллекций в Java
8) Иерархия Map
9) Maximum ArraySize

Многопоточность:
10) Перевод между банковскими аккаунтами (dead-lock).
11) Ping-Pong (wait-notify).
12) Приостанавливаемый поток.
13) Подборка вопросов по многопоточности
14) Напечатать последовательность чисел при помощи нескольких потоков на Java.
15) ConcurrentModificationException
16) Thread Safe Singleton
17) Обедающие философы
18) Реализовать потокобезопасную блокирующую очередь на Java ограниченного размера
19) Реализовать потокобезопасный неблокирующий стек на Java
20) Daemon потоки
21) Является ли immutable class в Java Thread safe?
22) Implicit Lock Reentrancy
23) Java Memory Model и happens-before
24) ConcurrentHashMap vs Collections.synchronizedMap vs Hashtable vs HashMap
25) Реализовать потокобезопасную неблокирующую очередь на Java
26) Вопрос с собеседования на Java программиста: Как выполнить код в отдельном потоке в Java?

SQL:
27) Типы SQL joins
28) Плюсы и минусы индексов

Spring:
29) Что такое @Autowire в Spring? Как его использовать и как он работает?
🔥13👍6💘3
MVP: Все unit тесты пройдены!
😁41🎉6
PM спрашивает разраба, когда будет сделана таска
https://youtu.be/KuIwMSJ8jkw
😁22🔥2
Собеседовал сегодня еще одного кандидата из Google

Это было кодинг собеседование. Кандидат - Senior разработчик из Google с 7 годами опыта. Google это его первое место работы, начинал там с интерна. В бэкграунде есть участие в олимпиадах по программированию.

Решение к задачам кандидат придумал сходу и правильное. Правильно оценил Space and Time Complexity. Но вот кодинг был не самым лучшим. Его код содержал огромное число ненужных условий и куча лишних конструкций из-за работы с null. В итоге в его коде была куча ошибок. На verification он смог найти и починить почти все баги, но код остался чрезмерно перегружен ненужными вещами и местами напоминал код олимпиадника без опыта или junior разраба. Собеседование он прошел, только по оси кодинг у него будет оценка на грани. По остальным осям выше планки.

Вообще, для FB качество кода это не самая важная вещь в культуре компании, поэтому я бы скорее ожидал такой код от разработчика из FB, чем из Google. В Google же очень сильная культура инжиниринга. Но бывают и такие случаи. Я, кстати, такие случаи чаще вижу, когда у кандидатов нет опыта в других компаниях, которые всю карьеру работали в одной, пусть даже и в очень хорошей. Разработчики, которые работали в разных компаниях, проходили через адаптацию и у них возникали споры по стандартам написания кода, и они с большой вероятностью изучили глубже этот вопрос. Особенно, если у них был опыт работы в разных компаниях на Senior позициях. У людей, кто вырос в рамках одной компании и часто в рамках одной команды, особенно быстро, такого опыта онбординга и адаптации нет, они хорошо адаптированы к своей команде.
👍221
Easy задача с собеседования в Facebook: Contains Duplicate ||

Задача.
Дан массив целых чисел nums и число k. Нужно вернуть true, если в массиве есть два уникальных индекса i и j, такие что nums[i] == nums[j] и abs(i-j)<=k.
Ссылка на leetcode: https://leetcode.com/problems/contains-duplicate-ii/

Примеры:
Input: nums = [1,2,3,1], k = 3
Output: true

nums[0] == nums[3] abs(3-0) <= k

Input: nums = [1,2,3,1,2,3], k = 2
Output: false
Одинаковые элементы есть, но расстояние между ними больше 2.

Решение. Решение описал тут: Easy задача с собеседования в Facebook: Contains Duplicate ||
👍11
Какие бы советы я дал Junior программистам, чтобы быстрее стать Middle разработчиками?

Смотрите также: Чем отличается Junior от Middle программиста?, Часть 2

1) Не бойтесь просить помощи. Если вы застряли в решении своей задачи и не можете сами разблокироваться длительное время - не бойтесь попросить помощи. Задавайте вопросы, говорите на чем вы застряли. Это поможет вам не продалбывать постоянно сроки, быть постоянно заблокированным. Скрывать, что вы заблокированы и продалбывать сроки хуже, чем вовремя попросить помощи и продвинуться в решении задачи.
2) Выясните, что именно сделал человек, у которого вы попросили помощи, чтобы вас разблокировать. Это поможет вам в такой же ситуации разблокироваться самостоятельно, без посторонней помощи. Это и будет вашим ростом в вашей самостоятельности.
3) Попробуйте вначале сами разблокироваться, выделите на это какое-то ограниченное время. Не просите помощи сразу, даже не попытавшись решить сами проблему или разблокироваться. Потратьте несколько часов, максимум дней, на разблокировку самостоятельно, если не получилось - ищите помощи.
4) Установите хорошие взаимоотношения с людьми, кто вас может разблокировать, людьми, к кому они обращаются и вашим менеджером и ментором. Часто люди, которые вам помогают разблокироваться, делают это коммуникацией с другими людьми. Запомните, кто эти другие люди и установите с ними хорошие взаимоотношения, чтобы в следующий раз вы могли обратиться к ним самостоятельно. Также ваш промоушен и карьерный рост сильно зависит от вашего менеджера. Поэтому постарайтесь установить с ним хорошие рабочие отношения.
5) Научитесь быстро навигироваться в коде и быстро в него вникать. Один из способов разблокировки - найти и разобраться с кодом. Научитесь как это делать быстро в вашей IDE, спросите своих старших коллег. Читайте много кода и научитесь быстро вникать в логику его работы.
6) Научитесь быстро гуглить. Научитесь эффективно строить запросы к гуглу, stackoverflow, чтобы быстро найти ответы на нужные вам вопросы.
7) Научитесь быстро находить внутреннюю документацию и разбираться в ней. Аналогично предыдущему пункту. Только гуглить уже внутри своей компании.
8) Засетапьте удобный дебаг. Иногда удобно проверить, что-то на практике. Как работает тот или иной код. Воспроизвести ту или иную багу. Поэтому позаботьтесь, чтобы вы могли легко смоделировать тот или иной код у себя в базе кода и запустить его в режиме дебага или просто выводить в консоль или лог, значения переменных. Это поможем вам быстрее понимать причину багов, проверять как работает та или иная конструкция на практике, без гугления или спрашивания и т.д. Это может быть какой-то ваш специальный unit-test, скрипт, просто запускаемый main-класс, который вы будете использовать как песочницу для экспериментов.
👍15🔥6
Mock Coding Interview

Ранее меня спрашивали, не провожу ли я мок собеседования. Вообще нет, но могу провести для теста несколько штук. Забукать можно тут: https://calendly.com/faangmaster52/mock-coding-interview
При желании, могу сделать запись и опубликовать на канале.

Все бесплатно.
👍29🔥17
Memcached vs Redis

Начал писать короткую статью про сравнение Memcached и Redis в контексте system design собеседования. Написал часть про Memcached и его использование в Facebook. Дополню статью описание Redis в сравнении с Memcached.

Memcached vs Redis

Внутри есть ссылка на Tech Talk от Зака(Zuck/Марка Цукерберга). Сейчас он редко делает технических презентации: https://youtu.be/UH7wkvcf0ys
👍172💘2🎉1