Впервые сделал крупный проект (под NDA, так что не расскажу, какой) на облачных функциях. Впечатления противоречивые.
Изначально программисты арендовали компьютер в датацентре: или целиком или кусочек. На нём теоретически можно делать что угодно, но для запуска своих программ нужно было настроить операционную систему, безопасность и авторизацию, установить нужные исполнительные модули, программы для удобства деплоя, мониторинг нагрузки итд. Поэтому появились сервисы, которые это всё делают за тебя, а тебе дают буквально окно, куда можно написать свой код и запускать его удалённо на чужой машине.
Конкретно я пользовался решением от Яндекса, чей протокол скопирован напрямую с Amazon Web Services. Причём, в документации не только открыто об этом говорится, но ещё и в некоторых местах перенаправляют на доки от Amazon. И SDK предлагают тоже использовать амазоновский. До санкций я бы сказал, что это не так плохо — можно использовать что-то привычное тем, кто уже работал с Amazon. Но сейчас привязка к американскому сервису выглядит скорее жирным минусом. Не знаю, есть ли у Яндекса ресурсы на какое-то серьёзное разделение. Судя по состоянию документации и платформы в целом — нет.
Yandex Cloud кажется системой, которая активно развивалась несколько лет назад, а сейчас подзаброшена. Среда выполнения .NET отстаёт от актуальной на две версии (3.1 вместо 6, четвёртой версии не существует). Изначально мой проект был написан как обычное контейнеризированное приложение на .NET 6, а потом я переводил его на функции. Пришлось пройтись по всему коду и переписать несовместимые куски с C#10 на C#8, это было не слишком приятно.
Документации фактически нет, а там, где есть, много путаницы. В примерах написано одно, по факту другое: например в функцию вместо объекта Request приходит просто строка, а разбирать её надо самому. Авторизацию я нашёл только на Stackoverflow. Интересно, что адекватных доков про неё не было ни у Яндекса, ни у Amazon.
Функция выполняется и выгружается, поэтому ваша программа не должна рассчитывать на наличие постоянно живущего процесса. Мне пришлось вытащить из неё большой словарь, который грузится при старте, и положить уже подготовленные данные из него в Object Storage — это такое горячее файловое хранилище, там же рядом с функциями. Справедливости ради, работает это всё быстрее, чем я думал. Удалось запихнуть в функции даже сравнительно большой проект с кучей классов, создающий при запуске несколько десятков объектов и производящий загрузку из сети с декомпрессией.
Другой важный плюс — бесплатная квота довольно внушительная: миллион вызовов и 10Гб*часов оперативной памяти в месяц. Для пет проекта вы сможете вообще не покупать сервер. Но если сервер у вас всё-таки есть, деплой вы уже настроили, то удобнее будет, конечно, делать как привычно. И гибкости больше.
#dev
Magnit Tech #interview#dev
Что? Да. У сети магазинов «Магнит» внезапно большой современный технический отдел. В обслуживании парка из 30к магазинов без развитого айти никуда. Увидел вакансию тимлида .NET, и там прямо очень похоже на то, чем я занимался в АСЭ: электронный документооборот, BPMN-системы, интеграционные потоки. А ещё можно было бы всем говорить, что работаю в Магните.
Скрининг показался чуть менее номинальным, чем в Ozon. Вообще, роль эйчаров тут была более глубокая, и эйчар присутствовала на всех секциях. Изначально должна была быть одна большая общая секция, но в итоге оказалось две.
Общая техническая и архитектурная секция
В целом, явно видна попытка провести собеседование одностадийно (с моей точки зрения это плюс). Была эйчар, старший разработчик и техлид/архитектор. Эйчар задавала вопросы по опыту и по менеджменту. Затем вступил техлид.
Вопросы местами были странными, и почти на каждый вопрос после моего ответа техлид отвечал ещё и сам. Иногда вопрос казался заковыристым, но ожидался на деле какой-то совсем школьный ответ, например:
Интервьюер:
— Скажите, а кроме EntityFramework, какие вы ещё знаете средства взаимодействия с БД?
Я (тут я подумал, что он интересуется альтернативными ORM):
— Dapper пробовали один раз, в некоторых случаях он вполне удобен, работа чуть более низкоуровневая. Ещё активно изучал Linq2Db, потенциально выглядит очень интересно, но на практике так и не удалось применить.
Интервьюер:
— На самом деле можно ещё и просто писать SQL-запросы!
И далее он пару минут рассказывает, почему SQL-запросы лучше, чем ORM. Не «чем лучше», а именно «почему лучше», то есть защищая позицию полного отказа от ORM в любых условиях. Позже в другом вопросе он защищал отказ от строгих типов при десериализации, что на мой взгляд является признаком не выстроенных процессов по согласованию контрактов.
Пару раз спросили про вещи, о которых я никогда раньше не слышал. А после собеса полез искать, и узнал, что это давным-давно deprecated. Зачем про это спрашивали? Либо просто прозондировать мой опыт (то есть, писал ли я на .NET Framework 20 лет назад), либо у них где-то используется. Второе гораздо хуже, но и первое не слишком осмысленно, на мой взгляд.
Языковая секция
Далее эйчар написала, что они совсем забыли задать мне вопросы по языку, и предложила ещё один небольшой созвон на 40 минут. В итоге вышла почти часовая полноценная языковая секция. Вопросы в основном ожидаемые, но пара странных тоже была. Если в Ozon гоняли по глубоко академической теории, то здесь иногда цеплялись за какие-то невероятно нишевые примеры использования, которые в опыт к программисту могут попасть только случайно. Из-за этого у меня осталось послевкусие, что прошёл я средненько.
Результат
Ещё через пару дней эйчар написала, что всё очень хорошо, я понравился, но, к сожалению, у них сотрудник изнутри пожелал вырасти до тимлида, и они отдали предпочтение ему. Ну, бывает. Странно, что в момент открытия вакансии этот вопрос не проработали явно с собственным же персоналом. По крайней мере это собеседование не отняло много времени и дало любопытный опыт, так что я не расстроился.
Что понравилось:
1. Роль эйчара более активная и глубокая
2. Мало стадий, в норме вообще одна
Что не понравилось:
1. Интервьюер слишком много времени посвятил тому, чтобы защищать свои собственные решения, которые он принял в компании
2. Есть признаки работы с легаси, и в целом не слишком современных технических подходов, но могу ошибаться
И так, Ozon Tech. #interview#dev
Наверное, первая крупная организация, которая приходит на ум, когда думаешь о работе для C#-программиста. В Озоне и правда очень много всего на шарпе. У нас туда уходили разработчики из дирекции, но и обратный случай был (когда разработчик перешёл в АСЭ из Озона). Так что у меня была одной из первых, куда я подался. Но подавался через знакомства. Хотя, я думаю, что и при обычном отклике по общим каналам мне бы написали. Эйчар отвечала быстро и охотно, но скрининг был скорее номинальным, просто по ключевым технологиям: .NET, PostgreSQL, Kafka итд.
А теперь важный дисклеймер: это первый раз в жизни, когда я пошёл на собеседование, как соискатель. И вообще, резюме я оформил вот только в мае этого года. До АСЭ я много лет работал на аутсорсе, а в АСЭ устроился по приглашению после хакатона, собеседования не было. Так что уже тимлидом я проводил собеседования, но сам их не проходил.
К сожалению, навык прохождения собеседований соотносится с настоящим умением работать программистом очень ортогонально. Я распишу своё мнение по современным процессам найма как-нибудь потом, но достаточно сказать, что для подготовки я в течение двух недель читал книжки и общался с DeepSeek, и без этой подготовки я бы собеседования нигде не прошёл. Хотя, разумеется, двухнедельное чтение книжек не сделали меня ни на йоту лучшим разработчиком, не добавили мне опыта и умений.
После первичного скрининга в Озоне три секции: технический скрининг, большая техническая секция и system design с небольшим фитом в конце (фит это общение с руководителем на предмет того, совпадаете ли вы).
Технический скрининг
Чисто разговорная секция на 40-50 минут. Интервьюер один. Задаёт вопросы общего плана по языку, структурам данных, многопоточности. Ничего неожиданного нет. Я шёл на ведущего разработчика C# (это тимлид), так что нужно быть готовым рассказывать про поколения сборщика мусора и особенности работы IO-bound операций в асинхронном контексте. Секция сугубо академически-теоретическая. Кроме языка была пара вопросов по энтерпрайз-архитектуре и по базам данных, но без копания вглубь.
С моей точки зрения для скрининга всё равно секция чрезмерно подробная, и позже на большой технической секции часть тем повторилась.
Большая техническая секция
Два интервьюера, два часа. Задачи по коду, но не на алгоритмы, а скорее на решение конкретных кейсов. Например, нужно параллельно читать из кэша и из БД (если в кэше нет), как это написать максимально эффективно. Дан шаблон, который нужно заполнить. Параллельно задавали вопросы по теории.
Одна задача по SQL (я решил только с подсказкой). Вообще с чистым SQL в современном энтерпрайзе работают мало и редко. Когда дошли до этой задачи, я честно сказал собеседующим: «В реальной работе, получив такую задачу, я бы изучил документацию по средствам СУБД, которые позволили бы мне её решить, и погонял бы тестовые запросы на предмет правильности и оптимальности». По моим ощущениям, им этот ответ не понравился, и в целом мне показалось, что оценили мои навыки в этой части низко.
И в конце кусочек код-ревью. Когда я сам проводил собеседования, это была моя любимая часть, потому что наш пример кода на ревью содержал сразу большой пласт разнообразных проблем: инъекции, ошибки асинхронности, освобождение неуправляемых ресурсов, безопасность итд. Сразу было видно, с чем человек часто сталкивался, а с чем редко.
Здесь на ревью я стал давать комментарии по кодстайлу, за которым, как тимлид, тоже регулярно следил. Но меня попросили сосредоточиться на проблемах другого рода, и по сути весь код крутился вокруг неверного использования lock. Я увидел эту проблему, предложил решение, но не смог глубоко объяснить, какими особенностями поведения среды выполнения вызвана эта проблема.
Понижение должности
Через пару дней эйчар написала, что на ведущего разработчика (тимлида) они не готовы меня рассмотреть, но готовы на старшего (сеньора). Запомните этот момент. Я согласился. На мой вопрос о том, ниже ли вилка, она ответить не смогла, и сказала, что обсуждать нужно с руководителем.
@Chatbotcreatorbot
Qué puede hacer este bot?
Con este bot puedes crear tus propios Telegram Chatbots o usar plantillas existentes. No se requieren habilidades de codificación.
Idioma: Inglés
(visto en @BotsGram_cu)
#create, #chat, #development, #dev, #botbuilding