Вы почти закончили универ или колледж? Вас пригласили на собеседования, но вы идете туда без подготовки? У вас нет образования (высшего), но хотите работать программистом или в сфере IT? Речь пойдёт по большей степени о поиске работы, я буду говорить лишь за свой город (Челябинск) т.к. искал работу именно здесь.
Когда начинал искать работу, будучи на втором курсе в колледже, я и не подозревал сколько различных компаний есть в нашем городе. От верстальщиков до Deep learning, от тех. поддержки bitrix до разработчика игр (мобильных, соц. сети, desktop).
Я был примерно на 8 собеседованиях (не считая онлайн). Все они были в разных направлениях. Верстка, десктоп разработка игр, веб-разработчик (c#+.net), веб разработчик (bitrix+php), front-end (js+react). От чего-то отказался сам, куда-то не взяли т.к. мало знаю.
Ближе к делу, ближе к коду
Хочется рассказать, что спрашивают на таких собеседованиях и для чего они это делают (объяснить используемые технологии).
Начнем с простого. Верстка
В большинстве случаев всем требовалась скорость верстки. Мне давали два таска (две разные компании). Первое это верстка карточек товаров на сайте. За один час мне нужно было сделать верстку как на картинке, которую мне предварительно скидывали. Ничего сложного в таске нет, но одно из условий это Pixel Perfect (пиксель в пиксель). У меня было пару ошибок: расхождение с макетом (неверное отображение окна оповещения и логика hover эффекта).
Второй таск был еще проще (pixel perfect не требовался). Есть ТЗ (Техническое задание) с правками и их нужно выполнить на сайте. Правки в отображение элементов, что-то под мобилки настроить, изменить отступы, цвет элементов.
Почему так? В наше время очень мало компаний, которая ищет именно верстальщиков, поэтому важна скорость работы. Меньше времени на работу больше заказов, а значит и больше прибыль у компании. На такую должность часто требуется еще препроцессоры (sass,pug) и сборщики проектов (gulp,webpack). А что касается ТЗ, вы будите получать его на любой работе, и следовать ему необходимо! ТЗ у всех разное, в большинстве случаев это текстовый документ со списком правок.
Веб программист (bitrix)
Было 3 попытки в разных компаниях. В одной мне лишь объяснили что придется делать. Поддержка корпоративных сайтов (разработка под нужды этих сайтов) + работа с сервером (настройка и развертывания сайтов). Ни единого вопроса что я могу и что знаю.
А вот на втором собеседовании только и спрашивали что я делал на прошлом месте работы, что могу в bitrix и что вообще изучал.
Ну и самое интересное, это последнее собеседование. Здесь были и вопросы о скиллах, и описание тасков компании, и задачи, которые нужно было выполнить на месте. Рассказать о себе, я надеюсь, вы сможете сами, а вот вопросами я готов поделиться. Предупрежу сразу, не было условия на каком языке нужно писать код, я выбрал JS. Вычислить факториал, что такое бинарное дерево и какие способы его обхода есть, алгоритмы сортировки, обращение к БД (простые запросы), что такое class.php в bitrix.
Вычислить факториал очень просто, не важно какой язык программирования. Реализуете это через рекурсию. Про бинарное дерево уже сложней… двоичное дерево (бинарное) = структура данных. Дерево используется для работы с большими объемами данных, не удивительно, что при приеме на работу с интернет магазинами спрашивают именно это. Сортировка тоже относится к работе с данными. Ну и обращение к БД, большинство сайтов в сети используют БД. Это вывод новостей сайта, товаров, список популярных статей и прочие элементы.
Самое интересное, попытка устроиться desktop разработчиком
Сразу отмечу общие темы: ООП и паттерны.
Зачем? Ну современная разработка без ООП… это очень странно, точно так же, как разработке без паттернов. Да, вы можете делать курсовую во время учебы и не использовать паттерны+ООП, но без минимального понимания, что такое класс, наследование и полиморфизм вас на работу не возьму. ООП позволяет делить программу на блоки, а паттерны, например SOLID, позволяет делить код на независимые блоки, чтобы в будущем можно было с легкостью дополнять их.
Все остальные вопросы были специфичные, смотря с чем работала компания. Например, если это разработчики игр, то требовалось написать тестовую игру используя их движок + документацию, которую они предоставляли по нему. Мне давали детскую 2Д игру (c# + XAML). Суть игры: есть два стакана, один пустой, а во втором лежат карандаши, когда игрок нажимает на ПКМ, то один карандаш перемещается в пустой стакан и на экране обновляет счетчик очков. Требовалось банально посчитать карандаши.
Так же был опыт собеседования и на Unity разработчика, здесь уже было сложней т.к. и игру давали 3Д, и за кодом следили, чтобы не было мусора в нем + присутствие паттернов, у меня даже на github’e все еще лежит этот проект.
Вернемся к компаниям, если это разработка back-end части (c#+.net) то вопросы были по .net платформе и ее подводным камням. Если это разработка приложений, то здесь нужно знать TDD (разработка через тестирование), SOLID, ООП.
Про ООП и паттерны я уже объяснил. Зачем спрашивают про TDD? Честно, я не знаю… сам не до конца понимаю преимущество данного подхода, да это используют некоторые компании, но мне приходилось писать код, таким образом, лишь один раз. SOLID — это 5 паттернов объединенных вместе, после того, как меня спрашивали на собеседовании об этом паттерне, я сразу же принялся за его изучение. Скажу вам честно, мне было сложно понять его, но по итогу получается очень стойкий код, который можно дополнять без вреда уже написанному приложению. Если вам интересен SOLID, то попробуйте написать калькулятор при помощи данного паттерна. Реализуйте сначала + и -, а потом добавьте и другие возможности калькулятору. Я, помнится, писал на c# (консольная программа).
Пожалуй, это все, что я могу вам рассказать о собеседование в своем городе. Да здесь есть и разработчики SPA (reactJS требуется в основном), и разработчики web игр (всё тот же react, в большинстве случаев, а иногда лишь нативный JS), и разработчики python, 1C, JAVA и прочие. Я был сильно удивлен разнообразию используемых технологий и языков. На этом у меня всё, пожалуй. До встречи.
Автор: EpicLegend_gg