Коротко: для junior backend на PHP нужны уверенный язык, базы данных, Git, основы архитектуры и системного администрирования и хотя бы один фреймворк.
Чтобы претендовать на позицию junior backend developer на PHP, нужен понятный набор: уверенное владение языком, базы данных, Git, основы архитектуры и системного администрирования плюс хотя бы один фреймворк. Ниже — разбор по пунктам: что в 2023 году спрашивают рекрутеры у джунов и что я добавил бы от себя.
Что значит «уверенно владеть PHP»?
PHP 7–8 — очевидно, сам язык разработки, и владеть им нужно уверенно. Что считать «уверенным» — у каждого рекрутера своё, но я бы сформулировал так: знать самые ходовые конструкции и функции. Для ориентира — топ-100 самых используемых функций PHP по данным bestofphp.com:
| Rank | Function | Frequency | Average |
|---|---|---|---|
| 1 | file_exists | 62.80% | 13 |
| 2 | str_replace | 58.20% | 33 |
| 3 | implode | 57.31% | 35 |
| 4 | count | 56.42% | 61 |
| 5 | dirname | 56.38% | 13 |
| 6 | substr | 55.84% | 53 |
| 7 | sprintf | 55.26% | 80 |
| 8 | strpos | 55.07% | 24 |
| 9 | array_merge | 54.80% | 35 |
| 10 | in_array | 51.39% | 33 |
| 11 | explode | 51.35% | 26 |
| 12 | strlen | 50.97% | 35 |
| 13 | is_array | 50.73% | 46 |
| 14 | array_key_exists | 49.54% | 28 |
| 15 | array_keys | 49.27% | 16 |
| 16 | preg_match | 46.52% | 28 |
| 17 | file_get_contents | 46.48% | 8 |
| 18 | is_file | 44.43% | 6 |
| 19 | array_values | 42.81% | 7 |
| 20 | file_put_contents | 42.46% | 4 |
| 21 | trim | 41.57% | 25 |
| 22 | method_exists | 41.49% | 8 |
| 23 | defined | 40.87% | 19 |
| 24 | is_string | 40.76% | 20 |
| 25 | function_exists | 40.29% | 20 |
| 26 | array_map | 39.33% | 12 |
| 27 | preg_replace | 39.02% | 17 |
| 28 | strtolower | 38.94% | 19 |
| 29 | is_dir | 38.67% | 6 |
| 30 | strtr | 38.01% | 5 |
| 31 | call_user_func | 37.01% | 4 |
| 32 | strrpos | 36.70% | 4 |
| 33 | call_user_func_array | 36.43% | 3 |
| 34 | array_flip | 35.89% | 2 |
| 35 | fwrite | 35.89% | 4 |
| 36 | rtrim | 35.69% | 6 |
| 37 | filter_var | 35.65% | 2 |
| 38 | ini_get | 35.15% | 5 |
| 39 | json_decode | 34.76% | 7 |
| 40 | array_filter | 34.76% | 7 |
| 41 | realpath | 34.15% | 4 |
| 42 | header | 34.07% | 7 |
| 43 | class_exists | 34.03% | 12 |
| 44 | json_encode | 33.49% | 9 |
| 45 | trigger_error | 32.95% | 5 |
| 46 | get_class | 32.95% | 13 |
| 47 | spl_autoload_register | 32.10% | 1 |
| 48 | unlink | 30.43% | 5 |
| 49 | headers_sent | 29.78% | 1 |
| 50 | is_object | 29.31% | 11 |
| 51 | mkdir | 29.20% | 2 |
| 52 | array_shift | 28.69% | 6 |
| 53 | spl_autoload_unregister | 28.54% | 1 |
| 54 | apcu_fetch | 28.23% | 0 |
| 55 | array_pop | 28.11% | 5 |
| 56 | stream_resolve_include_path | 27.84% | 0 |
| 57 | is_int | 27.65% | 5 |
| 58 | apcu_add | 27.57% | 0 |
| 59 | getcwd | 27.49% | 1 |
| 60 | strtoupper | 27.42% | 6 |
| 61 | is_numeric | 26.95% | 9 |
| 62 | array_unique | 26.91% | 4 |
| 63 | ltrim | 26.60% | 4 |
| 64 | basename | 26.57% | 4 |
| 65 | str_repeat | 26.26% | 7 |
| 66 | fopen | 25.91% | 6 |
| 67 | array_slice | 24.94% | 3 |
| 68 | getenv | 24.94% | 4 |
| 69 | var_export | 24.71% | 3 |
| 70 | preg_match_all | 24.67% | 3 |
| 71 | is_callable | 24.48% | 4 |
| 72 | reset | 24.44% | 4 |
| 73 | preg_split | 24.40% | 3 |
| 74 | fclose | 24.36% | 5 |
| 75 | array_unshift | 24.25% | 3 |
| 76 | gettype | 24.21% | 4 |
| 77 | end | 23.90% | 3 |
| 78 | array_search | 23.82% | 3 |
| 79 | max | 23.78% | 5 |
| 80 | extension_loaded | 23.59% | 3 |
| 81 | is_bool | 23.55% | 2 |
| 82 | version_compare | 22.82% | 3 |
| 83 | preg_quote | 22.78% | 3 |
| 84 | time | 22.70% | 9 |
| 85 | ucfirst | 22.66% | 4 |
| 86 | ksort | 22.66% | 2 |
| 87 | preg_replace_callback | 22.54% | 3 |
| 88 | md5 | 22.51% | 4 |
| 89 | array_reverse | 22.47% | 2 |
| 90 | array_diff | 22.12% | 2 |
| 91 | is_readable | 22.00% | 1 |
| 92 | microtime | 21.96% | 4 |
| 93 | copy | 21.81% | 1 |
| 94 | parse_url | 21.81% | 2 |
| 95 | is_null | 21.50% | 17 |
| 96 | base64_encode | 21.42% | 3 |
| 97 | current | 21.38% | 2 |
| 98 | is_resource | 21.08% | 3 |
| 99 | serialize | 20.77% | 4 |
| 100 | key | 20.57% | 2 |
Базы данных
Следующий пункт в требованиях — MySQL, и это логично: с базами данных уметь работать обязательно. Нужно составлять CRUD-запросы, делать выборки с JOIN, понимать, что такое индексы и как их использовать (хотя бы поверхностно).
Фронтенд для бэкендера
Многие рекрутеры ждут базового владения JS, jQuery, HTML, CSS. Да, фронтовые технологии спрашивают и у бэкендеров — обычно по логике «если фронт заболел или ушёл в отпуск, а на проде что-то заполыхало, бэкендер должен суметь починить». В целом там ничего сложного.
Работа с API
Часто хотят опыт работы с API — и тут тоже ничего сложного, информации в интернете предостаточно. Фактически нужно уметь читать документацию к чужому API, отправлять curl/Guzzle-запросы и обрабатывать JSON-ответы. И всё.
Git — это must have
Вот здесь я полностью согласен с рекрутерами: Git — обязательное требование для всех без исключения. Нужно чётко понимать ветки, теги, что такое rebase, как работать с мерж-реквестами и делать это аккуратно. Без этого в современной разработке делать нечего — отработайте до автоматизма, как «отче наш».
Архитектура: MVC, SOLID и компания
Стоит иметь представление, что такое MVC, SOLID, DRY, KISS, GRASP, YAGNI. Темы несложные — достаточно почитать и понимать их смысл.
Системное администрирование по минимуму
Если вы в состоянии залить проект на хостинг и запустить его — для джуна этого достаточно. С большой вероятностью слова SSL, HTTPS, SFTP, DNS, bash, nginx, Apache не должны быть для вас пустым звуком.
Фреймворки
Знание фреймворка многие ставят преимуществом, но я бы уже сейчас считал это must have. Из основных — Symfony, Laravel, Yii2 (перечислены в порядке личного предпочтения).
Что добавлю от себя
Пара навыков, которые считаю почти обязательными для разработчика:
- Linux — лучше всего работать в нём постоянно; на худой конец подойдёт macOS, но точно не Windows — с ней будет больно.
- Docker — понимание принципов нужно уже сейчас, его эра наступила.
А дальше — развиваться на опыте: своём, коллег и сообщества. Если хотите быстрее пройти путь от джуна и не распыляться — разберём ваш план на консультации.
Tem
31 марта 2024, 10:17Что означают столбцы "Frequency" и "Average"?