Подготовка
Примерно в середине января этого года, когда была пройдена половина курсов по профессии Бэкенд Node JS, у меня почему-то появилась уверенность в том, что я уже всё умею и могу, а если даже чего-то не знаю, то быстро это пойму и быстро этому научусь. Для меня всё таким же неизвестным оставалось множество слов из вакансий на hh: webpack, sass и прочие. Но пройдя некоторые курсы на хекслет, я начинал понимать, что сложно в этих инструментах только название (где-то так и было, где-то нет). Я начал неистово рассылать всем свое резюме и иногда отправлял резюме на те вакансии, где самому было понятно, что я не соответствую даже на 5%. Как и ожидалось, половина не отвечала, другая половина отказывала. Но некоторые присылали тестовые задания: нарисовать таблицу, написать скрипт по сценарию и пр. Получив тестовое задание, я осознавал, что совершенно не понимаю с чего начинать и как продолжать, поэтому из соображений этикета я отвечал работодателям, что на данном этапе не обладаю необходимыми навыками для выполнения этого задания. Примерно неделю я шерстил hh, мной было отправлено около 100 откликов, примерно 5% прислали тестовое задание, остальные либо отказали, либо не ответили. Тут я вспомнил про другой сервис поиска работа - SuperJob, однажды на нём я нашёл свою первую работу в Мск, когда собирался переезжать. Зашел туда, посмотрел на свое резюме трехлетней давности, посмеялся. Добавил туда всё о программировании и произвел те же действия, что и на hh. На следующий день я получил уведомление о том, что работодатель приглашает меня на собеседование по вакансии веб-разработчик…
"Клюет"
Итак, компания занимается разработкой продуктов на основе RFID-технологий (окей, гугл). Пришел в назначенное время, меня пригласили в переговорку. Напротив был руководитель департамента разработки и ведущий веб-разработчик. Я сразу предупредил их, что это моё первое интервью по этой профессии и я немного волнуюсь. Руководитель меня заверил, что “всё нормально”. Попросили рассказать о том, что я вообще знаю и умею. После того, как они прослушали мои “навыки” (там был хекслет, и ещё один известный сервис по вёрстке), руководитель задал мне вопрос “Вы знаете, что такое массив?”. Было очень неожиданно получить такой вопрос, потому что массив для меня казался элементарной единицей в программировании, и по моему мнению задавать вопрос о массивах на собеседовании было лишним (я сюда программировать программы пришёл или что вообще). Но, как вы понимаете, в данной ситуации я ничего не решал =) Первый вопрос был о том, как в отсортированном массиве найти индекс искомого объекта самым эффективным способом, не прибегая к методам из коробки...
Еще в октябре прошлого года, начиная изучать программирование, я спрашивал у своего друга о книгах, которые необходимо прочесть. По его совету начал тогда читать “Грокаем алгоритмы”. На тот момент в голове не было никаких знаний о JS, просто я читал и пытался запомнить. Память меня не подвела: в этой книге одним из первых алгоритмов описывается бинарный поиск в массиве. Что это значит? То, что я благополучно ответил на первый вопрос.
Потом была задача: есть 8 шаров одинакового размера и веса и один шар такого же размера и чуть большего веса. Также есть аптекарские весы (весы с двумя чашами). Нужно найти шар большего веса с помощью весов за две итерации. Ответ писать не буду, я думаю задача простая и вы справитесь =) Затем ведущий разработчик попросил описать или написать функцию “Палиндром” - осталось всего лишь вспомнить решение из курсов. Мне это удалось. Следующей была еще одна функция. Догадались какая? Верно! “Reverse”. Эту задачу мне приходилось решать не только на хекслете, поэтому я почувствовал себя гуру, когда приготовился отвечать. После “четкого разложения по полочкам” о двух способах решения этой задачи (итеративный и рекурсивный), веб-разработчик и руководитель переглянулись между собой, и потом сказали, что мои знания находятся не на самом низшем уровне. Это конечно не могло не заставить гордиться собой.
Тестовый запуск
Через неделю мне поступил оффер со стажерской зп на два месяца (испытательный срок) с дальнейшим повышением. Я попросил встречи с ведущим разработчиком перед тем, как начну работать. Это было нужно мне для прояснения стека технологий, чтобы хотя бы вкратце изучить вопрос. К моему удивлению внятных ответов я не получил (кроме среды разработки и сборщика), но услышал такое - “достаточно не быть дураком”.
7 февраля я начал свой испытательный срок. Так как выбирать мне не приходилось, то меня поставили перед фактом того, что в этом коллективе я - фронтенд. Стоит сказать, что я поэтому и начал изучать бэкенд, потому что ни в зуб ногой в дизайн и всё, что с ним связано. Но это никак не повлияло на то, что первые два дня я вообще не понимал чего от меня хотят и что мне нужно делать, когда передо мной ставили тестовые задачи. Мне помог мой старый товарищ, который уже 7 лет работает в этой сфере. Мы созвонились с ним на выходных, он помог мне накидать каркас того, что мне нужно было представить. В понедельник я показал выполненное задание, получил новое - внести некоторые фичи. Начал работать. Уходило много времени на всё это: я не знал, что такое обработчики событий, не знал, что такое flex-раскладка, не знал, как инициировать проект. Через месяц таких мучений я всё же сильно продвинулся в этом плане (субъективная оценка). Я понял, зачем нужен первый проект на Хекслете - если бы я его делал, то прошёл бы испытательный срок на месяц раньше. Я разобрался со сборщиком Gulp, с GIT. GIT есть в курсах, я его проходил, запомнил, но до конца мне удалось его понять только на реальной работе. Потом дали задание сделать веб-интерфейс на фреймворке, который используется только в этой компании и нигде больше. Это отдельный вопрос, который заставил меня колебаться в отношении этой компании, т.к. они отрицали тот же React и все другие мейнстримы. По этой же причине я замедлился в исполнении тестовых заданий и мне дали понять, что такими темпами испытательный срок не пройти. После некоторых рассуждений я понял, что моих навыков недостаточно для того, чтобы судить об использовании в работе тех или иных инструментов. Я всё-таки программистом хочу быть, а не пользователем популярных либ. Также в первый месяц я совершенно забросил хекслет, т.к. после работы вообще не хотелось думать. У меня такое было впервые, но видимо мозг тоже каким то образом устает. На второй месяц стало как-то попроще, и я потихоньку начал осваивать всё то, что я не прошёл по вечерам после работы. Позже появилось время и силы читать книги. Неделю назад руководитель мне сообщил, что я готов к реальности и чуть позже мы с ним обсуждали веб-интерфейс того продукта, который мне предстояло сделать.
Открытый космос
Сейчас я остановился в середине курса асинхронного программирования. Я понимаю уже сейчас, что эти знания мне будут нужны в моем проекте. Прочёл книгу “Программист-прагматик”, и начал читать книгу “Linux. Системное программирование”, Роберт Лав. Как же мне помог во всём этом Хекслет? Во-первых, вот таким неявным способом подачи информации - чтобы понять многие вещи приходилось гуглить, ютубить и пр. В работе я также столкнулся с тем, что многие задачи передо мной ставились расплывчато, и приходилось потом догонять с помощью различных средств. Надеюсь, что с опытом я буду всё понимать сразу (или не буду). Во-вторых, это решение учителя. Пишешь такой решение на 20 строк, открываешь решение учителя - там 2 строки, или хуже того - 1 строка. Написав решение на работе мне почти всегда удается сократить его на половину, а иногда даже на две трети (как я позже узнал - это отражает принцип DRY). В-третьих, тесты. К сожалению, я не пишу тесты (не умею, или не хочу, или еще что-то). Но после написанного решения я почти всегда вручную проверяю пограничные значения, что помогает мне избежать неприятных ситуаций тогда, когда мое решение проверяет руководитель.
И напоследок хочется выделить некоторые вещи, которые могут послужить советом для тех, кто ищет работу в новой сфере:
- Учитесь решать элементарные задачи. Даже если вы не видите практического применения функции “Палиндром”, то всё равно решайте ее, находите различные решения, пытайтесь оптимизировать существующее решение. Все сложные решения состоят из композиции простейших решений. Ну и они элементарно помогут вам пройти некоторые собеседования, как мне =)
- Всегда спрашивайте себя и более опытных людей или коллег - является ли это решение оптимальным? Почти всегда ваше решение будет носить неоптимальный характер, и если немного погуглить или поспрашивать, то вы обнаружите, что можно было написать короче, или вообще не писать (!) некоторых вещей. Это не всегда приятно осознавать, но это самый ценный опыт.
- У вас может возникать чувство глубокой депрессии и апатия при получении нового задания. Я спрашивал - это оказывается нормально =) Кажется, что задача слишком сложная, непонятно, с чего начинать. Как я справляюсь с этим? Стараюсь найти хоть какую-то зацепку, решить хоть какую-то микрозадачу. В общем, сделать так, чтобы хоть что-то работало. Дальше клубок решений начинает распутываться всё быстрее и быстрее. Потом вы переходите к фазе “решение учителя”, а потом к пункту 2.
Когда у меня появится еще какая-нибудь интересная тема, то я обязательно продолжу свой блог. Желаю всем успехов на работе!)))