О собеседованиях на 700к (часть 2)
Мой прошлый пост О собеседованиях на 700к/месяц вызвал намного больший резонанс, нежели я ожидал. И люди достаточно часто задавали дублирующиеся вопросы. Поэтому решил свои ответы собрать в едином посте. Вопросы разделил по отдельным темам чтобы было как-то проще структурировать.
Ошибки в предыдущем посте
Много людей указали мне на то, что я некорректно указал асимптотику для задачи про нахождение левой единички. Там есть два алгоритма: за O(N + M) и за O(N * log(M)). Нельзя строго сказать, какой лучше, т.к. зависит от значения M и N. Когда писал статью, написал первую, когда проверял - мне показалось, что второй вариант какой-то более интуитивный и решил поправить, но не исправил знак. Всем, кто заметил - респект. Всем, кто не заметил - мои извинения за косяк.
Вторая ошибка была в термине "контаминация кэша". Я подразумевал там состояние рассогласованности кэшей в контексте понятия "когерентность кэшей". Но мне указали (чего я сам не знал) на то, что вообще-то контаминация - это о другом https://en.wikipedia.org/wiki/Cache_pollution. Пикабу образовательный.
Salary Negotiations
Ещё вопросы вызвал тот факт, что моя зарплата не совпадает с тем, что в оффере. И ещё часть людей проигнорировала этот факт и просто спрашивала - не нарушаю ли я NDA, разглашая свою з/п? Ответ - не нарушаю, т.к. з/п действительно другая (и её я не назову из-за NDA), а вот как так вышло - сейчас расскажу.
Когда вы обычно устраиваетесь на работу, то вы просто проходите собеседование и либо выходите на новую работу, либо нет. И тут всё просто. Но иногда так всё удобно складывается, что вы можете проходить собеседование параллельно в несколько фирм и получить от них параллельные офферы. В IT это совсем не редкость. Настолько не редкость, что в Америке даже распространены курсы по salary negotiations - переговоры о (будущей) зарплате. В России эта практика не очень-то распространена, но тоже имеет место быть. В моём случае это было примерно так:
- Я прошёл все собесы и все финальные собеседования, жду ответ от каждой организации. Дальше кто-то (не помню точно, кто), допустим, Сбер, говорит, что готовы мне предложить "вот такие" деньги (сумму можно поглядеть в предыдущем посте). И я НЕ соглашаюсь, а говорю, что мне надо подумать и подождать ответ от других фирм. Тут важно вести себя вежливо и культурно. Рекрутер - человек взрослый и (обычно) опытный. И у него кроме вас ещё куча работы, так что было бы хорошо ему максимально упростить общение с вами. Не надо его как-то обманывать, выдумывать какие-то глупые причины для затягивания своего ответа. Можно напрямую сказать: "Я жду, пока другие фирмы тоже назовут свои числа и потом уже выберу". Это вполне прагматичный и понятный подход. Да, есть шанс, что вас просто пошлют, но... на самом-то деле если вы крутой спец - вы нужны этой фирме. И она будет готова немного подождать.
- Дальше я сообщаю всем остальным фирмам, что мне "вот столько предложили". Или, если я не совсем спешу, то можно ещё денёк подождать (но не сильно долго, чтобы не наглеть) - вдруг кто-то "вслепую" предложит сильно больше. Но потом всё же я сообщил всем, мол "А мне вот Сбер предложил 675к/месяц". И у фирмы дальше два варианта - либо сказать "мы не готовы", либо сказать "ок, сейчас мы предложим больше". В моём случае часть фирм "отвалились", но Хуавей и Яндекс, подумав, предложили свои 685к и 720к соответственно.
- Я уже готов был принять предложение Яндекса, написал Хуавею и Сберу, мол "Яндекс вот такие мне деньги предложили, меня это устраивает". Сбер ответили, что готовы накинуть сверху ещё, назвали мне сумму, меня это не убедило. А вот Хуавей попросили подождать пару дней, пока они что-то с головным офисом согласуют. И накинули очень значимо. С этим "очень значимо" я пришёл в Яндекс, где мне сделали финальный оффер (сумму которого я как раз не пишу тут в силу NDA) и его-то я уже принял.
Кто-то считает, что переговоры о зарплате - это торгашество и "ниже достоинства". А я человек прагматичный, мне ещё ипотеку выплачивать.
За что платят такие деньги и почему у врачей/учителей зарплаты меньше?
Существует мнение (а точнее - ожидание или даже надежда), что деньги платят за навыки и знания. Но это (на мой взгляд) не так. Зарплата формируется исходя из того, сколько денег вы приносите бизнесу. Если у вас много полезных и крутых знаний, но бизнес не может на этих знаниях заработать - денег вам много не дадут. Даже если эти знания редкие и ценные и спасают людям жизни. Потому что для того, чтобы вы получили зарплату - бизнес эти деньги должен сначала получить от клиента. Поэтому крутые хирурги, у которых тоже есть огромное количество специфических знаний, получают меньше. И я, например, не считаю, что моя работа важнее, чем, например, работа педагога младших классов. Потому что формировать личность и обучать детей - для общества очень важно. И я был бы очень рад, если бы "социально-важные" профессии получали больше денег, но, увы, бизнес работает иначе.
Зачем математика программисту
Вопрос вечный, хорошего ответа нет, т.к. кому-то она и не нужна вовсе. Мне - была нужна. Я обещал ответить с примерами о том, как используются конкретные знания, привожу случаи из моей практики:
- Ряды Тейлора. Тут всё просто - если нужно вычисление какой-то функции, а ты пишешь под нестандартную архитектуру (встраиваемые системы, например) или ПЛИС, то математику придётся реализовывать самому.
- Градиенты и производные. Это базис для обучения нейросетей (метод SGD и его усложнённые модификации), а с помощью них как раз вы можете общаться с ChatGPT или рисовать картинки с помощью Stable Diffusion
- Аффинные преобразования и собственные вектора. Например, у вас есть набор объектов и их признаков. И надо понять, а нужны ли нам вообще все эти признаки? Можно записать все признаки как вектора, из векторов собрать матрицу. И если посчитать для этой матрицы собственные вектора, то моно оценить (по величине собственного значения), какие из этих признаков будут наименее полезными. Этот метод изобрёл не я, он называется PCA (простите за такое вольное описание метода).
- Якобиан и Гессиан. Всё это используется для оптимизации функций и я нигде кроме моделирования физических процессов не встречал. Но зато там это используется сплошь и рядом.
- Кольца и поля. На алгебре основаны многие современные методы шифрования. RSA был бы невозможен без малой теоремы Ферма, которая по сути говорит про кольца по простому модулю.
В общем и целом - все эти знания специфичны для своей сферы. И нередко за рамками сферы они просто не нужны. Я считаю, что математику знать очень полезно, но не обязательно.
Неуспешные собеседования
Ещё могло сложиться мнение, я просто приходил на собесы, отвечал на все вопросы и уходил с ощущением превосходства. На самом деле - нет. За апрель я успел пообщаться с более, чем 10 разными фирмами и часть собеседований просто завалил.
Например, завалил секцию по Systems Design, на которой меня попросили спроектировать сервис а-ля Яндекс.Еда. Я сделал всё неплохо, но явно не на ту сумму денег, которую просил. Было ощущение, что я вроде делал всё правильно, но медленно.
Ещё была на одном собесе задача, вроде бы "в заданном графе посчитать количество треугольников". Формально - вычислить число подграфов, являющихся кликой размера 3. И вот это я просто не смог написать за отведённое время. Не уверен, что смог бы даже со второй попытки. Но, что интересно - после этого мне всё равно сделали оффер.
Ещё на одном собесе меня попросили придумать алгоритм параллельной обработки данных, в котором гарантированно не будет дедлоков. Понятно, что есть вариант "обвешать всё барьерами чтобы по сути доступ к данным всегда был последовательным", но это плохой вариант. А хороший я не смог придумать.
Ещё были собесы, где я просто зажал баги в код. Такое бывает, я в целом невнимательный человек по жизни.
Про личные вопросы
Кто-то спрашивал про семью, родителей и т.п. На такие вопросы, простите, не хочу отвечать, т.к. не вижу связи с темой поста. Рос в обычной семье, учился в обычной школе.
Спрашивали про образование - я учился на мехмате МГУ, но не окончил его. После этого учился на психфаке РГСУ и его тоже не окончил. После этого учился на экономическом факультете МЭСИ и там получил диплом.
UPD: а ещё какой-то говнюк редиска скопировал мой пост и выкладывает теперь на других ресурсах. И я не про официальную группу Пикабу в Вк. Что ж, увы. Лишь бы от моего имени не начал там писать глупостей. "Кто настоящий автор?" всегда можно посмотреть по тому, где был пост раньше опубликован (правильный ответ? тут, на пикабушечке).