Pull to refresh

О роли тестовых заданий в жизни разработчика

Reading time5 min
Views6.7K

Сколько технических интервью было у вас в жизни?


За последние пять лет я побывал на 35 технических интервью всех вообразимых видов и специфик — от казахстанских стартапов по коллективной закупке мяса на зиму до немецких и американских финтех-сервисов и банков; с уклонами в программирование, деливери и управление; удаленных и в офисе; ограниченных и неограниченных по времени; стрессовых и расслабленных, на разных языках.

Это, вкупе с ~20 собеседованиями, которые я провел сам в качестве нанимателя — достаточное число, чтобы стать королем собеседований сделать следующее наблюдение (изначально совершенно неочевидное) и утвердиться в нем: я убежден, что во многом благодаря такому количеству собеседований, начинающему походить на маргинальную привычку, я изучил свой стэк на профессиональном уровне и стал конкурентоспособным специалистом при том, что до этого уже работал 10 лет в веб-разработке.

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

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

Почему качество наших фундаментальных знаний оставляет желать лучшего?


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

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

Однажды, не дав нужного, но, как вы понимаете, непредсказуемого ответа на этот вопрос я остался без оффера, чему несказанно рад.

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

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

Применительно к моему родному JavaScript есть хороший пример — если бы не появился React.JS, 98% JavaScript-программистов успешно продолжали бы жить в блаженном неведении о том что такое bind — спустя 20 с лишним лет после его появления — и продолжали бы впадать в недоумение, получая вопросы о нем на собеседованиях, а работать с ним продолжали бы только те, кто изобретает все эти высокоабстрактные библиотеки, фреймворки и модули. Сегодня, благодаря реакту, это число удалось сократить, по ощущениям, до 97%.

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

Чем чреват недостаток фундаментального знания языка


Ответ на этот вопрос кажется банальным, но почему-то в человеческой природе — всегда задвигать его решение в дальний угол — и это играет грустную роль в жизни junior и middle программистов, удлиняя их путь к вершинам (и глубинам) знания языка на пару-тройку лет.

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

Будущее проектов, разрабатываемых с таким, пусть по незнанию, но безответственным подходом, прозаично и непродолжительно: существенные потери времени на ровном месте, сбои, финансовые и репутационные потери и, как следствие, снижение энтузиазма к продолжению сотрудничества.

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

ActualizeBot


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

В боте на данный момент есть 3 простых функции:

  • Подписка на тот или иной язык / фреймворк с тем, чтобы получать по нему новые задачи. Вы подписываетесь и по мере поступления, задач, получаете их в ежедневной рассылке
  • Публикация задачи или тестового задания — In my book they say sharing is caring
  • Великолепный генератор имен, с помощью которого вы сможете подобрать оптимальную подпись для публикуемого вами текста задания, включая словари женского рода, не лишенные феминитивов

На данный момент на выбор предлагаются следующие языки: JavaScript, Java, Python, PHP, MySQL. Выбор несколько ограничен в связи с границами моего понимания. Надеюсь с помощью хабрасообщества пополнить этот перечень.

Бот запущен в сугубо рок-н-рольном формате, оплата за что-либо не предполагается.
Перейти в него можно по ссылке: ActualizeBot

Вкратце о технической реализации


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

Фреймворк построен на базе Telegraf.JS и TypeScript, его ноль-ноль-первую версию, оснащенную примером использования, можно посмотреть на гитхабе и сразу же попробовать. Вскоре я выгружу расширенную и причесанную для человека со стороны версию 0.0.2 и посвящу ему (хоботу) отдельную статью. Буду рад если для кого-то он окажется столь же актуальным, сколь и для меня.

Итак, на скольких собеседованиях вам пришлось побывать?
Уверен, у вас есть что рассказать!
Tags:
Hubs:
Total votes 15: ↑13 and ↓2+11
Comments36

Articles