Привет, Хабр!
Недавно команде разработки beeline cloud попалась вот такая статья. И оказалась она довольно дискуссионной. Настолько, что мы решили ее перевести и узнать мнение широкой аудитории — а кто же, по вашему мнению, достоин называться синьором?
Похвально, когда ради карьерного роста специалисты отваживаются пройти собеседования на инженерные должности. Достойно уважения и то, что они понимают сложность предстоящих им испытаний, сопряженных порой со стрессовыми ситуациями.
Уже несколько лет я провожу собеседования с инженерами для различных компаний. В последнее время, как никогда ранее, угрожающе выросло количество кандидатов, которым приходится отказывать в должности. Ничего не изменилось в методах тестирования — вопросы те же самые. Проблема в людях — они не имеют представления о том, что значит быть старшим инженером. И это при огромном спросе на подобных специалистов.
Десятилетний опыт в программировании на деле ничего не значит. Не время определяет статус senior’а.
Постараюсь описать, что для меня значит быть старшим инженером в области разработки программного обеспечения.
Так кто же ты такой, старший инженер?
ChatGPT (чат-бот с искусственным интеллектом) выдал следующую формулировку:
Старшие инженеры обладают глубоким пониманием языков программирования, принципов проектирования программного обеспечения и методологий разработки.
— изрёк чат-бот и тут же обесценил наше маленькое исследование
Рассмотрим пример классического собеседования.
Методологии разработки
Организационные методы, направленные на повышение эффективности работы команды специалистов, называются методологиями разработки. Они могут быть довольно нудными, но, тем не менее, вы должны уметь разбираться в них.
Годы работы привили мне неприятие методологий, лишённых гибкости. Более того — я считаю, что даже Scrum недостаточно гибок. Его чрезмерное использование в конечном итоге тешит самолюбие менеджеров проектов в большей степени, чем программистов.
В собеседованиях с разработчиками я ищу в них способность к критике. Недостаточно знать Scrum, важно также понимать его недостатки и уметь найти методы их устранения.
Знание разработчиком других методологий, кроме Scrum и Kanban (таких, как, например, RUP) говорит в его пользу. Оно свидетельствует о готовности учиться за пределами своей области.
Принципы проектирования программного обеспечения
Есть правила, которым профессиональные программисты следуют каждый день. Когда-то вы о них читали, затем благополучно забыли, но на уровне подсознания они всегда с вами.
Востребованность инженера уровня «рокзвезда» гораздо выше, чем у его коллег. Дело не только в программировании. Высококлассный инженер обладает невероятной креативностью и способностью видеть концептуальные закономерности, недоступные другим.
— Рид Хастингс, cоучредитель компании Netflix
Готов поклясться, я мог бы сделать клише и в отзывах кандидатам после окончания каждого собеседования впечатывать один и тот же ответ:
Рекомендую вам более внимательно ознакомиться с паттернами проектирования Python. В частности, советую обратить внимание на это руководство.
Кандидатов можно отфильтровывать в том числе и по паттернам проектирования, которых они придерживаются или просто знают. В очень редких случаях я получал ответы абсолютно на все свои вопросы.
Освоив паттерны проектирования, можно столкнуться со сложностью их применения на практике. Лично мне доводилось попадать в ситуации, когда при написании кода не удаётся их сразу вспомнить. Умение заставить себя при программировании каждый раз выполнять самопроверку, продвинет вас на шаг вперёд.
Языки программирования
Почему в Python принято использовать len(array), а в других языках – array.length()? Есть ли в этом какая-то логика?
А хорошо ли вы знаете этот язык и то, как он работает «под капотом»?
Литература по изучаемому языку программирования абсолютно необходима каждому, кто хочет приобрести фундаментальные знания. Лишь опираясь на полученную таким образом информацию, вы будете готовы к непременным каверзным вопросам собеседования.
Плохое впечатление губит многие собеседования
Ребята, нельзя ли побыстрее с ответом? У меня так-то есть предложения и от других компаний.
— Слова кандидата на собеседовании, когда ему предложили задать вопросы о предстоящей должности.
Предлагая огромные зарплаты, компании ищут незаурядных людей. Поэтому умение произвести хорошее впечатление на интервьюера сыграет вам на руку.
Оценивается не только уровень подготовки кандидата, но и его отношение к делу. Недавно, например, компания попросила нас искать в большей степени «хороших и честных» людей, нежели великих программистов.
Тщеславный человек оказывает негативное воздействие на коллектив. Рядом с ним слишком тяжело работать. И в долгосрочной перспективе ущерб, нанесённый им компании, может обойтись очень дорого.
Дурные манеры или заведомая ложь могут привести к немедленному исключению из конкурсного отбора.
«Как завоевывать друзей и оказывать влияние на людей» — одна из книг, которую должен прочитать каждый. Она поможет понять, как правильно устанавливать взаимоотношения в коллективе.
Опытные инженеры должны уметь руководить командой. Нужны высокие коммуникативные способности, чтобы занять эту должность. Не забывайте об этом.
Что нужно знать младшему/среднему звену, чтобы подняться на ступень вверх?
Несколько замечательных ресурсов помогут вам в этом:
Community Driven Roadmaps
Лучшие веб-сайты, которые должен посетить программист.
Искусственный Интеллект для имитации собеседования или создание собственного карьерного пути.
А как же навыки работы с кодом?
Несколько месяцев назад я купил LeetCode Premium. Интересные математические курьезы, паттерны и оптимизации от других пользователей очень помогли мне. Благодаря этой подписке я сумел получить мою нынешнюю работу.
Имитация собеседования в крупной компании также не повредит. Она позволит получить представление о том, что ожидает вас в реальности.
Стремясь к звездам, вы, возможно, достигнете неба.
— Рейнгольд Нибур
Есть и другие сайты, подобные LeetCode, например, AlgoExpert и CodeSignal.
Суровая правда
Даже прочитав множество материалов, практикуясь каждый день и имея большой опыт, вы можете получить отказ, потому что не соответствуете профилю компании.
Несколько дней назад я слушал подкаст, где рассказывалось об эксперименте, в ходе которого детей заставляли решать задачи, а затем разделили на две группы:
первую группу похвалили за сообразительность;
вторая группа заслужила поощрение за упорство в поисках решений.
Когда им предложили более трудные задачи, дети, которых хвалили за упорство, справлялись с ними. В то время как дети, считавшиеся сообразительными, в конечном итоге отставали в их решении.
Как видите, главными вашими чертами должны стать упорство и настойчивость. Именно этих навыков все ожидают от старшего инженера. И они же обеспечат вам работу в будущем.
Что еще почитать инженер-программисту?
Jmix — любовь с первого взгляда, если ты Java-программист
Автор объясняет, почему его компании нужен только Jmix: подробно об инструментах и интерфейсе
Показываю по шагам, как наша компания применяет Quality Assurance на всех этапах работы над продуктом
История о том, как обеспечить качество продуктов и фиксировать опыт работы.
Как пересобрать сложную разработку в облачное решение и начать работу с малым и средним бизнесом
Практический кейс о том, как переделать кастомный логистический продукт в облачное SaaS-решение и привлечь сотни клиентов.
beeline cloud — secure cloud provider. Разрабатываем облачные решения, чтобы вы предоставляли клиентам лучшие сервисы.