Что такое I в ACID или вы нам не подходите
Это пост удивления. Я сходил на собеседования в 3 минских стартапа и в одну небольшую компанию, и вот, что из этого вышло.
Немного расскажу о себе. Не хвалы ради, а чтобы дать нужно представление. С детства увлекаюсь программированием. За уши не оторвать было от компа. В разработке 11 лет. Пол сотни проектов разного уровня сложности: мобильные, кроссплатформенные, фронт, бек. Писал на 13 языках (без учета всяких html, css, bash, sql). На чем-то больше, на чем-то меньше, но все в реальных проектах. Пишу хороший чистый код, шарю в юзабилити. Немного open source, насколько позволяет время, майнтейню пару десятков пакетов для Arch Linux. Короче, развлекаюсь, как могу и в рабочее, и в свободное время. Последние лет 5 на фрилансе. Часто работаю над бизнес-кейсами заказчика от и до. ЧСВ не раздуто: когда видишь скилл, и как пашут некоторые ребята на GitHub… Ну вы поняли. И вообще я норм: носки меняю, дезодорантом пользуюсь, матом почти не ругаюсь :)
Так вот, я завалил 3 из 4х собеседований, и я хочу об это поговорить.
Никому нет дела до твоего кода
Show me your code and I will say who you are
Самая удивительная на мой взгляд вещь. Тебя будут спрашивать про сортировку красно-черных деревьев, про методы стандартной библиотеки, которые используются раз в приблизительно никогда. Но код… В самом деле, зачем смотреть код человека, главная работа которого будет заключаться в том, чтобы его писать?
Но это же самое интересное! Можно посмотреть, как разработчик организует проект, как пишет, какие технологии и как использует. Это сразу закроет тучу вопросов. Ладно, когда github пустой, а весь рабочий код под NDA. Но и тут можно выкрутиться, дав небольшое тестовое на час-два (только не на месте: для многих собеседование это всё-таки стресс).
На моем github два десятка проектов на разных языках, PR’ы в репы Facebook, Microsoft, Mozilla, куча issue в другие проекты. Это же клондайк для оценки как hard, так и soft скиллов. И, похоже, только одна компания из четырех знала, что с этим делать (Akveo, вы молодцы). Мы очень классно обсудили, почему эти проекты появились, вместе посмотрели код. Глянули кое-что из рабочих проектов, как по коду, так и в релизе. От этих ребят я оффер в итоге и получил.
Торжество бесполезных знаний
«Невежество Холмса было так же поразительно, как и его знания. Чтобы цивилизованный человек, живущий в девятнадцатом веке, не знал, что Земля вертится вокруг Солнца, — этому я просто не мог поверить!
— Вы, кажется, удивлены, — улыбнулся он, глядя на моё растерянное лицо. — Спасибо, что вы меня просветили, но теперь я постараюсь как можно скорее всё это забыть.»«Этюд в багровых тонах»
Как часто вы пишете сортировки? Я вот последний раз делал это в универе. А знаете, какие этапы в https-handshake? Я знал когда-то, забыл — не надо. Но мне хватило 5 минут, чтобы открыть гугл и вспомнить, когда настраивал A+ рейтинг в nginx пару лет назад. И знаете что? Сейчас я опять не помню. Этапы рендеринга интернет-страницы в браузере? Каждый день с этим встречаюсь, правда-правда. А то, что поиск по B-tree индексам в PostgreSQL имеет логарифмическую сложность? Я вчера узнал, вот теперь и вы. А сейчас постарайтесь забыть как можно скорее! До тех пор, пока вам это ДЕЙСТВИТЕЛЬНО не понадобится. Оставьте в голове только то, что индексы надо использовать и что они бывают разных типов.
Мы живем в мире перегруженном информацией. И для разработчиков это особенно актуально. Каждую неделю появляются новые фреймворки, библиотеки или инструменты для разработки. Невозможно знать всё. Сейчас важна не столько информация в голове, сколько знание, что она есть, умение быстро её находить, разбираться и правильно использовать. А навык отдебажить и пофиксить чужую библиотеку в проекте важнее, чем помнить, как использовать стримы в nodejs. Со стримами хороший разработчик разберется по доке на раз-два.
Я сейчас немного преподаю в универе в качестве хобби. И знаете что? У текущего поколения нет таких заморочек насчет забивания головы знаниями. Хотя многие из них действительно толковые. Они выросли с постоянным онлайном, где информация всегда под рукой. Другой подход.
Конечно, хороший узкий специалист будет знать много разных ньюансов. Просто за счет того, что скоуп меньше. Но забавно то, что большинство из этих компаний искало фуллстек разработчика. И хотели глубоких знаний во всем. Вот прямо сейчас. А ведь правильный фуллстек — это кругозор и умение углубиться, когда надо.
Тебя валят
Не везде это было, но встречалось. Интересно, это у нас менталитет такой? Задоминировать и показать свою крутость? Тебе ведь к ним не сильно-то и надо, хороших проектов у тебя на год вперед. Идешь с мыслью: «Ну классная же идея у стартапа! Правда ведь хорошо помочь могу». А тут вот это. И ребята вроде адекватные. Фиг пойми. А потом видишь, что вакансия пол года открытой висит. Ну-ну.
Было пару собесов в западные компании. И там акцент был на то, что ты знаешь и умеешь, а не попытках подловить на незнании. Или это мне так повезло/не повезло? Был бы рад услышать мнение более опытных в этом вопросе товарищей.
Будьте на равных. Вы нанимаете себе коллегу, а не сторожите будку.
Пофигу на прошлые проекты
Дерево узнают по плодам, а человека — по делам
Русская пословица
Тоже удивительно. Их пол сотни под капотом: маленькие и большие; командные и те, где ты в одно лицо спроектировал UX, API, написал 2 моб. приложения, фронт и бек; те, которыми гордишься, и те, за которые до сих пор стыдно. Ну комон, это же важно, давайте поговорим про это. Я же все расскажу: где был супер-стар и всех спас, а где залажал по полной. Нет, глупые вопросы про CSS.
Проекты — то, откуда мы черпаем свой опыт. Это этапы развития разработчика. Как кольца на дереве. Всегда спрашивайте про проекты. Про самые сложные и интересные задачи, которые решал человек. Про то, чем он гордиться. Это еще и поможет выстроить дружелюбную атмосферу. Помните же, что собеседование — это стресс? Людям нравится рассказывать о том, в чем они были хороши. Правда, с интровертами не сработает, но собес с ними — это вообще отдельная тема.
Опытные разрабы
Хорошего опытного разработчика не собеседуют как мидла на галеру. Он уже не про это. Он про то, как сразу сделать хорошо. Чтобы не пришлось потом героическими усилиями решать проблемы. Он про то, как выпустить продукт, а не судорожно фиксить затыки в производительности, хотя можно было с самого начала просто сделать по-другому. Все то, о чем вы спрашиваете, он уже где-то использовал в том или ином виде. OAuth? Да фиг знает, как он там работает. Пару лет назад делал, сейчас проект открою посмотрю. С того момента пол сотни либ, SDK и протоколов подключал. Что, все помнить? Он не станет читать к собесу про ACID и CAP, как студент к экзамену.
Умейте понимать уровень человека, который перед вами, и задавайте правильные вопросы.
Ремоут
Так вот лежит он на пляже и одной рукой набирает rm -rf на dev-сервере. Ну то есть это он так думал.Подслушано в офисе GitLab
Полупункт на самом деле. Потому что не для всех важно. Многие просто не умеют. Другие не хотят. Хотя, блин, 2020 год на улице, хорошего разраба днем с огнем не сыщешь. А тут целый потенциальный мир, вместо одного города. Казалось бы.
С ремоутом как с сексом: в первый раз страшно и мало у кого хорошо получается. А потом с опытом все лучше и лучше. Не поверите: ремоут может быть продуктивнее работы в офисе. За счет того, что уходят все эти дерганья и отвлекания. А если еще и разные часовые пояса… Знаете админское правило 15 минут? Подожди, перед тем, как разбираться с проблемой пользователя. Часто она или решится сама, или станет неактуальной. Так и тут. Когда понимаешь, что не можешь дернуть человека — включается мозг, 1 шт. И да здравствует асинхронное взаимодействие!
Искренне надеюсь, что эта статья кому-то поможет лучше выстроить процесс собеседований в своей компании или стартапе. Всем hello world, open source и жвачка!