Привет! Меня зовут Артур Домбровский, и я наставник и соавтор курса «Java-разработчик» в Яндекс Практикуме. Зарабатываю на жизнь программированием уже более 7 лет, из которых больше трёх провёл в Amazon. Сейчас я — старший программист/тимлид в финтех-компании Wise. Последние пару лет плотно вовлечён в процесс найма, собеседую и джунов, и принципал-инженеров.

Хочу отметить, что всё сказанное ниже — моё личное мнение и не даёт инсайта о том, как на резюме смотрят эйчары. Но может помочь людям, которые начинают карьеру в бэкенд-разработке.



Какие пет-проекты делать, чтобы было легче найти работу?


Тема этой статьи родилась из вопроса, заданного на вебинаре одним из студентов. Я посоветовал не тратить на это время, хотя интернет забит рекомендациями и примерами портфолио.

Под пет-проектом мы понимаем некий самостоятельный, написанный кандидатом от начала и до конца сервис. Это может быть доска объявлений, to-do-лист, социальная сеть для фотографий котиков и т. д. При создании такого проекта требуется написать архитектуру приложения, реализовать её и, возможно, написать фронтенд-часть, а также задеплоить проект на сервер. В теории звучит прекрасно, но есть проблема.

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

Да и начинающий разработчик, скорее всего, не сможет создать проект, действительно достойный внимания. В итоге, с точки зрения интервьюера, мы получим проект, автор которого умеет следовать статьям. Это хорошо, но недостаточно.

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

Альтернатива пет-проектам


Мне, как интервьюеру, гораздо интереснее кандидаты с записью в резюме о контрибуции в open-source-проекты. Open source даёт кандидату весомые преимущества в глазах нанимающего менеджера:

Идеальное замещение реального опыта работы. Open source даже лучше реального опыта, потому что то, что делал кандидат, доступно для просмотра, а не скрыто в приватных репозиториях и под кипами NDA. Тот факт, что за этот код не заплатили, меня мало волнует.
Вне зависимости от размера вклада (а это может быть лишь пара строчек) сам процесс — именно то, чем будет заниматься новый разработчик в своей будущей команде. Нужно взять большой и сложный проект, разобраться в нём, внести изменения, протестировать, получить одобрение команды. Отсутствует только шаг релиза, но вряд ли свеженанятого начинающего разработчика допустят релизить код в продакшен без присмотра.

Требует большей глубины навыков. И эти навыки будут ближе к коммерческой разработке: взаимодействие с инфраструктурой, запуск проекта, тестирование, создание пулл-реквеста, отработка замечаний. Как правило, внесение изменений требует обоснования, которое невозможно без глубокого понимания механизмов работы проекта и вовлечённых технологий. Это один в один то, чем занимаются разработчики в реальных проектах.

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

Идеальная тема для интервью. Все изменения в проект с открытым исходным кодом, внесённые кандидатом, публичны и видны всем. Их корректность проверена сообществом с высокими требованиями к качеству кода, этой библиотекой или сервисом пользуются люди. Внесённые изменения требовали работы мысли, о которой мне захочется поговорить во время интервью. Мне интересно, почему было принято такое решение, какие альтернативы были рассмотрены, как была найдена причина данного бага.

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

Во время лайвкодинга я не увижу, как код будет протестирован и как он был бы написан в спокойном состоянии. А ведь мы никогда не работаем под дулом пистолета, а сидим в спокойных, уютных офисах. У нас есть время и чашка кофе, и мы можем создать хорошее решение. Интервью — это стресс. Если у меня есть возможность посмотреть, что кандидат делает, когда спокоен, это идеально. Если нет — простите, но я принимаю решение из полученной во время интервью информации. Я приложу максимум усилий, чтобы сделать интервью комфортным, но не всё в моих силах.

Обязательно включайте в резюме проекты с открытым исходным кодом. Это реальный опыт работы, просто за него не заплатили. С моей точки зрения, open source будет смотреться на порядок весомее, чем портфолио из очередных CRUD-сервисов.

Как выбирать проекты для контрибьюшена


Чтобы выбрать проекты, в которых можно поучаствовать, зайдите на GitHub в раздел Explore.



В Explore зайдите в раздел Trending Repositories и выберите в нём язык коммуникации и язык программирования, на котором написан проект, например Java.



Так вы отфильтруете популярные, активные репозитории, где контрибьюторы общаются на английском и основной язык самого репозитория — это Java.



Дальше найдите репозиторий, который вам по душе, и зайдите в раздел Issues — это все открытые задачи на проекте. Выбирайте issue с максимально подробным описанием — идеально, если описаны шаги, необходимые, чтобы воспроизвести проблему.

Вот пример такого issue:


Также можно подписываться на топики по интересующим вас темам, инструкцию можно найти тут.

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

Возможно, имеет смысл отправиться в средние по популярности проекты — там будет меньше конкуренции и больше простых нерешённых задач. Если репозиторий за один день лайкнули 500 раз, то вокруг него крутится много контрибьюторов. Новичку лучше выбрать менее конкурентный проект.

В open-source-проектах джуну важно показать максимальную самостоятельность. Пройдя весь этот путь, он покажет, что знает, что такое Git, умеет создать pull request и достаточно знает про Java, чтобы запустить проект и внести в него какие-то значимые изменения. А если он чего-то не знал, то самостоятельно нашёл решение. Это максимум, который я могу требовать от джуна.

К кому обращаться за помощью, если пишешь для open source


В open source довольно доброжелательное комьюнити. Если вы правильно задаёте вопросы, вам всегда помогут. Навык задавать вопросы — тоже важен для IT, но обладают им далеко не все. Половина моих студентов после четырёх месяцев объяснений всё ещё периодически загружает не текст исключения и описание проблемы, а сообщение: «Помогите, что делать?»

Правильно сформулированный вопрос в IT состоит из таких пунктов:
  1. Описание состояния, которое вы пытаетесь достичь, например: «Пытаюсь библиотеку валидации ABC:1.2.3 заставить работать с фреймворком FooBar:3.2.1».
  2. Перечисление, что вы для этого делали, — пошагово.
  3. Описание, куда смотрели, что читали и пробовали.
  4. В идеальном случае достаточное количество информации, чтобы проблему можно было воспроизвести.
  5. Вопрос, какие шаги нужно предпринять дальше, чтобы приблизиться к решению.

Это и будет идеально заданный предметный вопрос. Если вопрос более абстрактного характера, то такой алгоритм тоже подходит, например: «Я смотрю на технологию A и технологию B. Мне кажется, что технология A имеет такие преимущества и недостатки, а технология B — такие, что я упускаю?»

Вопросы, заданные в таком формате, демонстрируют уважение к отвечающим:
  • Избавляют от необходимости уточнять. Вы можете что-то упустить, но должны по крайней мере прилагать усилия, чтобы у отвечающего была полная информация. Человек может быть в другой временной зоне или ответить через неделю. Если ему надо переспрашивать, это увеличивает turnaround time до неприличия.
  • Свидетельствуют о том, что вы не просто наткнулись на проблему и тут же подняли лапки. Вы копали по разным направлениям, у вас есть прогресс, и вам как минимум не нужно советовать то, что уже испробовано. Вы действительно потратили своё время и действительно в тупике.

Open source делает вас самостоятельной боевой единицей


С моей точки зрения (только с моей, не с позиции Amazon или Wise), джун — это самостоятельный разработчик, которому можно отдать на откуп компонент с довольно чётко прописанным ТЗ. А дальше, при минимальной помощи и поддержке от других членов команды, он должен довести работу до конца. Это человек, которому я могу сказать, в каком месте у нас баг, при каких условиях он появляется, и попросить решить. Джун сделает пусть не идеальное, но самостоятельное решение. Если не сделает, то это не джун, а человек, который ещё только учится.

Перейти из стадии «просто учится» в джуны можно как раз с помощью open source. Такие проекты — это доказательство, что человек стал самостоятельным. Следующей ступенью эволюции будет мидл — специалист, которому можно поручить дизайн компонента, работающего на уровне всего проекта. А следующая ступенька — уже синьор. Он видит много сервисов и может работать над их взаимодействием, над всей системой. Это довольно условные разграничения, но самостоятельность нужна в любом случае.

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

У джунов же горящие глаза и рудиментарные навыки, а будет ли из них толк — становится понятно через полгода. И часто оказывается, что толка не будет. Чем больше продемонстрируете доказательств вашей самостоятельности, тем лучше для вас.

