Мой фон

В январе 2018 года я закончил полноценный буткемп Coding Dojo. Хотя я технически подкован, у меня не было опыта программирования.

Буткемп был замечательным, и в то же время ужасно-трудным периодом. Я проводил от 12 до 15 часов в день в кампусе, учась. Иногда я ночевал (разбиваясь на мешках с фасолью), чтобы избежать поездок на работу и получить больше времени за клавиатурой. Мое тело пришло в упадок, но я приобрел новый ценный навык. После окончания института я долго искал работу, 10 месяцев! В основном это было сделано для выгорания, но также и из-за того, что 4 месяца не совсем достаточно времени, чтобы должным образом подготовить кого-то к тому, чтобы стать беглым и способным разработчиком.

В конце концов, компания решила рискнуть и наняла меня. Я провел там 1,5 года, усердно работая и все время чувствуя себя подавленным из-за своей неадекватности. Я собрался и переехал в Израиль в январе 2020 года (прямо перед тем, как разразился COVID-19; идеальное время, не так ли?) И в конце концов нашел другую работу в сфере высоких технологий в Израиле, работая в компании по кибербезопасности. На этот раз поиск работы и адаптация прошли очень гладко. За следующий год я сильно вырос. В команде нас было всего двое, оба младшие программисты с опытом ~1,5 года. Без помощи каких-либо опытных людей, которые могли бы наставлять нас, мы наставляли друг друга. Это был настоящий период роста для меня. Через полгода после того, как этот другой разработчик ушел, моя компания решила нанять замену на его должность. Я предложил принять участие в технической оценке кандидатов.

Другая сторона стола

Теперь, проработав 2,5 года профессиональным разработчиком полного стека, я начал проводить собеседования с кандидатами в разработчики, особенно с выпускниками буткемпа. Это совпало с тем, что я подавал заявку на работу в тот же период, поэтому я мог проходить собеседование и проходить собеседование одновременно.

За последний месяц я взял интервью и оценил чуть более 10 разработчиков. Вот что я узнал.

Общие навыки

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

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

Проблемы кодирования

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

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

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

Отношение

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

Что произвело на меня впечатление?

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

Они ответили на большинство моих вопросов, не слишком заморачиваясь и не повторяя заученных предложений (Что такое интерфейс? В чем разница между Javascript и C#?). У них не было идеальных ответов, но они демонстрировали четкое понимание концепций, по крайней мере, на младших уровнях.

Кроме того, эти два парня хотели и могли погрузиться в код. Во время одного из собеседований кандидат не ждал code challenge, но не боялся его попробовать, хотя я дал ему возможность прийти в другой день, после подготовки. Он сказал: «Я сижу и кодирую весь день, так какая разница, буду ли я делать это сам или перед вами?».

Мне понравился этот ответ! Это именно то, что я хочу услышать. Я хочу видеть кандидатов, которые много кодируют. Как новый разработчик с опытом работы всего несколько месяцев, вам необходимо радикально улучшить свои навыки в этой очень сложной и трудной области. Единственный способ сделать это — сидеть и кодить, пока не отвалятся пальцы. Это то, что я сделал, это то, что сделали все мои друзья, это единственный известный мне способ стать хорошим программистом (если вы знаете другой способ стать хорошим программистом, пожалуйста, скажите мне!). Слышать, что разработчик с 3-месячным опытом редко занимается кодированием, — это тревожный знак для меня.

Еще одна вещь, которую они преуспели, заключалась в том, чтобы продолжать учиться, а не только поверхностную информацию. Они явно читали и усваивали документацию или технические статьи о функциях языка и фреймворка. Другие кандидаты читали посты Reddit о шутках Javascript (JS идет брррррррр. Как мне выйти из VIM?) или Tik Toks о глупых технологических тенденциях. Это весело, но бесполезно для улучшения вашего технического понимания.

Что меня удивило, обеспокоило или напугало?

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

  • Незнание общих сочетаний клавиш (CTRL+S для сохранения, переключения между окнами/вкладками). Разработчик показал мне, что они действительно знают CTRL + C, CTRL + V, чем очень гордятся (вздох). Это небольшие проблемы, но они меня немного беспокоят, так как это намеки на тех, кто не разбирается в компьютерах. Если вы используете компьютеры всю свою жизнь, вы сэкономите массу времени с помощью таких маленьких хитростей. Это умножено для разработчиков.
  • Не зная, как изменить общие настройки на своем компьютере/IDE/веб-браузере.
  • Не подумал поставить пароль на свой рабочий ноутбук. (Мы работаем в компании Cyber ​​Security. Привет? Есть кто дома?)
  • Записали свои логины/пароли ко всем своим новым рабочим учетным записям в записную книжку на столе!! Я заставил их немедленно создать учетную запись Lastpass для обработки паролей, но я боюсь, что они не будут использовать это в долгосрочной перспективе. Разработчик хотел забрать блокнот домой и протестовал, когда я настоял на том, чтобы они немедленно уничтожили эти страницы после ввода паролей в Lastpass.
  • Едва знал, что такое IP-адреса/порты.
  • Мне потребовался час, чтобы объяснить, как работают брандмауэры. Это особенно расстраивает, так как мы работаем над продуктом, который управляет брандмауэрами, а также из-за того, что у этого разработчика есть степень CS. Чему учат в школе?
  • Их воображение расширилось до предела, когда они поняли, что наш продукт SaaS может иметь одну установку для каждого клиента и отдельные учетные записи для пользователей в этой компании. По-видимому, идея о том, чтобы иметь корпоративную подписку вместо учетных записей пользователей, была трудной для понимания.
  • Они изо всех сил пытались понять, что чтение и запись правил брандмауэра — это два разных действия.
  • В этом испытании кода разработчика (хотя два других разработчика представили ту же ошибку, поэтому, похоже, она довольно популярна среди юниоров), при изменении возраста/имени пользователя вместо того, чтобы делать что-то вроде this.currentUser.name = newName;, они делали this.currentUser = new UserModel(newName);, что было очень плохо для видеть.
  • Не знал, что такое индекс.

Резюме

  1. Я ожидаю, что кандидаты, которые хотят получить от меня рекомендацию для найма, смогут разумно говорить об общих технических проблемах и знаниях. Вам лучше сказать мне, что Chrome и Firefox — это разные браузеры, кроме того, что у них разные значки, даже если я не ожидаю, что вы сможете рассказать мне о многих внутренних различиях. Вы должны гораздо лучше понимать общие черты выбранного вами языка/фреймворка/стека (интерфейсы C#, строгая типизация в Typescript, определения таблиц в SQL, циклы for, async/await vs promises в JS, как использовать выбранное вами состояние библиотека управления в React и др.).
  2. Если вы претендуете на работу по написанию программного обеспечения, вы должны быть в состоянии запустить IDE и написать код. Если вы не можете определить функцию или не можете реверсировать массив, вам не следует проходить собеседование при приеме на работу. Я не ожидаю ни чистого кода, ни четкой логики, ни способности решать сложные манипуляции с данными, но вы должны уметь писать работающий код определенного качества.
  3. Некоторые люди просто не обладают навыками, необходимыми для этой работы, и, вероятно, никогда не будут. Хотя это может быть спорным, я рекомендовал по крайней мере одному кандидату рассмотреть позиции QA, поскольку его многолетний предыдущий, связанный с этим опыт дал ему преимущество в этой области, а также его полное отсутствие базового понимания основных концепций программирования. несмотря на большие усилия с его стороны. Вы не неудачник, если не получили работу в сфере технологий; некоторых из нас просто нет. Точно так же я не чувствую себя плохо из-за того, что не являюсь игроком НБА. У всех нас есть навыки, которые мы привносим на стол. Технология вознаграждает очень узкий и хорошо развитый набор навыков, но есть много других хороших профессий.