Привет! Я — Дмитрий Троян, PHP TechLead и ментор обучения в NIX. Я занимаюсь как техническим развитием, так и поддержкой боевого духа команды. Учиться никогда не поздно. Именно поэтому я решил структурировать свои знания за годы практики в IT и занялся менторством начинающих PHP-разработчиков.
Для старта в профессии PHP считается одним из лучших вариантов.
Вам понадобятся интерпретатор PHP, сервер или встроенный веб-сервер PHP, браузер — и можно приступать к написанию кода.
Попробовать себя сегодня в любой технологии — это значит не упустить свой шанс на успешную карьеру завтра. Языки программирования, библиотеки, фреймворки постоянно обновляются, а также появляются новые. PHP уже многие годы доказывает свою жизнеспособность. Благодаря PHP появились и до сих пор работают 80% ресурсов (например, Facebook, Wikipedia, WordPress, Yahoo). Высокая производительность языка позволяет легко масштабировать приложения для работы на тысячи серверах. При этом они способны выдерживать огромную нагрузку.
Если вы джуниор или опытный в других направлениях программист с начальными навыками в PHP, эта статья поможет вам подготовиться к собеседованию на позицию PHP Developer. Мы разберем основные моменты для всех уровней специалистов — junior, middle, senior.
Составление резюме: на что обратить внимание
Главное правило во время составления резюме — не перегрузить документ лишней информацией и при этом не сделать его «сухим» или состоящим из двух-трех строчек. Даже если у вас нет опыта — это не приговор. Всегда можно описать то, как вы видите свое развитие, к чему стремитесь и какими способами достигаете своей цели.
Читайте также: «Даже цвета могут сыграть против вас»: как разработчику составить резюме, которое устроит на работу мечты. Инструкция и примеры
Junior
Из года в год к команде NIX присоединяются студенты разных университетов. Как правило, технические вузы выпускают более подготовленных к IT специалистов, но есть достаточно сильные кафедры и факультеты компьютерных технологий в других вузах. Просматривая резюме, мы всегда обращаем внимание на направления и специальности, которые осваивают ребята. Для того, чтобы определить уровень их знаний и навыков, мы предлагаем пройти технический тест, после чего анализируем полученный балл по таким критериям:
- Знание основ синтаксиса языка. Достаточно разбираться в типах данных и управляющих конструкциях, обладать навыками решения задач и описания алгоритмов. Если вы понимаете, что можете написать функцию, которая рекурсивно обходит массив произвольной вложенности — это приемлемый уровень.
- Знания верстки и CSS. Здесь стоит понимать, какие виды тегов существуют, знать, чем
<ol>
отличается от<ul>
и разбираться в стилизации страниц. - Навыки взаимодействия с Git. Студент должен понимать, для каких целей служит этот инструмент, и знать о последствиях его отсутствия. Также важно ознакомиться с базовыми операциями, которые можно осуществить с помощью Git:
init
,clone
,pull
,push
,fetch
,add
,commit
.
Помимо студентов, все чаще мы встречаем взрослых специалистов, которые хотят кардинально сменить профессию. Хорошо, что наша отрасль дает такую возможность.
В резюме свитчера хочется увидеть, насколько человеку удалось переобучиться.
Например, что конкретно было усвоено, в каком объеме и за какой промежуток времени. Также важно наличие небольшого портфолио, даже если это разработки на уровне лабораторных работ, загруженные на GitHub/GitLab.
Middle/senior
Здесь обязательно нужно акцентировать внимание на предыдущем опыте специалиста, а именно — с какими задачами сталкивался потенциальный кандидат и какой уровень ответственности на нем лежал.
Если человек подробно описывает свою карьеру, добавляет в резюме технологии и уровень их понимания — это хорошая почва, чтобы познакомиться поближе и в дальнейшем пригласить кандидата в проект. Профиль на GitHub/GitLab с примерами кода будет плюсом, но его наличие необязательно. Иногда случается так, что кандидат прекрасно писал код для заказчика, но при этом не участвовал в опенсорс-проектах и не загружал ничего в сеть.
Собеседование: как подготовиться к разговору
Во время общения с junior-специалистами мы, конечно же, не обходимся без базы. Это позволяет нам определить уровень понимания кандидатом таких тем, как:
- клиент-серверное взаимодействие;
- протоколы HTTP и базовые принципы ООП;
- SQL и проектирование баз данных;
- механизмы взаимодействия с серверами, сессиями и формами;
- знания в области верстки и стилей.
Если говорить о практической части собеседования, мы даем возможность решить несложную задачу. Чаще всего — это написание небольшой функции. В процессе выполнения задания можно выяснить, насколько хорошо новичок владеет синтаксисом языка, умеет ли структурировано подходить к написанию кода, правильно ли именует переменные, функции и методы. Также мы обращаем внимание на то, как человек рассуждает во время решения задачи.
Иногда некоторые собеседования — это отдельная серия ситкома «Говорим о PHP и разработке программного обеспечения» 🙂 Причем независимо от уровня кандидата.
Однажды после разговора соискатель сказал нам, что его главная цель — походить по собеседованиям и узнать, какие вопросы задают и какие задачи нужно решать. Это честный подход, но из-за того, что у соискателя отсутствовали даже базовые знания о PHP, он оставил после себя неприятное впечатление. Встречаются и кандидаты, которые своей искренностью и рвением к любимому делу заполняют любые пробелы в знаниях. Смотришь, как человек здраво рассуждает, как он хочет попасть в команду и понимаешь, что именно с ним после обучения можно даже горы свернуть.
Когда мы видим в человеке стремление учиться, мы всеми силами пытаемся помочь соискателю присоединиться к нашей команде. Например, рекомендуем записаться на нашу программу обучения по РНР, делимся ресурсами для самостоятельного обучения от наших экспертов, советуем свою дистанционную платформу обучения. Кандидат в установленный дедлайн готовится к следующему собеседованию, подтягивает знания и может снова попробовать свои силы.
Со специалистами уровня middle и senior мы используем другой подход. Например, на собеседовании даем несколько взаимосвязанных классов и просим кандидата сделать ревью кода: поделиться своим мнением и предложить правки. Берем задачи из реальных проектов, предлагаем разобрать нетривиальные случаи и пофиксить нетипичные баги, а также просим кандидата поразмышлять над запросом заказчика и предложить свое решение ситуации.
Определить, подходит ли кандидат на позицию, можно задолго до интервью
Аккуратность и четкость заполнения резюме, умение выделить главное и презентовать себя — все это сразу бросается в глаза. Общее впечатление о кандидате также складывается из того, как человек доносит информацию, насколько он открыт, что и как рассказывает о себе и готов ли присоединиться к команде.
Я заметил тенденцию, которая свойственна некоторым соискателям: почитали пару статей и посмотрели несколько обучающих роликов на YouTube — и уже рвутся на собеседование.
Но если у PHP есть репутация легко изучаемого языка, это не означает, что такой мало-мальской подготовки будет достаточно. Это ловушка для людей с нетехническим образованием.
За настоящим успехом в карьере стоит готовность многому учиться с нуля, уверенный инженерный бэкграунд или развитие в себе соответствующих технических навыков.
Нет волшебной микстуры, которая за две недели сделает из вас программиста. Изучить базу и взойти на первую ступень джуна — это большой труд. Даже после многих лет в IT нужно продолжать учиться и расширять свои горизонты. Только постоянно совершенствуясь, мы становимся профессионалами.
О чем чаще всего забывают
Новички не углубляются в базовые понятия. Но ведь всегда важно изучить основы, чтобы понимать, что служит фундаментом в той или иной области технологии. Довольно часто кандидаты не разбираются, как работает механизм сессий.
Без базового понимания веб-технологий сложно будет осознать, что клиент-серверное взаимодействие — это не магия, а конкретный набор правил, объектов и связей между ними.
Как начинающие, так и более опытные ребята могут не выделить ту информацию в резюме, которая действительно может нас заинтересовать. Здесь важно помнить о балансе между «сухим» списком технологий, рассказом о достижениях в карьере и своих личностных качествах.
Что нужно изучить
Ознакомьтесь с этими материалами, которые позволят качественно подготовиться к собеседованию.
Для комплексной подготовки на позицию Junior PHP Developer
Книги:
- Дмитрий Котеров, Игорь Симдянов, «PHP7»;
- Мэтт Зандстра, «PHP. Объекты, шаблоны и методики программирования» (первая, вторая и четвертая часть книги).
Сетевые технологии:
- стек протоколов TCP/IP;
- протоколы HTTP, FTP.
Клиент-серверная архитектура:
- общие положения об организации архитектуры приложений;
- архитектура веб-приложений.
Сервер Nginx:
Клиентское окружение:
CSS:
- Cascading Style Sheets, level 1;
- Cascading Style Sheets Level 2 Revision 1 ;
- CSS Snapshot 2018;
- Twitter Bootstrap.
JavaScript:
ООП:
- назначение и цели ОО-подхода (в сравнении с процедурным);
- основные принципы ООП, ООА и ООД;
- шаблон Model View Controller (MVC).
PHP:
- среда разработки (IDE PHPStorm);
- основы языка PHP;
- функции взаимодействия со строками, массивами и базой данных;
- session и cookies;
- операции работы с файловой системой и файлами;
- сериализация данных;
- функции работы со временем;
- обработка XML;
- обработка JSON;
- регулярные выражения;
- работа с изображениями;
- работа с CLI;
- работа со встроенным веб-сервером PHP;
- ООП в PHP;
- применение шаблонов проектирования в PHP;
- изменения в новых версиях PHP;
- стандарты кодирования PSR;
- стандарты PSR-12 21. Стандарты PSR-0 и PSR-4 и автоматическое подключение классов;
- стандарт логирования PSR-3;
- стандарт по реализации HTTP messages;
- обработка ошибок в PHP.
Библиография:
- PHP The Right Way;
- менеджер зависимостей Composer;
- разделение логики и отображения.
Symfony или Laravel:
- основные понятия и архитектура Symfony;
- установка;
- компоненты;
- маршрутизация и контроллеры;
- база данных;
- формы;
- в качестве альтернативы (или дополнительно) рекомендуется ознакомиться с документацией фреймворка Laravel.
Операционная система Linux:
- отличие файловых систем Linux и Windows;
- права доступа в системе Linux;
- работа с командной строкой;
- основы работы в редакторе vi/vim/nano.
СУБД:
- Основы SQL. Уметь создавать запросы для эффективного манипулирования данными.
- Установка и настройка MySQL. Получить необходимые знания для установки и настройки СУБД MySQL.
Система контроля версий Git:
- понять назначение подобных систем и получить базовые знания для работы с ними.
Git и GitHub:
- понять принцип взаимодействия распределенных систем и получить базовые знания о Git и сервисе GitHub.
Bugtraсking-системы:
Теория без практики — мертва. Чтобы закрепить полученные знания, для джуниоров мы разработали дистанционную платформу с тремя этапами обучения и тестовыми заданиями. Освоив базовые навыки онлайн и выполнив все задачи, вы получите обратную связь и рекомендации от экспертов NIX и сможете попробовать свои силы на собеседовании в нашу команду.
Для подготовки к собеседованию на позиции Middle/Senior PHP Developer
В случае с опытными специалистами важен широкий кругозор. Иногда разработчики из-за незнания готового решения изобретают «велосипед», который им потом надо поддерживать, хотя можно было применить проверенный способ. Но для осознанного использования готовых решений как раз и нужно глубокое понимание того, как они функционируют. То есть посмотреть на технологию с высоты своего опыта, сравнить и выбрать наиболее подходящий инструмент для решения задачи. Поэтому получать новые знания стоит, даже когда вы достигли вершин в карьере.
В моем топе полезных ресурсов, книг и статей я бы выделил следующие:
- Блог Мартина Фаулера, где вы найдете ответы на прикладные вопросы и общие подходы в IT.
- Мартин Фаулер «Рефакторинг» — книга, которая поможет писать код чище.
- refactoring.guru — сайт для тех, кто хочет постигнуть распространенные паттерны проектирования и разобраться с «запахами» кода .
- Эрик Эванс, Предметно-ориентированное проектирование (DDD). Структуризация сложных программных систем. Предметно-ориентированное программирование — это подход, который навсегда перевернет мир восприятия ООП и разработки в этой парадигме.
- Simon Brown, Software architecture for Developers — для более продвинутых специалистов, которые планируют расширять свои горизонты и хотят стать Lead Developers и Tech Lead в проектах.
Удачи всем на собеседовании! И помните: самый лучший день изменить что-то — это сегодня.
Читайте также: Как пройти собеседование на Python-разработчика: что важно знать и уметь
Этот материал – не редакционный, это – личное мнение его автора. Редакция может не разделять это мнение.
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: