Что должен знать полноценный веб разработчик

по мотивам статьи меня пригласили выступить с докладом :)
слайды можно скачать тут

Я провел большое количество собеседований с кандидатами на должность веб программиста. Однако многие не дошли и до первой несгораемой суммы.

Делюсь своим мнением, что же должен знать веб программист уровня тех. лида на самом деле.

Полноценный веб-разработчик должен знать все, что касается жизненного цикла сайта от верстки, до настройки всех необходимых функций веб-сервера, чтобы работало быстро и стабильно. Иначе чуть что - сразу тупик.

У меня есть большой список требований к кандидатам, который составлен на основании моих собственных знаний и опыта разработки крупных интернет-проектов. 

Битрикс в этом списке присутствует по стечению обстоятельств. Важно, понимая все минусы битрикса, понимать, что платформа успешно решает задачи бизнеса и рынок насыщен проектами на этой платформе.

Некоторые требования выходят далеко за стандартные границы — это необходимо, чтобы кандидат был в состоянии собрать действительно сложный проект.

Ниже представлен список вопросов для вакансии или собеседования на должность "ведущий веб-программист (разработчик)".

Общее развитие

PHP

Подразумевается, что вы уже имеете исчерпывающее представление обо всех стандартных функциях и дополнительных возможностях языка

  • работа со строками
  • работа с массивами
  • работа с файлами
  • работа с потоками и контекстами
  • работа с почтой (mail(), PHPMailer)
  • замыкание, анонимные функции
  • работа с XML и JSON
  • работа с HTTP запросами (REST)
  • работа с веб-сервисами (SOAP)
  • работа с веб-сокетами
  • работа с картинками (GD, imagick)
  • Reflection API
  • composer
  • PHPDoc комментарии и phpDocumentor
  • PSR
  • знать возможности PHP-7

Знакомство с PHP-фреймворками основательно вправляет мозги, особенно при работе с битриксом, так что это тоже будет плюсом. И хотя многие больше не готовы работать с битриксом после работы с фреймворками - скорее это хорошо, чем плохо. С этого момента начинается бурный профессиональный рост веб-разработчика.

PHP и ООП

  • использовать объекты, а не ассоциативные массивы
  • наследование, полиморфизм, инкапсуляция
  • классы, неймспейсы, интерфейсы и трейты
  • атомарность, композиция и дилегирование
  • паттерны проектирования (знать и не злоупотреблять)
  • автозагрузка (PSR-4)

MySQL

  • чтение плана исполнения запроса
  • построение индексов
  • оптимизация сложных запросов
  • ручное написание запросов
  • проектирование архитектуры БД
  • не использовать join'ы на больших объемах данных
  • использовать подзапросы, только когда нельзя обойтись без них

Суть всех этих требований - уметь организовать правильное храние данных и уметь писать оптимальные запросы к БД, с учетом объема данных и частоты обращений к ним.

Битрикс

Git

  • основательное знакомство с книгой “Pro Git”
  • branch flow
  • commit culture
  • pull/push
  • rebase -i
  • cherry-pick
  • merge --no-ff
  • repo maintenance
  • Bitbucket/Gitlab/Github
  • уменьшение размера репозитория
  • решение конфликтов

Из 10 человек на собеседовании - с гитом умеет работать 4, а каждый день его использует только 1. Невероятно, но это так.

PhpStorm

  • git
  • diff
  • terminal
  • ssh
  • deploy
  • search in projejct
  • go to file/class/function
  • go to declaration
  • find usages
  • bookmarks
  • hotkeys

Другими словами - быть, как рыба в воде. Использовать встроенные возможности по максимуму. Знать все горячии клавиши.

Highload и DevOps

  • настройка веб-сервера Apache/Nginx
  • балансировка
  • репликации/шардинг
  • кеширование/инвалидация
  • nosql: Redis/Memcache/Tarantool/MongoDB
  • большие объемы данных
  • быстрая выборка данных

Этот раздел вызвал большое количество комментариев вроде "разработчик не должен заниматься настройкой серверов". Я устал от программистов и веб-мастеров, которые не видят дальше своего носа. Веб-разработчик должен иметь представление обо всем, что связано с процессом разработки сайта и настройки окружения для него. Проект при этом должен работать быстро и стабильно.

Все, кто хочет быть причастен к разработке высоконагруженных проектов, обязательно должны иметь представление, желание и готовность заниматься настройкой и администрирование серверов, а так же составлением инструкций для сис. админов, которым будет отдам проект на поддержку. Никто кроме вас не организует это оптимальным образом.

Личные качества

Особо ценные личные качества, это первично

  • честность, порядочность
  • позитивный настрой
  • регулярное чтение самомотивирующей литературы
  • умение вести коммуникации с коллегами
  • не ругаться матом, слабо?

Профессиональные навыки

Особо ценные профессиональные навыки, это вторично

  • умение трезво оценивать задачи, в часах
  • попадать в свою оценку
  • предупреждать заранее об отклонениях от намеченного графика
  • декомпозиция задач
  • избегать побочных изменений в коммитах, не связанных с задачей
  • низкий уровень багов, особенно нелепых
  • подробное тестирование своей работы перед сдачей задачи
  • вести подробный учет расхода рабочего времени

Процесс разработки

  • не работать по фтп
  • не работать в блокноте
  • работать на локальной копии
  • не использовать print_r и var_dump для отладки
  • уметь построчную отладку с помощью xDebug
  • вести чистую и красивую историю коммитов

Дополнительно, обязательно

  • Уверенный пользователь Линукс (ssh, bash, crontab, php -f, etc)
  • html/css/js/jquery/json/ajax - само собой. верстать не придется.

Дополнительно, будет плюсом

Это не имеет особого отношения к проектам на битриксе

  • continuous integration, начиная с настройки
  • selenium
  • TDD
  • docker/ansible/chef/puppet/kubernetes
  • микросервисная архитектура
  • опыт/желание быть спикером на конференциях

Инструменты

Желательно близкое знакомство с сервисами

  • Youtrack, etc — багтрекер для проектов
  • Trello — канбан доски
  • Slack — удобное общение 
  • TimeCamp, etc — учет фактического времени
  • Confluence, GitBook, Read The Docs — документация к проектам

Итого

Время идет, ничего не меняется. При виде подобных списков с требованиями — соискатели говорят, что не хотят быть человеком-оркестром, а хотят быть специалистами в узкой области.

Я считаю, что специалист — это человек, знающий очень хорошо свою основную область. А опытный специалист имеет хорошее представление о смежных направлениях, так как к с ними неизбежно приходится сталкиваться по ходу работы.

Если вы высококлассный опытный специалист с богатым опытом и портфолио, и у вас широкий спектр навыков и знаний, то не дожидаясь тестового задания — сразу присылайте ссылку на публичный git репозиторий с вашими наработками. Там наверняка должно быть что-то интересное.

Если же вы многого не знаете, имеете техническое образование и у вас трезвый ум и ясный взгляд — приходите на обучение (и рекомендуйте своих коллег), возможно именно вы станете следующим юным подаваном и со временем джедаем.

Ссылки по теме

Комментарии

Форма для связи

Контакты
E-mail:

по запросу

Telegram:

по запросу

Skype:

по запросу

Телефон:

по запросу

Город:

Санкт-Петербург