Выводы


  • С точки зрения работодателя, наём — это риск. Дорогой риск. Поэтому в найме false positive лучше, чем false negative. Лучше не взять потенциально хорошего программиста, чем нанять плохого.
  • Джунов сложнее собеседовать и страшнее нанимать, потому что они стоят в найме не намного дешевле синьоров, пользы от них на порядок меньше и получает её компания гораздо позже. То есть какое-то время бизнес просто тратит деньги в пустоту.
  • Понять про джунов на собеседовании тоже можно гораздо меньше — у них слишком мало опыта. Зачастую они не могут рассказать, что делали, какие ошибки допустили и чему научились. А это важно, чтобы оценить кандидата.
  • Open source, на мой взгляд, идеальный вариант сэкономить ресурсы компании и заявить о себе. Этот вариант подойдёт и рекрутерам, и HR-специалистам — у них есть строчка, в которой указывается, какие проекты человек делал. И это идеально для меня как для нанимающего инженера. Ведь я могу посмотреть и реально увидеть код кандидата.
  • Собеседование — это стресс, а работаем мы в спокойном состоянии. Мне интереснее посмотреть, как будет выглядеть код, написанный дома для реального проекта, чем на нервный лайвкодинг.
  • Open source — это опыт, о котором можно заявить в CV и который даёт вам действительно полезные навыки коммерческой разработки. А пет-проекты показывают, в каких инструментах заинтересован человек, какие базовые действия он освоил в процессе учёбы.

