Архив недели @Al_Grigor
Понедельник
Привет! Эту неделю с вами ololo из ODS, еще известный как @Al_Grigor
Примерный план:
ПН и ВТ моя история
СР карьерная лесница у дата саентиста
ЧТ коммуникация и другие софт-скилы
ПТ продакшн и хард-скилы
СБ поиск работы и собесы
ВС персональный бренд
Начнем с биографии
Я из Биробиджана — это такой город на дальнем востоке РФ с населением в ~70 тыс человек. Там я учился в школе и в университете
Это вот здесь ru.wikipedia.org/wiki/Биробиджан
В вузе я вдруг осознал, что учиться интересно, записался на кружок по математике, и несколько раз каким-то чудом попал на ACM ICPC, но дальше ¼ финала мы ни разу не прошли
Во время учебы я узнал про программу Work&Travel и поехал в США работать на ярмарке аттракционов. Было весело, я даже немного начал говорить по-английски, поэтому потом поехал еще раз — в Бостон
В Бостоне работу найти оказалось очень легко: достаточно было оставить объявление на craigslist и предложения сами посыпались
В итоге устроился в Boston University писать программки на бейсике
Собеседование в Boston University было интересное: меня спросили, могу ли я программировать, я ответил, что могу. На этом собеседование закончилось. Договорились на $11 в час
После Бостона в Биробиджане задерживаться не хотелось, поэтому после получения бакалавра, двинул покорять запад
Начал с Нижнего Новгорода — на Москву денег не было
В 2010 году в Нижнем был сильный кадровый голод, поэтому с руками отрывали всех, кто мог связать два слова и подавал хоть какие-то надежды
Больше всего запомнил собеседование в инновационную фирму с одним сотрудником: офис в гараже, вечер, фонарей нет, ничего не видно, вокруг бродячие собаки, собеседование на английском, с проверкой SQL и алгоритмами
На вопросы не ответил, но получил оффер. Решил не принимать
В итоге я очутился в одной аутсорс компании на должности джава-программиста (джаву я не знал) с зп в 20 тыс рублей.
Там меня научили проходить собеседования и продали заказчику как мидла. А потом уволили, когда я не смог справиться с нагрузкой
Со второй работой повезло больше: я устроился в небольшую фирму пилить приложение для продажи гудков на телефоны (да, ими кто-то пользуется)
Писал фронт на jquery и бэк на spring, было весело, мне доверили всё приложение, дали в подчинение помощника и даже обещали сделать лидом
В какой-то момент я решил продолжить учебу и устроился в магистратуру в нижегородский политех, он же НГТУ, на интеллектуальный анализ данных
На первом семестре мы писали какие-то алгоритмы на Wolfram Mathematica и что-то делали на 1C
Внезапно вмешался военкомат, деньгами проблему решить не получилось, поэтому было принято решение уехать куда-нибудь из России
В итоге я оказался в офисе Luxoft в Польше, в Кракове
В Люксофте я работал на UBS — это швейцарский банк. Моя работа состояла в перекладывании большого количества XML из одной очереди в другую
В это время появился тот самый курс по Machine Learning на курсере. Я его посмотрел и понял, что хочу заниматься MLом, а не XMLом
Вместе с курсом на курсере начали появляться первые вакансии дата саентистов
Типичный диалог на собеседовании в то время: “у вас же даже PhD нет, давайте вы лучше к нам джавистом, пару лет поработаете, а потом посмотрим”
Похоже, что всем нужно было PhD. Но у меня не было даже магистра, поэтому решил таки добить это и начал искать, куда податься
Подавался в основном на программы со стипендией
Вот список программ на которые я отправил документы
itshared.org/2015/01/europe…
В итоге меня взяли на IT4BI — программа по Business Intelligence
Первый семестр в Бельгии, второй во Франции, третий и четвертый — Германия, Франция или Испания на выбор
(Я тогда не знал, что BI имеет мало общего с дата саенсом)
Я выбрал специализацию в TU Berlin. Там мы изучали Large Scale BI, делали упражнения на Apache Flink и даже писали свою БД почти с нуля
itshared.org/2015/01/it4bi-…
Так я и оказался в Берлине, где и по сей день живу
К выпуску у меня уже было
- 3 года опыта на джаве
- 10+ онлайн курсов
- 1.5 года опыта в МЛ на фрилансе
- пара курсовых и дипломный проект
- коммиты в Apache Mahout
Желающих нанять людей с таким багажом было много и PhD уже был не так нужен. В аспу решил не идти
На сегодня, пожалуй, всё
Завтра расскажу про
- первую фулл-тайм работу в дата саенсе
- кагл
- как я перестал быть дата саентистом (но все ещё им назывался)
- мою текущую работу в OLX
Подписывайтесь на @Al_Grigor
@dsunderhood Hi, your thread is compiled. If it’s an old thread be sure to compile it from the last tweet to retrieve it entirely. You can read it here: threader.app/thread/1259778…
Тред за сегодня twitter.com/threader_app/s…
Пока готовил сегодняшний материал, возник вопрос
А эти авто-биографии вообще кому-то интересно читать?
Вторник
Биографии, оказывается, читать интересно!
Но я бы в любом случае продолжил, не выкидывать же подготовленный материал =)
С вами опять @Al_Grigor, продолжаю писать авто-биографию
На первую фулл-тайм работу дата саентистом меня взяли из-за опыта в джаве: ДС команде нужна была помощь с интеграцией моделей в прод
Там я познакомился с контент-маркетингом
Копирайтеры работают так: получают задание “написать 1.5к слов по теме сыр”, смотрят выдачу в поисковиках и пытаются повторить результат
Моя модель им помогала: выдавала ключевые слова, обязательные для попадания в топ гугла
В этой же компании я познакомился с одним известным каглером (сейчас 4х грандмастером), который меня подсадил на иглу кагла
Первое соревнование на кагле открыло мне глаза: я совсем не умею готовить МЛ
И магистратура, и онлайн курсы совершенно к этому меня не подготовили, а теоретические знания оттуда оказались бесполезными
Следующие полгода я плотно подсел на кагл, решая все новые соревнования
Закончился этот марафон соревнованием от Avito по поиску дубликатов, где моя команда оказалась в золоте
После этого пошли картиночные соревнования и интерес с каглу как-то пропал
Еще во время учебы я начал рецензировать книги от Packt Publishing. Однажды нашел у себя в ящике письмо от них
“Ты круто рецензируешь, не хочешь написать книгу?”
Я решил, что хочу. В результате появилось вот это
packtpub.com/eu/big-data-an…
Тем временем я оказался в стартапе, занимающимся рекламой и RTB
Объемы данных — десятки Тб в день
Воротить такие данные тяжело, поэтому я постепенно переключил фокус с машинного обучения на дата инжиниринг и построение инфры для моделей
Там я с нуля построил систему для обработки данных и тренировки моделей на AWS, Spark и Luigi
Моделями занимались мои коллеги, а я пилил инфру для этого
В какой-то момент мне понадобилось самому натренировать модель и я осознал — теперь для меня это нудный процесс:
- поменять параметр
- подождать какое-то время
- посмотреть на график
- опять поменять
Инфра вдруг оказалась интереснее!
И тут я заметил: на Берлинском рынке опыт построения инфраструктуры для МЛа очень ценится
Но по деньгам оказалось выгоднее подаваться на вакансии дата саентистов и продавать себя как ДСа с умением катить модельки в прод, а не как инженера, знающего МЛ
Так я и оказался в OLX, где и сейчас работаю
В первый же день мне дали модель (вернее, ансамбль из трех моделей) для определения качества картинок
Это был огромный докер-образ, в котором помимо TensorFlow зачем-то был еще TexLive и много всякого другого барахла, а на инференс тратилось 20-30 секунд на CPU
В OLX я познакомился с Kubernetes и Terraform и через пару месяцев монстр Франкенштейна уже был в проде
Потом мы много чего там улучшили и запилили инфру для деплоя других моделей
Я даже по мотивам написал статью
tech.olx.com/the-evolution-…
Параллельно я работал над системой для отлова дубликатов
Опыт участия в кагле опять оказался полезным для получения проекта, но фокус был опять на инфре: обрабатывать 10 млн картинок в день — не так уж и просто
tech.olx.com/detecting-imag…
Про поиск дубликатов я делал презентацию на @HighLoadConf — видео с доклада не так давно выложили в открытый доступ
youtube.com/watch?v=FmZnoQ…
После года работы меня повысили с сеньера до лида
Я сместил фокус на помощь коллегам, менторинг и синхронизацию между командами
Самым сложным в работе лида оказалась работа с людьми
У всех свои взгляды на то, какой должна быть система, но надо всех этих людей усадить в одной комнате (сейчас в зуме) и заставить договориться
Еще подкину статей: вот тут я рассказываю про деплой моделей, про работу лидом и про то, кто такие full-stack дата саентисты
medium.com/data-science-i…
В какой-то момент со мной связались люди из издательства Manning и предложили написать книгу
Я долго думал: написание книги — процесс нелегкий. В итоге решился
Сильно рекламировать не буду, вот тут можно почитать больше
mlbookcamp.com
На этом всё, завтра поговорим про карьерную лестницу:
- обязанности джунов, мидлов, сеньеров
- как получить повышение
- что такое сеньер и что делать дальше
Подписывайтесь на @Al_Grigor
Кстати, у нас уже 1.5к твитов!
@dsunderhood Hey Data, your thread is ready and compiled. Be sure to mention us from the last tweet to compile older threads. You can read it here: threader.app/thread/1260084…
сегодняший тред: автобиография, часть 2 twitter.com/threader_app/s…
Среда
С вами @Al_Grigor, сегодня среда, поэтому говорим про карьеру и карьерную лестницу
У нас карьерная лестница выглядит так (но тред будет не про нашу фирму, а индустрию в целом)
Начнем с джунов
Джун умеет справляться с хорошо поставленной задачей
Проявляет инициативу, участвует в обсуждениях, не требует присмотра — повышаем до мидла
Кстати, интересно, как вы себя определяете?
Самые главные качества джуна
- желание учиться
- умение спокойно принимать критику
Мидл
- справляется с задачами самостоятельно
- активно участвует в обсуждениях, планировании и приоритизации
- может целиком сделать фичу без присмотра
- помогает джунам
Сеньер — как мидл, плюс
- менторит джунов и мидлов
- ведёт один или несколько проектов в команде
- превращает абстрактные требования в конкретные таски, общается с нетехническими людьми
- разработка минимум на уровне мидла-программиста
Ключевые отличия сеньера от мидла:
- больше общения
- больше ответственности
Предварительные результаты
Чтобы стать сеньером официально, надо сначала стать сеньером неофициально
То есть, чтобы мидлу стать сеньером, нужно
- много общаться со стейкхолдерами (не знаю, как по-русски)
- переводить требования на понятный джунам язык
- целиком взять на себя какую-то часть проекта и не бояться принимать там все решения
Для дата саенса, мидлу еще следует прокачаться в разработке:
- следовать лучшим инженерным практикам
- влезть в инфру — уметь самостоятельно выкатывать свои сервисы в прод
Про это подробнее поговорим в пятницу
Часто в компаниях для повышения есть формальное требование — дотащить 1-2 проекта до прода и повлиять на ключевые KPI
Это тяжело: я видел, как готовые сеньеры не могли официально получить промо из-за неудачного проекта
Что делать? Искать другой проект (или компанию)
Из описания видно, что сеньер — это техлид на проекте. Поэтому в некоторых компаниях разветвление на менеджера и эксперта начинаются раньше — уже после мидла
Например, похожая схема в Wayfair и Zalando
This Friday together with @vboykis and @robinson_es we'll talk about career in data science - how to get a job - what to expect from an interview - career progression - how the field will look in a few year @PyDataMTL #100DaysOfCode #100DaysOfMLCode meetup.com/en-AU/PyData-M…
Кстати, в эту пятницу поговорим про карьеру - кто не будет спать, подключайтесь twitter.com/Al_Grigor/stat…
Следующая должность после сеньера везде называется по-разному: это может быть Lead, Staff или Principal
Главные отличия лида (стафа) от сеньера:
- ведёт несколько проектов в нескольких командах
- меньше работы руками
- больше коммуникации
Чтобы сеньеру стать лидом, обычно нужно
- скоординировать работу нескольких команд для важного проекта
- хорошо знать что происходит в разных командах
- еще больше общаться со стейкхолдерами
То есть надо качать софт-скилы
Как обычно — чтобы стать лидом официально, нужно сначала стать неофициально, поэтому:
- ищем возможности для взаимодействия с другими командами (лучше несколькими)
- убеждаем их делать то, что нам нужно :)
Я не так много знаю людей уровня выше лида, поэтому сложно сказать, что именно ожидается на следующем уровне и как туда попасть
Главное отличие приницала от лида:
- лид действует на уровне одного отдела
- принципал — на уровне нескольких отделов или даже офисов
В моей компании всего два человека на экспертном треке на уровне выше лида (оба не дата саентисты)
Они туда попали, затащив серьезные архитектурные и инфраструктурные проекты, требующие скоординированных усилий команд из нескольких офисов
Как только стану принципалом — расскажу подробнее =)
С менеджерской веткой немного проще:
- data science manager управляет дата саентистами из 1-2 команд
- head of data science управляет несколькими менеджерами (на уровне отдела)
- director of data science управляет несколькими отделами
Много раз видел, как сеньеры становились менеджерами
Обычно это случается естественным образом:
- превращаешь требования в задачки для джунов
- делаешь это хорошо
- появляется свободное место менеджера в другой команде
- становишься менеджером
Занять свободное место менеджера не всегда просто
Самое главное в этом процессе:
- сказать своему начальнику, что интересно стать менеджером
- активно прокачивать необходимые навыки — обязанности сеньера часто этому способствуют
Я сам не менеджер и никогда не был, так что эта часть у меня на уровне теории
Было бы интересно попробовать, поэтому стараюсь хорошо делать свою работу и жду удачного момента =)
На пока это всё. Завтра поговорим про софт-скилы:
- коммуникация
- планирование и приоритизация
- прагматизм
Подписывайтесь на @Al_Grigor
В качестве подготовки на завтра: что для дата саетистов важнее?
@dsunderhood Hi, your thread is compiled. If it’s an old thread be sure to compile it from the last tweet to retrieve it entirely. You can read it here: threader.app/thread/1260501…
Сегодняшний тред: карьерная лестница twitter.com/threader_app/s…
Четверг
Результаты опроса: большинство решило, что хард скилы важнее
С вами @Al_Grigor, сегодня мы поговорим про софт-скилы
Вики подсказывает, что soft skills — это важные для карьеры “надпрофессиональные” навыки
То есть, все что важно для работы, но не является хард скилами — это софт скилы
ru.wikipedia.org/wiki/Гибкие_на…
Сразу скажу, что я далеко не эксперт в этой области
Я относительно недавно осознал важность этих навыков и сейчас пытаюсь как-то развиваться в этом направлении
Полезных софт-скилов много:
- обучаемость
- креативность
- ответственность
- работа в команде
- коммуникация
- умение слушать
- умение делегировать
- эмпатия
- умение давать обратную связь
- планирование времени
- приоритизация
- гибкость
- системность
Этот список я придумал не сам, а надергал из разных мест в интернете
Сегодня мы поговорим только о нескольких из них — в основном о коммуникации и немного о планировании проектов.
Начнем с коммуникации
Коммуникация — самый важный навык для дата саентиста
Коммуникация нужна чтобы:
- понять проблему
- предложить решение
- объяснить решение (простым языком)
- понять, правильную ли проблему мы решаем
- интерпретировать результаты
- договориться с другими командами
- рассказать о наших достижениях
И не только
Митинги — один из способов коммуникации
Часто бывает, что что-то обсудили, но в итоге не понятно, о чем договорились
Чтобы этого избежать, во время встречи я всё записываю, а потом шлю:
- notes: о чем говорили
- action points: конкретные действия (+ имя)
Еще один способ коммуникации — документация
Для проектов я веду journal document — гугло-док, в котором записываю
- цель проекта, решаемые проблемы
- заметки с митингов
- письма от стейкхолдеров
- результаты
- возникшие сложности
Каждый пункт с датой и участниками обсуждений
С ростом проекта такой журнал переезжает в Confluence, который не такой удобный для редактирования, но удобный для поиска (и продакты его любят больше)
Написание писем и документации — тоже важный навык
Эффективное письмо начинаем сразу с сути дела, а потом перечисляем аргументы. Это называется “the pyramid principle”
Вот хорошая статья про это
medium.com/lessons-from-m…
Чтобы подготовиться к важной встречи или докладу, я заранее пишу основные идеи, которые хочу донести
Даже если эти слайды или заметки не потребуются, это упорядочивает мысли в голове
Еще одна хорошая статья от того же автора
medium.com/lessons-from-m…
Часто случается, что пообщались, проблему вроде бы поняли, все согласовали, придумали план, начали работать
А через некоторое время оказывается, что на самом деле нет, нужно всё делать по-другому
Знакомо?
Давайте теперь немного поговорим про планирование и приоритизацию — как раз обсудим, как такие ситуации сделать наименее болезненными
Прототипирование — эффективный способ проверить, что мы двигаемся в нужном направлении
- отводим неделю на создание прототипа
- демонстрируем или тестируем на пользователях
- убеждаемся, что проблему поняли верно (или нет)
Всегда помним про принцип Парето (он же 80/20): мы можем получить 80% результата вложив только 20% усилий
- создаем список всех фич
- помечаем каждую как must-have, should-have, could-have
- фокусируемся на самых важных must-have
Мне нравится вот такой подход от Дяди Боба:
- make it work: определяем те самые 80%, быстро пишем код, срезаем углы, получаем работающую систему/модель
- make it right: причесываем код и архитектуру
- make it fast: оптимизируем
В итоге мы быстро получаем сервис, который более-менее работает, проверяем наши идеи, убеждаемся, что они работают — и только в этом случае усложняем наш проект
Такой подход я называю “прагматичным”:
- начинаем с простого
- часто итерируемся
- приоритезируем: выбираем самое важное
- вовремя останавливаемся, если проект нужно прикончить
По теме софт-скилов у меня твиты закончились
Завтра поговорим про хард-скилы:
- инженерные практики
- инфраструктура
Подписывайтесь на @Al_Grigor
@dsunderhood Hey Data, your thread is ready and compiled. Be sure to mention us from the last tweet to compile older threads. You can read it here: threader.app/thread/1260869…
Тред сегодня: коммуникация и прагматизм twitter.com/threader_app/s…
Для дата саентиста важнее
Как часто вы тренируете МЛ модели? (на своей основной работе)
Если не работаете или не работаете в ДС - не голосуйте =)
Пятница
С вами @Al_Grigor, сегодня мы поговорим про хард-скилы
Базовый набор навыков для дата саениста примерно такой:
- работа с данными, SQL
- git
- кодинг на питоне
- numpy, pandas, scikit-learn
- тренировка и валидация моделей
- микросервисы, фласк, докер
Это не набор навыков, необходимый для найма. Скорее это набор навыков, необходимых для выполнения большей части задач самостоятельно
Этого вполне хватит, чтобы
собрать данные
натренировать модель
засунуть её во фласк
отдать результат инженерам/девопсам/админам на деплой
наблюдать как наша модель улучшает KPI компании и несет счастье всему миру
Проголосовашие за первые два варианта - где вы работаете?
На самом деле, я приятно удивлён - ожидал, что в основном будут голоса за последние два варианта
Шаг “отдать админам на деплой” занимает больше времени, чем хотелось бы: они люди занятые, все от них что-то хотят
Надо им помогать
Берем деплой в свои руки и изучаем:
- AWS (или что у вас там)
- Основы девопс (всякие infrastructure-as-code тулы)
Сейчас многие используют Kubernetes для управления инфраструктурой. Если ваша компания тоже, то есть смысл научиться им пользоваться
Для деплоя моделей достаточно:
- написать YAML файл
- выполнить kubectl apply
Это покроет 99% потребностей
Простой способ научиться пользоваться кубом — поиграть с minikube:
- ставим minikube и kubectl
- пакуем модель в докер
- создаем ямл файлы
- kubectl apply
Вот неплохой туториал (но наверное есть лучше)
kubernetes.io/docs/tutorials…
После миникуба можно поиграть с настоящим кубернетесом
Например, взять кластер на любом облаке — Google Cloud, AWS или Azure. Вроде у яндекса и мейла тоже есть
Говорят, что на DigitalOcean можно бесплатно попробовать, но я не проверял
Если используется облако, то полезно знать основные сервисы
Для погружения в AWS отлично подходят курсы по подготовке к сертификации от AWS — сам сертификат можно и не сдавать
Слышал что этот курс хороший — и его можно пройти бесплатно
linuxacademy.com/course/aws-cer…
Сам я проходил курс с Udemy от Stephane Maarek. Курсы платные, но у нас в компании бизнес-подписка на Udemy, поэтому я проходил бесплатно
udemy.com/user/stephane-…
Если используется AWS, то обычно вся инфра поднимается не кликаньем в веб-интерфейсе, а библиотеками типа Terraform или Cloudformation
Поэтому рекомендую обратиться к админам и попросить у них помощи в изучении этих инструментов (или других, которые у вас используются)
Что делать, если админы — вахтёры и не дают деплоить?
Убеждаем, что нам доверять можно:
- сначала деплоим под присмотром
- просим помощи когда надо
- стараемся не косячить (иногда бывает — ничего страшного)
Навык убеждения — не хард скилл, поэтому сегодня не про это =)
Теперь про код и лучшие практики
Не забываем писать тесты =)
Как минимум, нужно иметь два набора тестов:
- юнит-тесты: используем nose, unittest или любую другую библиотеку
- интеграционные тесты: тестируем нашу модель как черный ящик, запакованный в докер
Самый простой способ написать интеграционные тесты — использовать docker compose
Все сервисы от AWS в интеграционных тестах можно подменить на localstack
github.com/localstack/loc…
Код должен быть читаемый. У дата саентистов часто с этим проблема, у меня тоже
Моя любимая книга про это — “Чистый код” от Дяди Боба
Как минимум стоит прочесть первую треть книги, остальное уже на своё усмотрение
Основные советы из книги “Чистый Код”
В чистом коде:
- понятные имена для переменных, функций, классов
- функции короткие — не больше 20 строк
- код отформатирован
- есть тесты
Пожалуй, у меня всё на сегодня.
Завтра поговорим про поиск работы и собесы:
- какие раунды бывают
- какие вопросы
- как готовиться
- как торговаться
Подписывайтесь на @Al_Grigor
Как часто ходите по собеседованиям?
Кто должен назвать вилку/ожидания по зп первым?
После получения оффера
@dsunderhood Hey Data, your thread is ready and compiled. Be sure to mention us from the last tweet to compile older threads. You can read it here: threader.app/thread/1261200…
Про хард-скилы twitter.com/threader_app/s…
This Friday together with @vboykis and @robinson_es we'll talk about career in data science - how to get a job - what to expect from an interview - career progression - how the field will look in a few year @PyDataMTL #100DaysOfCode #100DaysOfMLCode meetup.com/en-AU/PyData-M…
Напоминаю: сегодня поговорим про карьеру, присоединяйтесь, кто не будет спать twitter.com/Al_Grigor/stat…
Начал готовить материал на завтра, и понял, что получается слишком много
Пожалуй, поменяю план на выходные:
СБ собесы и поиск работы
ВС собесы и поиск работы
про персональный бренд расскажу как-нибудь в моем личном аккаунте, поэтому подписывайтесь на @Al_Grigor
Суббота
Сегодня про поиск работы и собесы — для дата саентистов и не только. С вами опять @Al_Grigor
Как искать работу?
Для Германии:
- заводим профиль на LinkedIn
- ставим галочку “ищу работу”
- откликаемся на вакансии и отвечаем рекрутерам
- регистрируемся на glassdoor, создаем job alert и получаем вакансии в ящик каждый день
Для СНГ (в странах, где LinkedIn не забанен), думаю, алгоритм похожий. Не забываем про канал “jobs” в ODS
Хинт для желающих переехать: ставим “Берлин” в профиле и начинаем получать письма от рекрутеров
Для Германии такой вариант работает
- от компании ничего не требуется, чтобы сделать визу
- типичный notice в IT компаниях 3-4 мес, так что ждать работников в любом случае долго
Обычно в вакансиях описываются идеальные кандидаты: такие кандидаты не существуют
Поэтому откликаемся на вакансию даже если профиль не совпадает на 100%
Чтобы повысить шансы получить письмо от рекрутера или hiring manager-а, надо быть на виду
- делаем проект (кагл, курсач/диплом, пет-проект)
- выкладываем код на гитхаб
- пишем статью на хабр/медиум
- делимся статьей в соц сетях
Нет времени заниматься своими проектами?
Можно рассказать о рабочих проектах, поэтому пишем статью, выступаем на конфах, рассказываем про это в соц сетях
После каждого собеседования проводим ретроспективу:
- какие вопросы были?
- мои ответы на них — ок или нет
- что можно сделать лучше в следующий раз
Лучше всего это делать в письменном виде
Отказали — ничего страшного. Это тоже полезный опыт. Проводим ретроспективу и учимся на ошибках
Раунды на собесах бывают разными:
- созвон с рекрутером
- теория
- кодинг (SQL, питон, иногда алгоритмы)
- тестовое
- use case
- систем дизайн
- behavioural
На созвоне с рекрутером надо уметь рассказать про себя. Лучше подготовиться и заранее придумать историю на пару минут
Как вы относитесь к тестовым заданиям на дом?
На первом собесе нужно быть готовым говорить про зарплатные ожидания
Можно попытаться это отложить на самый конец процесса, но для опытных спецов полезнее иметь заготовленную цифру, чтобы всем сэкономить время
На собесах по теории обычно проверяются знания по МЛ
Это обычно проходит в форме вопрос-ответ:
- чем рандом форест отличается от GBM?
- как работает Adam?
И подобное
Можно долго спорить о полезности таких вопросов, но такие раунды есть и стоит быть к ним готовым
Для тех, кто готовится, я не так давно сделал статью с вопросами
medium.com/data-science-i…
Ответы тоже есть, но они от сообщества и не всегда правильные. Используйте с осторожностью
Ответы, правки и комментарии приветствуются. Внизу есть ссылка на гитхаб репозиторий — можно создать issue или PR и поставить⭐️
ds-interviews.org/theory.html
Воскресенье
Дальше идут технические вопросы. Дата саентистам нужно знать SQL, иначе как мы сможем самостоятельно достать данные для модели?
Поэтому этот навык проверяется на собесах
Питон тоже надо проверить
Моя любимая задачка для скрининга — написать RLE:
Дано: “aaabbcca”
Надо сделать: [(“a”, 3), (“b”, 2), (“c”, 2), (“a”, 1)]
Некоторые проверяют знание алгоритмов — задачки уровня easy/meduim с Leetcode
Самый простой способ подготовиться к этому — решать задачки на литкоде
Подробнее про технические собесы я писал в статье
medium.com/data-science-i…
Ответы тоже есть, но как обычно — это ответы от сообщества, поэтому используйте их аккуратно
ds-interviews.org/technical.html
Кстати, если есть желание принять участие в проекте, есть задачка, до которой я никак не доберусь:
Нужно сгенерировать данные, чтобы упражнения по SQL было проще выполнять
github.com/alexeygrigorev…
Теперь про тестовые. Ненавижу.
В некоторых компаниях тестовые — неотъемлемая часть процесса. В моей тоже
Цель — проверить, может ли кандидат только языком трепать или руками тоже знает, как работать
Минусы тестовых для кандидатов:
- занимают много времени
- невозможно понять, что от нас хотят
- возможно, уже есть кандидаты на более поздних этапах процесса (оффер уйдет им)
Плюсы тестовых для кандидатов:
- нету
(ну, если не считать еще один проект в портфолио)
От тестового можно отъехать:
У меня, к сожалению, нет времени его выполнять, но будь время, я бы подошел к решению задачи так: (объяснение)
Вы можете посмотреть примеры моего кода у меня на гитхабе (ссылка)
Мне вакансия очень нравится, я бы очень хотел продолжить общение
Обычно это не работает и компания посылает куда подальше =)
Но у лично у меня пару раз сработало
Почему я так не люблю тестовые?
Потратил на них слишком много времени, и почти без толку — оффером это закончилось всего один раз
Иногда бывает раунд с задачками (use case)
Собеседующий описывает какую-то гипотетическую (или не очень) ситуацию и нужно предложить решение
Как готовиться к задачкам:
- придумываем какую-нибудь проблему (или берем с кагла)
- вспоминаем про CRISP-DM
- расписываем решение этой проблемы по шагам
Минутка рекламы: статья про CRISP-DM на основе материала из моей книги
mlbookcamp.com/article/crisp-…
Дальше поговорим про МЛ систем дизайн
Это задачи типа “давайте спроектируем систему для ...”
- обнаружения спама
- рекомендаций
- автокомплита
- рассылки маркетинговых предложений
И т.п.
В задачах на систем дизайн обычно рисуем схемы на доске
Обсуждаем следующее:
- какие компоненты есть в нашей системе
- откуда и куда идут данные
- где тренируется модель
- как мы её катим в прод
- как справляемся с нагрузкой
Отличие от задачек (use cases)
В систем дизайне фокус на последний этап процесса - на фазу deployment
В use cases фокус больше на первые этапы
Как говориться к систем дизайну?
Проектировать системы самостоятельно — то есть работать работу. По учебникам это тренировать сложнее
У людей без опыта проектировать системы обычно не просят
Для подготовки к систем дизайну еще можно использовать гугл
Ищем “system design X”, где X — система, которую мы хотим спроектировать. На ютубе много хороших видео
Еще есть хорошая книга, в которой рассматриваются основы проектирования распределенных систем
Она будет полезна всем, кто программирует — не только для собесов
dataintensive.net
На behavioural раунде проверяются софт-скилы
Это вопросы типа “расскажите про ситуацию, когда вы” (tell me about time when ...)
- не согласились с начальником
- затащили проект
- менторили джуна
- поспорили с кем-то в команде
Лучший способ подготовиться к таким собесам — взять ценности от какого-нибудь Амазона и по каждому пункту придумать 2-3 ситуации с работы (или учебы)
amazon.jobs/en/principles
Для каждой ситуации используем STAR формат:
S: ситуация — библиотека Х не работала, никто мне не мог помочь
T: задача — проблему нужно исправить
A: действия — прошел онлайн курс и научился пользоваться Х
R: результат — исправил проблему и научил этому других
У процесса 2 исхода:
- отказ — ничего страшного, бывает
- оффер — ура (но сразу не соглашаемся)
Получили оффер — отлично. Но сначала нужно довести до конца все другие процессы
Поэтому сразу же всем другим компаниям пишем про оффер
Если вышло получить два или больше оффера — поздравляю, теперь можно торговаться
С одним оффером сложнее, но попытаться тоже можно
У меня две любимые статьи про то, как торговаться
Первая
haseebq.com/my-ten-rules-f…
И вторая. Отличается от первой тем, что не призывает играть в игру “кто первый назовёт цифру — тот проиграл”.
В этой статье рекомендуется озвучивать ожидания как можно раньше. По моему опыту, для Европы (Берлина) такой подход работает лучше
thehftguy.com/2017/01/23/car…
Я веду табличку со всеми собесами, на которых был за последнее время. Пока там 46 строк. Большая часть собеседований заканчивалась без оффера
Напоследок порекомендую ходить по собеседованиям хотя бы несколько раз в год
Умение проходить собеседование — тоже навык, и его надо поддерживать в тонусе
На этом про собеседования у меня всё, удачи с поиском и хороших офферов!
С вами был @Al_Grigor
@dsunderhood Hey Data, your thread is ready and compiled. Be sure to mention us from the last tweet to compile older threads. You can read it here: threader.app/thread/1261543…
Тред за выходные: поиск работы и собеседования twitter.com/threader_app/s…
Понедельник
Напоследок, хочу поделиться историей, за которую мне до сих пор стыдно.
Спасибо @hollanderblutet за напоминание — я еще раз задумался по поводу этой ситуации.
Я хочу перед всеми публично извиниться, и рассказать, какие выводы я из этого вынес.
Компания, в которой я работал, спонсировала митапы: предоставляла площадку, а взамен могла заявить своих докладчиков, чтобы что-нибудь рассказать
Однажды мы помогали митапу PyLadies и искали докладчицу, но тогда у нас не было дата саентистов леди, и доклад попросили сделать меня
Мне эта ситуация показалась необычной: не каждый день появляется возможность выступить на митапе для леди.
У меня в руках был телефон с открытым ODS и я решил, что поделиться этой новостью с сообществом — отличная идея.
Вот что вышло. Сложно сказать, чем я думал в тот день, но очевидно, что эмоциональный интеллект в этом сообщение на нуле.
Моя попытка пошутить была интерпретирована, как издевательство над дамами — что они не могут быть докладчиками.
Это не то, что я хотел сказать. Мои слова обидели большое количество людей. Мне стыдно за это и я хочу извиниться за написанное.
Мне очень сложно поставить себя на место женщины, но я понимаю, почему сообщение оскорбительно и не является приемлемым.
Я надеюсь, что моя история будет хорошим примером, что нужно думать, прежде чем писать или говорить. Сказанное может быть интерпретировано по-разному.
Как я писал ранее, коммуникация является самым важным навыком, и этот пример очередной раз это подтверждает.
Написать этот тред мне стоило больших усилий. Признавать ошибки публично очень нелегко.
Пожалуйста, не повторяйте моих ошибок!
@Al_Grigor