Моё имя — Никита Калитин. В настоящее время (с 15 мая 2019) работаю инженером-программистом в одном из НИИ. Обязанности: поддержка легаси кода и новые проекты, PHP/JS/MySQL. Отработал здесь уже 5 месяцев, с весны 2019 года официально трудоустроен.
- О вузе и работе «многоруким админом»
- Знакомство с «Хекслетом»
- О поиске работы и собеседованиях
- Заключение
О вузе и работе «многоруким админом»
Решил, что ухожу из распространённой профессии «многорукий Шива» (он же «админ», он же «инженер техподдержки», он же «пАграммист») к концу 2015 года. До этого прошёл путь от выпускника вуза по специальности «Инженер АТПП», через электромонтёра, эникея, выездного инженера, сервисного инженера, инженера техподдержки, до системного администратора. Несмотря на то, что студентом интересовался Linux системами (Slake, Mandirva, Alt), так вышло, что в процессе переездов по стране максимально быстро получалось находить работу в мире Windows, что вообщем-то и логично.
В вузе изучал ANSI С\С++ и Assembler. Эти курсы к 30 годам были забыты капитально. Не говорю уже о базе — алгоритмах и структурах данных и прочее. В нашем вузовском курсе информатики такого не было, да и зачем эти предметы инженерам по автоматизации? Изучил какую-нибудь SCADA систему — и работай с ней.
Тем не менее мысль о переходе в разработку не покидала меня с первого официального рабочего дня. Пробовал разные курсы. В 2010 дистанционно начинал учить Java, в 2013 начинал курс на Codecademy. Плохое знание английского сильно помешало. В 2016 году прошёл пару курсов по администрированию Linux в «Специалисте». В 2017 году попал на стажировку в одну известную компанию, но не прошёл их грейды и снова оказался в поисках. Потом были ещё обломы — много собеседований с отказами, несколько неудач.
Знакомство с «Хекслетом»
Про «Хекслет» узнал в 2017 году, начал проходить бесплатные уроки. Потом оформил платную подписку, так как даже бесплатные уроки дали очень много для понимания. Я был в шоке, думал, почему не нашёл этой информации раньше. Начал проходить задания, параллельно искал и брал заказы на фрилансе (WP + разные доработки по мелочи).
Большое спасибо моей жене — она поддерживала меня тогда и поддерживает сейчас. Далеко не каждая женщина согласится с тем, что у мужа то пусто, то... не густо. В таком режиме — поиск заработка, попытки максимально быстро освоить большой пласт знаний и не утонуть в обилии технологий, сохранить семейные отношения — мне очень помогли головоломные уроки на «Хекслете», которые я потихоньку проходил.
Сначала прошёл уроки по PHP. Потом переключился и на другие. Отношение к JavaScript постепенно менялось от «ненавижу это убожество», до «ммм, какое изящное решение можно сделать, используя мой любимый язык JS». На курсах «Хекслета» познакомился с функциональным программированием. Это был срыв шаблонов и та ещё головоломка. Мозги и сейчас дымятся от некоторых задач.
Появилась привычка — ни дня без кода. Стал активно использовать Git. Наконец-то стал активнее на GitHub'е (с момента создания учётки прошло 3 года). Прочитал несколько интересных книг из рекомендованных на «Хекслете». В процессе чтения нашёл ещё несколько интересных авторов, например Зандстра и Скиена. Стал пробовать свои силы в разных конкурсах по программированию. Например, это были олимпиады «Яндекса» (второй отборочный весной не прошёл), «Цифровой Прорыв 2019». Здесь собрал команду, добрались до финала в Казани.
Сейчас на работе частенько использую то, что наработал на курсах. Например, подружился с Lodash. Эта библиотека меня очень выручает. Composer и автозагрузка — а как без них вообще можно работать? С выходом на официальную работу и плотным графиком разных мероприятий немного забросил курсы. Но сейчас вернулся, решил, что стоит пройти проекты по JS-бэкенду и добить остальные курсы, которые начал.
О поиске работы и собеседованиях
Работу искал через hh.ru в основном, так как, с моей точки зрения, на Superjob и Jobmo значительно больше «черных» организаций. Искал на junior'a, дословно — «крепкий junior, возможно где-то и за middle сойду, но считаю себя junior'ом». Хотя у многих своё понимание кто такой junior.
Из резюме убрал всё лишнее, особенно то, что могло попасть под формулу «я знаю кунгфу, каратэ, айкидо, джиу-джитсу и много других страшных слов». Оставил только то, что хорошо пощупал, или в чём разбираюсь. Обязательно писал адресное сопроводительное письмо, даже если рассылка была веерная. Адресная «сопроводиловка» с указанием именно тех скиллов и опыта, которые могут пригодится организации, повышает отклики работодателей.
Во время звонков эйчаров и кадровиков просил дать возможность пообщаться с техническим специалистом. Иногда получалось пообщаться по телефону или по скайпу. Иногда ездил на собеседование. Иногда делал тесты удалённо, иногда на собеседовании. Дословно тесты не сохранил. Вот несколько важных тезисов.
Тезис 1: портфолио или даже несколько адресов рабочих проектов однозначно добавляют очки. На нескольких собеседованиях показал часть сайтов, которые делал на фрилансе. Было видно, что интервьюверов они заинтересовали. Начинался более предметный разговор — движок, SEO, кроссбраузерность, адаптивная вёрстка. Удобно, что можно сразу показать и сказать — это делал сам, это было уже до меня, а это уже сломали после меня и вообще, обновите свой Firefox, он безбожно устарел :-)
Тезис 2: по JS часто спрашивали понимание понятий «всплытия», «замыкания». Были задачки в перемешку с вопросами на листочках из разряда «какую ошибку выдаст браузер в консоли», то есть базу знать надо. Частенько попадались простые задачи, которые можно было решить как с помощью рекурсии, так и с помощью циклов или функций map/filter/reduce. Циклы оценили только 1С-ники (да, ходил на пару собесов после чего понял - не моё!). Кто-то гонял по синтаксису ES-
Один товарищ спрашивал, какие JS-фреймворки знаю или слышал. Потом долго рассказывал про Angular, говорил, что это единственный полноценный фреймворк и агитировал изучать его.
Многие просто давали от 5 до 20 задач и час времени. Замечу, что полезно для тех задач, которые не решил, написать алгоритм. Потом по ним тоже можно пообщаться.
Некоторые искали специалиста по конкретной библиотеке, например для отрисовки и рендеринга 3D-моделей в браузере.
Тезис 3: БД — надо знать ответы на общие вопросы, например, чем отличается left join от right join, какие встроенные функции есть в MySQL. Могут задавать вопросы от бекапов до сложных запросов. Для собеседующих был важен опыт работы на highload, иногда спрашивали про нормальные формы: какие бывают и как избавиться от связи многие ко многим.
Тезис 4: PHP-фреймворки, версия, уровень проектов, количество запросов в сутки — были такие вопросы. Использую ли PDO или ORM, если использую, то какие, чем плох ActiveRecord. Использую отладчики или нет. Какие паттерны проектирования знаю, как написать Singleton на PHP (очень частый вопрос и популярный — про фабрику и фабричный метод). Стабильно спрашивали про передачу аргументов в функцию по значению и по ссылке.
На собесах по PHP-разработке частенько начинались вопросы с протокола HTTP: как работает, чем GET от POST отличается, что такое query string, тело запроса и так далее. Многие спрашивали, что такое REST API, с какими приходилось работать, и конечно, владею ли я регулярными выражениями. Честно отвечал, что владею на уровне «сконструировать с помощью regex101», часто ответ был засчитан как рабочий. Использую ли и как использую Git, в чём его преимущества, достоинства и недостатки. Такие же вопросы о Composer и автозагрузке классов.
На собеседованиях на текущее место работы точно были вопросы по паттернам, по фреймворкам, по сложным запросам в БД и регулярке, и да, мне разрешили поставить Linux на рабочую машину, что я и сделал в первый же день с заранее заготовленной флешки. Два года работаю на Lubuntu, доволен всем.
Также сложилось впечатление, что пройти собеседование у программиста моложе меня на 5-7 лет сложнее, чем у того, кто старше.
Не бойтесь общаться и спрашивать. Нужно получать обратную связь от интервьювера. Собеседование — это трата времени каждой стороной, поэтому логично получить обратную связь в стиле «что мне стоит подтянуть, а по каким критериям я уже подхожу». Лучше получать обратную связь сразу после собеседования с техническим специалистом, потом могут и забыть.
Советы новичкам:
- После 30 можно стать программистом. Проходите Hexlet, и добро пожаловать!
- Потребуется адское терпение, много усилий и настоящее желание — без этого, увы, никак.
- Пишите каждый день. Решайте каждый день. Общайтесь в сообществе «Хекслета», задавайте вопросы!
- Заведите учётку на GitHub, и сразу создавайте учебные/рабочие проекты. Проекты на «Хекслете» в этом вам помогут. Не бойтесь корявого *овнокода. *овнокод — это этап развития программиста. Не ошибается только тот, кто ничего не делает. А если проходить курсы на «Хекслете», внимательно изучать решение учителя, то корявость будет постепенно уходить.
- Учите английский. Он нужен.
- Сил, энергии, хорошего настроения и успехов!
Заключение
Иногда хочется опустить руки, когда не пойман баг, или бьёшся несколько часов или дней над какой-то технической проблемой. Помогает переключение. Зашёл на «Хекслет», решил пару новых задач, или перерешал старые — самооценка подросла. Смотришь — и по основной задаче новые мысли появляются.