Комментарии (18)


  1. panzerfaust
    05.04.2023 07:46
    +3

    С моей точки зрения (только с моей, не с позиции Amazon или Wise)

    А нанимают как раз Amazon, Wise и Яндекс, а не вы. И всем этим машинам просто наплевать на ваш вклад в опенсорс, пока вы не главный мейнтейнер либы из топов npm или maven central.


    1. AliKamil Автор
      05.04.2023 07:46
      +3

      Перефразирую - это не является официальным мнением кампаний, но отражает мое мнение как практикующего интервьюера в тот же Wise. Плюс это обсуждалось с нашими эйчарами и другими интервьерами. Так что нет, топа от начинающего не ждут.


  1. Akriosss47
    05.04.2023 07:46

    Если сейчас начать учить весь стак джаваскрипт реакт и тд.Есть шанс что возьмут или зависит?Потому что как вы говорите берут только мидлов и выше,подавал на стажировку месяц назад,тех интервью рассылали, сдал- никто не взял.


  1. vldmrmlkv
    05.04.2023 07:46

    Джунов сложнее собеседовать и страшнее нанимать, потому что они стоят в найме не намного дешевле синьоров, пользы от них на порядок меньше и получает её компания гораздо позже. То есть какое-то время бизнес просто тратит деньги в пустоту.

    Будет ли компания меньше бояться джунов если будет предлагать стажировку с нестрашной для них оплатой для дообучения с последующим трудоустройством?


    1. AliKamil Автор
      05.04.2023 07:46

      Это все равно инвестиция - тратится время имеющихся сотрудников на обучение. Зависит от положения кампании, но тот же Практикум начинался как школа для внутреннего обучения - когда вырастить оказалось легче чем найти.


      1. vldmrmlkv
        05.04.2023 07:46

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

        Встречал ещё такой вариант, когда сотруднику покупали курсы и заключали договор на то, что он вернёт стоимость если уволится в течении года после прохождения курсов, но это было с уже работающими сотрудниками т.к. проект был сложный и это сработало.


  1. MrNutz
    05.04.2023 07:46

    В одном месте написано про сеньора в 2-3 раза дороже джуна, где то про джуна, который не особо дешевле синьора. Это как?

    В наших реалиях средний джун пускай будет 100, а синьор 250. Разница явно существенная. При чем джун это именно из статьи, который сам чего то могёт, а не прокладка между монитором и креслом, которую надо держать за руку после очередных недокурсов.

    Что касается пет проектов и опенсурса, то это тоже ни о чем. Во-первых, все должны этим заниматься что ли? Ну вот реально. Людям больше заняться нечем, как делать что-то ради показухи? Сам люблю покорить что то для себя. Ключевое - для себя, а не для кого то ещё. И информационным эксгибиционизмом тоже не страдаю чтобы свое обязательно куда-нибудь выложить.

    Во-вторых, человек может отлично владеть инструментом, т.е. средствами разработки, но совершенно не соображать как это применить в контексте бизнеса. Видел такое часто. Да, язык знает хорошо, но толку... В этом плане ни пет проект, ни опенсурс об этом не расскажут.


    1. AliKamil Автор
      05.04.2023 07:46
      +2

      Имею в виду стоимость найма для кампании. Предположим, что оба не проходят испыталку - зарплата за этот период составляет только часть общих затрат кампании.

      По поводу пет-проектов и open source - нет, никто не обязывает этим заниматься, но это возможность получить конкурентное преимущество. Как раз open source позволяет увидеть применение навыков в контексте - а остальное выясняется на собеседовании.


  1. kompilainenn2
    05.04.2023 07:46

    добро пожаловать в OpenSource, но практика показывает, что даже те, кто хотели бы, пугаются и уходят сразу почти


  1. saboteur_kiev
    05.04.2023 07:46
    +2

    1. Проблема в том, что очень многие не понимают смысла термина "пет проект" думают, что это тестовый проект. А на самом деле, еще в школе можно делать кучу пет проектов, без знания архитектуры, кое-как, кое-что и получить несколько лет опыта разработки, причем пройдя по граблям, и потом почитав про архитектуру и код стайл, будешь отлично понимать разницу

    2. open source - бывает очень очень очень разный. В хороший open source сложно войти с нуля, зато можно познакомиться с полным циклом разработки, с код ревью, с взаимодействием, с багтрекером и так далее.
      А можно попасть в опенсорс пет-проект, где ничего не организовано вообще.


    1. kompilainenn2
      05.04.2023 07:46

      Вообще то я приглашал в конкретный проект, LibreOffice, видимо ссылка не работает


      1. sshikov
        05.04.2023 07:46
        +1

        Ну, тут прекрасно видна типовая проблема таких проектов (в качестве вклада в портфолио). Они обычно (те, что кому-то интересны) достаточно сложные, очень часто — сложнее того, что джуну дадут на типовом первом месте работы. Вот и ваш пример — если судить по гитхабу, у ядра LibreOffice более 1000 разработчиков. Это большой проект. По разработчикам — так раз в 10 больше любого из проектов, что я в жизни видел. Очень сложно туда войти со стороны.


        пугаются и уходят

        Ну так потому и пугаются, очевидно...


        1. kompilainenn2
          05.04.2023 07:46

          А что показывает количество контрибьютеров в проекте? Сложность проекта? Вряд ли. Ну и у нас есть список изи хаков для как раз начинающих кодеров. Но все же ищут что попроще, одни индусы ничего не боятся...


          1. sshikov
            05.04.2023 07:46

            Сложность проекта? Вряд ли.
            Почему вряд ли? Конечно это не единственный параметр, но у простого проекта никогда не будет 1000 разработчиков. То есть, это не достаточный признак, но один из важных. Я не говорю что все проекты такие — я говорю, что выбор подходящего для начала деятельности проекта вещь непростая. В конце концов, я скажем был готов участвовать в проектах типа Apache Camel или там Karaf после того, как года три с лишним пользовался обоими — и имел опыт нетривиального применения. А без такого опыта — ну зачем там первый попавшийся джун? На рутину?

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


      1. 9982th
        05.04.2023 07:46
        +1

        Вообще то я приглашал в конкретный проект

        Это не совсем очевидно в такой форме. При виде фразы "добро пожаловать в OpenSource" у меня сработал детектор сарказма и по ссылке я ожидал, например, неадекватного майнтейнера, который отклоняет толковый PR по надуманным причинам.


        Касательно самого приглашения — я испугался уже просто увидев название. У меня есть представление о LibreOffice как о большом и страшном проекте, который даже просто компилируется дольше, чем ядро Linux. И страница по ссылке, говорящая "The source is written in many different languages and formats — C, C++, Java, Bash, JavaScript, Python, Perl, SQL, XML — and consists of roughly 102,000 files (excluding all localizations) ", это представление только укрепляет.


        Чтобы начать что-то делать с кодом, нужно разобраться со структурой проекта (те самые сто тысяч файлов), с системой сборки, как запускать тесты, для отправки патча придется заводить аккаунт во внутреннем трекере. Не факт, что впечатление, которое произведет на интервьюера, не поленившегося открыть гитхаб, коммит с заголовком "removed unused imports in UI tests", стоит потраченных вечеров и горы информации о конкретном проекте, которую сложно применить в других местах.


  1. Polaris99
    05.04.2023 07:46
    +1

    Если у джуна есть вклад в опенсорс или достаточно сложные пет-проекты - то это уже не джун. Хотя с этой вашей классификацией, когда через полгода опыта - уже мидл, а через два - полновесный сениор, и не такое, наверное, бывает.


  1. buka_jaz
    05.04.2023 07:46

    проекты для контрибьюшена >> не знала. Спасибо полезная статья, не только для разработчиков, но и для QA растущих в автоматизацию (где нужна JAVA). Тестировщику тоже нужно ориентироваться в инструментах разработчика и демонстрировать знания языка.


  1. Guul
    05.04.2023 07:46

    У меня одного пет проекты написаны левой пяткой где работает лишь happy path, а обработка ошибок реализована по минимуму? Просто если есть проблема, которую можно решить программным путем, то тратить лишний час на ошибки которые никогда не возникнут - это как-то такое себе удовольствие.

    Я бы свой код из пет проектов в ынтерпрайз не пустил.