В данной статье я хочу ответить на вопрос — “что должен знать Junior PHP разработчик в 2016м году?”.
При этом я постараюсь добавить побольше ссылок на учебные материалы, чтобы на собеседовании вам не пришлось краснеть.
Отчасти перед вами обновленная статья Что должен знать начинающий PHP разработчик, а поскольку PHP достаточно интенсивно развивается в последнее время, то мне пришлось внести изменения в большую половину текста, можете сравнить из любопытства ;)
Пункт номер ноль
Разработчик должен соображать и уметь использовать Google. Первое оценить крайне сложно, для этого придумано много «дурацких» вопросов для собеседований. Второй пункт прививается в первые дни испытательного срока. Плюсом будет аккаунт на stackoverflow.com.
Фундамент
Если вы твёрдо намерены заняться web-разработкой, то первое что вам нужно будет понять – это принцип работы HTTP протокола (эти знания можно почерпнуть в профильных ВУЗах). Так же вы должны поверхностно знать о существовании TCP/IP протокола и понимать за что отвечает DNS сервер.
Выбрав для специализации стек LAMP вам следует начать знакомиться с Linux уже сейчас:
- установить дистрибутив, рекомендую ubuntu
- изучить файловую систему и её особенности
- научиться использовать командную строку
- научиться редактировать текстовые файлы в vim/nano
- научиться выходить из текстовых редакторов с сохранением и без ;)
- разобраться с управлением процессами — просмотреть запущенные, убить зависшие
- установить Apache, PHP и MySQL
- узнать о SSH
Установив Apache — научитесь его настраивать и рестартовать:
sudo a2enmod ...
sudo a2ensite ...
sudo service apache2 restart
Будьте осторожны, Linux затягивает, вроде неделька нужна для познания азов, а очнулся — уже Новый Год, а ты сидишь и iptables настраиваешь
Далее MySQL…
SQL/MySQL
Основы синтаксиса SQL требуются практически от всех программистов, будь то веб-разработка, или мобильная, вам же надо немного вникнуть в MySQL и понимать различия между MyISAM и InnoDB. Знать как работают LEFT/RIGHT/INNER JOIN’ы — это наглядно разъясняется в статье Visual Representation of SQL Joins:
Проверьте свои познания — создайте базу данных для учёта вашей домашней библиотеки (у вас же есть такая?), в ней должны быть следующие сущности:
- книги
- авторы книг
- ФИО тех, кто брал почитать
Основываясь на данной структуре данных, вы должны составить запросы которые покажут вам:
- автора, книги которого чаще всего берут почитать
- список тех, кто взял больше одной книги
SQL можно изучать в отрыве от всего остального, и он никому не повредит, чтобы разобраться на должном уровне с ним вам потребуется неделька усердного изучения без перерывов на поиграться.
HTML и CSS
Сверстайте пару страниц, от и до. Не слушайте, что это работа дизайнера/верстальщика/кого-то еще. Поверьте моему опыту — вам отдадут свёрстанную страницу, никто за вас не будет интегрировать HTML шаблон в вашу систему, так что знание HTML и CSS в обязательном порядке. И забудьте о том, что верстальщики будут готовые шаблоны вам отдавать — это сказки.
Разберитесь с селекторами в CSS, следующий код не должен вызывать у вас ужаса:
#my p.sel:first-line, .main li li a:hover + span { color:#f00; /* Что это за цвет? Включи логику! */ }
Узнайте что есть блочная модель, да как работает float. Что есть margin и padding. Почему CSS это каскадная таблица стилей, и что есть такое понятие как специфичность CSS-селектора.
Со всем этим можно разобраться за недельку-две, главное не лениться, ну и не стоит лезть в дебри кросс-браузерной вёрстки и анимации. Примочки типа LESS, SASS или БЭМ тоже стоит оставить на фронт-енд разработчиках
JavaScript
Несмотря на то, что PHP это бэкенд разработка, знания JavaScript’а вам сильно пригодятся — особое внимание уделите изучению следующих моментов:
- синтаксис знать нужно в обязательном порядке
- понимать область видимости переменных
- познать замыкания
- изучить события, и разобраться со «всплытием»
- AJAX — что за зверь, как работает
Это немного, изучение данных вопросов у вас не займет более недели, всё это очень наглядно есть в учебнике Ильи Кантора.
Ещё желательно приступить к изучению jQuery, вот вам учебник и по нему — jQuery для начинающих — это еще неделька на усвоение материала.
PHP
Как вам списочек вышеописанных скилов? И это мы ещё не добрались к PHP ;)
PHP начинается с основ языка:
- нужно знать что такое переменные и константы
- типы данных, приведение типов и сравнение данных
- область видимости переменных
- приоритеты операторов
- побитовые операции
- управляющие конструкции
- пространства имён
- чуток затронуть строковые функции, такие как:
explode()
str_replace()
strpos()
substr()
trim()
- но их куда больше…
- работать с массивами нужно постоянно — функций много, я бы обратил внимание на следующие:
array_push()
array_pop()
array_map()
array_keys()
иarray_values()
- семейство
array_diff
иarray_intersect
- различные сортировки
- поиск по массиву
in_array()
иarray_key_exists()
- работа с файлами и файловой системой тоже вполне тривиальная задача
- порекомендую досконально изучить как работает подключение файлов
- и понять как происходит работа с сессиями
- узнать на практике как обрабатывать входные данные с форм
- поработать с базой данных с помощью PDO
А ещё нужно иметь представление об объектной модели в PHP:
- наследование
- область видимости свойств и методов
- магические методы
- обработка ошибок с помощью исключений
Дополнительно требуется:
- понимание паттерна MVC
- уметь работать в IDE отличной от текстового редактора
- знание английского на уровне понимания примеров на stackoverflow
Так что ещё забыл, ах да — система контроля версий:
- пройдите обучалку по Git на Code Academy либо GitHub
- почитайте Git Book
- заведите аккаунт на GitHub
- сохраните в закладки GitHub Guides
PHP через год
Отдельно выделю те знания, которые требуются от Junior разработчика через год работы:
Объектная модель PHP должна не вызывать озадаченности на лице:
- абстрактные классы
- интерфейсы
- трейты как замена множественному наследованию
- позднее статическое связывание
Паттерны проектирования пора уже понимать и использовать:
- опять повторю про MVC
- Singleton не всегда вреден
- Factory
- Depedency Injection
- Active Record
Прочие навыки и познания:
- знакомство с каким-нибудь современным фреймворком (нынче уже Laravel5, Symfony3, ZF3)
- разобраться с ORM
- composer в обязательном порядке
- понимание новых фич PHP7
- виртуализация с Vagrant
- установка и настройка NGINX
- Twitter Bootstrap как тренд в вёрстке админок
- работа в правильной IDE PHPStorm
- английский на уровне – задать вопрос на stackoverflow и словить минусов
Ну что, вы ещё претендуете на зарплату Junior разработчика?
Ценное обновление статьи. Что сказать: офигеть, конечно, но так надо.
Интересно было бы услышать, что должен знать Senior.
как построить гугл с помощью командной строки
Сеньор должен знать ответы на все эти вопросы даже если его поднять в три часа ночи. А также уметь отличать толковых джуниоров )
Так, а как насчет мидла и сеньёра? Какие требования
Всё будет :)
Год прошёл. Где?
Хорошая шутка близкая к правде.
Сам далеко не первый год занимаюсь разработкой, но тут написана полнейшая ерунда. Никогда джун не будет этого знать, слишком много инфы. Нужно знать цвет по его коду? Серьездно?
Симфони, тут даже говорить не буду – сюда вход миддл+ т.к. там надо понимать хорошо паттерны и в целом, как все работает.
Я дожил до синьера и ни разу в жизни не верстал и не знаю CSS, не скажу, что это правильно, но версткой занимаются отдельные люди, а мы пишем код.
Про симфони – проплюсую. Про css – пожалуй тоже. Раньше, конечно, приходилось верстать, сейчас уже в серьезных компаниях подобную работу выполняют front-end разработчики. С другой стороны – возможно и придется поработать на стремные компании и выполнять подобную работу перед тем как вы будете уже в состоянии сами выбирать место работы.
Учить не нужно, а понять, что это за цвет – в обязательном порядке, это не проверка на знание CSS, это тест на то работает у человека соображалка или нет.
Насчёт Симфони и другие – я не вижу в изучении фреймворков ничего запредельно сложного, за год разработки можно освоить на пользовательском уровне любой из них – простые модели и контроллеры, вьюшки, конфиги.
Если вам не доводилось верстать – возможно, но внедрять шаблоны без понимания вёрстки – я себе не представляю этот процесс. И да, перечитайте – я утверждаю, что достичь задуманного уровня знаний лучше всего если сверстать пару страниц самому.
Ну и да, за полтора-два года – это вполне подъёмный объём информации.
Добрый день, при чем тут цвет #f00 к соображалке? Ну, я как верстадьщик просто наизусть помню, зачем здесь логика?
Ух ты, 23-летний синьор-выебщик пожаловал! Давай, расскажи нам, что для синьорства и PHP-то знать не обязательно…
Симфони мидл +? Вы серьезно? Я работаю 1.5 года, и все еще считаю себя джуном. Хотя вот на нынешнюю работу приняли после написания тестового задания, практически полноценного приложения на симфони. С настройкой Rbac и использованиеМ сторонних бандлов (были прописаны в задании). Так вот, в симфони как таковом нет ничего ровным счетом сверхъестественного. Он логичен и строение. Тараканы скрываются совсем в других вещах. Практически же опыт подсказывает что краеугольный камень в работе с бд. Не просто знание джойнов, а глубокое понимание индексов, всяческих вью, материалайз вью (к примеру ) , написание сложных запросов. Плюс всякие Elastic Search-и. И js. Гребанный js. Как только вы выходите за пределы стандартных виджетов, как только вам надо сделать на их основе что то более сложное – начинается мука. Но бд прежде всего. А паттерны и симфони – это акадеиические знания. Как следствие по ним много информации и они легко усваиваются. Но настоящие тараканы будут другого цвета.
ZF3?
Я оптимист, надеюсь в 2016-ом зарелизят
Все сбылось)) и юзается с php7
> научиться редактировать текстовые файлы в vim/nano
после этого закрыл, ушёл, спасибо. Я сам перешел в РНР из админства и вим знаю, но вносить это требование в список для джуна – это перебор
Этот вопрос слишком часто возникает у начинающих разработчиков, ну и да, скучный текст нужно разбавлять как-то :)
array_map()? Серьёзно?
Я осилил эту тему (ФП) когда уже давно был мидлом. В пред-сениор стадии. Перебор
Тут не такой большой список как кажется с первого взгляда
array-функции только для мидл-сеньора? Вы серьезно?
Вы про веб разработку?
Полная ерунда. Новички не слушайте такую Bullshit. Это также как быть профессионалным водителем и ни разу в жизни не поменять колеса на машине.
Этот селектор вызывает у меня ужас, но не своей непонятностью, а своей бессмысленностью и тормознутостью.
Скажите, доктор, я джуниор?
Ну смысл в этом может быть, а вот насчёт тормознутости, хотел бы услышать аргументы, и если они будут – то я как доктор скажу – у вас фронт-енд :)
Много для джуна. Некоторые вещи не знают даже некоторые синьоры… Особенно то, что касается паттернов.
Имо требования на неплохого мидла.
По лінуксу, IMHO, важливо вміти знаходити і читати логи та конфіги.
Что-то вы сударь, перешли на мидл-сеньер.
Если ознакомится и понять значение каждой команды которая здесь описана, то уж точно не станешь джуном.
Вот именно, то что здесь описано не перечисляет всех знаний которые должны быть у Junior разработчика, их должно быть больше :)
ZF3 еще не вышел )))
Уже вышел) и он отличный
мельчает народ :(
Да вроде всё норм, сам джуном пхпешником только 9-й месяц работаю, но ничего страшного тут не увидел. Причем когда пришел работать, я о фреймворках вообще нихрена не знал, и пришлось со всем в одиночку разбираться (я там единственный кодер, и никто в его освоении мне помочь не мог), причем без документации (хотя ладно, вру, документация у фреймворка есть но она старая, маленькая, и абсолютно конченная по уровню своей полезности).
Тема интересная, но как по мне требования уж очень завышенные. В идеале все знать просто не реально, даже если ты использовал ту или иную функцию пол года назад. А требования такие обусловлены тем, что в IT, особенно у Junior, очень большая конкуренция.
Сам уже чуть больше 2-ух лет в веб-программировании, в работе использую правильную IDE + xDebug + основная ось linux mint (ubuntu), но в февраля 2016 года так и не смог пробиться на должность Junior в NIX Solutions. Вроде и немного запросил :)
Хы, круто, ничего страшного и не описано тут.
“Линукс затягивает” – ага, ещё 3 года назал юзал XP, как даун, а сегодня поставил всем окружающим linux в приказном порядке, а в свободное время ковыряешь конфиги на своём ArchLinux :3
Господа, я не хочу Вас огорчать, но тут описаны ожидаемые знания джуна на сегодняшний день, несколько конечно завышено, но все же.
Хотим нанять умного джуна, возможно даже с опытом работы и платить ему мало (<500$ в лучшем случае).
Вот-вот хотим умного и желательно даже с опытом, только денег платить много не готовы, так везде и всегда :)
Всегда найдется какой-то “пиндус”, который будет работать за еду
Как много ошибок в слове “Docker” ;-)
http://stackoverflow.com/questions/16647069/should-i-use-vagrant-or-docker-for-creating-an-isolated-environment
Read and GTFO
Обновили ЗП на доу :)
https://jobs.dou.ua/salaries/#period=may2016&city=all&title=Junior+Software+Engineer&language=PHP&spec=&exp1=0&exp2=10
Я приходил как-то на собеседование на джуниора, так там спрашивали больше чем тут описано
Хорошо использовать как чеклист для изучения. Однако, во многом зависит от компании в которую устраиваешься. Небольшие конторки, возьмут человека который просто умеет писать код, другим же нужен тот, кто умеет правильно оформить код, оптимизировать и т.д.
Вполне адекватные требования. Это то, что нужно знать! Наличие всех этих знаний ещё не гарантирует, что вы сможете построить грамотную архитектуру приложения. Джуниор, мидл и сеньёр отличаются не только количеством фреймворков, чью документацию вы прочли на досуге. Так же как знание ключевого слова INDEX не всегда приведет к максимально возможной скорости доступа к записи.
Скоро мне 50. Хочу стать программистом PHP. Посоветуйте, что мне можно разработать?
Лучший способ начать изучение – создавать сайт для реального заказчика и аудитории.
При этом можно взяться делать сайт бесплатно для своих друзей или знакомых.
Ахахах поржал потому как так и было))
Какие споры в комментариях, завораживает. А списочек то общирненький, но если тебе направление реально интересно, ты будешь это знать чисто из-за широкого кругозора. Это мое мнение
1.5 года работы на продукте.
Из фреймворков знаю только Yii2. Laravel только начал учить
С Vagrant не работаю.
С DI пока еще не разобрался, времени не было.
С паттернами пока не очень. Но 3 знаю хорошо.
Все остальное знаю/умею/делаю.
Я джуниор?
Скорее да, чем нет, приведенный список – это некие усредненные требования к кандидату, но при этом конкретные требования к конкретной вакансии Junior разработчика могут очень сильно варьироваться, т.е. при одинаковом названии вакансии одна компания может вас взять к себе, а другая скажет, что вы не подходите.
Сам являюсь фронтендером и определяю себя как junior. Все что связано с моим направлением и указано здесь мною осилено. Я бы добавил сюда еще таск менеджеры типа gulp или систему сборки типа webpack, но вам пхп-программистам это не столь нужно. Сюда зашел, потому что появилась необходимость в знании пхп. Так вот, почитав комментарии у меня сложилось впечатление что можно в принципе не знать даже элементарных функций по работе с массивами и метить на middle – senior. Ребята вы серьезно? Спуститесь с небес.
Как умиляют комментарии 23 летних senior, которые, по-моему, работают в бомже-конторах/студиях, клепают темы и пр. на WordPress, где junior в качестве проекта можно показать лабораторную из университета и тебя с руками оторвут.
Я как-то наткнулся на вакансию junior JavaScript в Skype там так опыт работы от 5 лет и стек технологий такой, что не каждый senior знает.
Требования сильно зависят от компаний. По-моему, здесь указаны достаточно точные требования на позицию strong junior developer в ТОП-20 IT контор, а не но-нейм компании и бомже-студии.
Объясните чайнику - нахера нужен этот сраный пхпшторм? Он запускается полтора года, тупит неиомверно и обладает абсолютно уёбищным интерфейсом. Что в нём есть такого, чего нет у саблайма?
работа с консолью
гит
SSH
FTP
дебаг
отличная подсветка кода и возможность глянуть документацию
работа с бд
и еще очень многое
саблайм это самый простой редактор.
пхп шторм это проф. инструмент.
на саблайме вы серьезный проект попросту не напишите. разве что гэ которое будет нереально поддерживать и он будет постоянно крашится.
В шторме есть нормальное автодополнение и анализ кода, дебаггинг, работа с БД, с системой контроля версий, да куча всего там есть. Никогда не видел, чтобы саблайм мог подсказать, что вызываешь метод с не тем типом аргумента (хотя может я немного отстал от жизни).
И запускается он 5-10 секунд и не выключается целый день. А чтобы не тупил, надо памяти ему больше выделить.
У меня ссд и 8 гигов оперативы, шторм там летает. Очень удобный инструмент.
Ошибся 4 гига. Запускается 7-10сек
> работа в правильной IDE PHPStorm
Ну такое.
Альтернатива?
Storm хорош, но денюшков стоит((
Как вам Atom?
Atom – просто хороший редактор, на IDE он совсем не тянет
NetBeans for PHP
дважды пытался подружиться с ubuntu, но каждый раз возвращался на винду…
да, я ее поковырял, установил апач/пых/мускул, дебаг и пхпшторм и другие IDE. но тормозит ОС при настройках и всяких включенных свопах и zram жутко на моем ноуте. часто просто выбешивает. с возвратом на 10-ю винду с облегчением вздыхаю: штром летает, два браузера с кучей вкладок при этом открыто, нет лагов и т.д. для успокоения даже проникся статьей http://ctankersley.com/2016/11/13/developing-on-windows-2016/ на которую ссылается http://www.phptherightway.com/
и вообще расслабился рассуждая так: ну убунту я перековырял и вдоль и поперек, сервер поставил и настроил уже не раз (правда для локальной работы, без внешнего доступа), если понадобится поработать с приложением/сервером на юникс-системах, то вроде как опыт кое-какой имеется, а там гугл в помощь. но продолжать учиться буду на винде, чтобы учебный процесс состоял, собственно, в учебном процессе, а не вечном латании дыр в ubuntu. Советовали еще ставить минт или сьюз, но уже не стал на это тратить время, т.к. на убунту ушло 7 суток работы и 100 литров чая. Спасибо за статью, я как начинающий Pre-Junior PHP dev взял ее на заметку и в качестве плана свою базу знаний скорректирую по ней.
Поставь в виртуалку Убунту Сервер. Гуи не нужны от слова вообще. Вся работа идет через терминал ssh.
+ познания виртуалки) мелочь но нужная.
З.Ы. Список хороший. Но выше уже писали, все зависит от конторы.
Хорошая статья, но учиться по ней я конечно же не буду)))
Я бы ещё добавил уметь работать с формами: выгружать-загружать данные → валидировать → сохранять. Это нужно уметь делать нативно в первую очередь, а уже потом использовать библиотеки и фреймворки.
Спасибо за статью.
Как автор смотрит на то, чтобы посоветовать новичкам дополнять знания годной книгой по PHP ?
PHP 7. В подлиннике Игорь Симдянов, Дмитрий Котеров
Тому кому нравиться кодить, ничто не остановит, выучить можно, но не всё останется в голове. И нечего хаять программистов. Тут нужно думать как сделать то и то, принимайте советы станет легче и проще впоследствии если вы действительно хотите учить РНР
Привет. Когда первый раз увидел этот список, слегка прих*ел от требований. Но сейчас когда все перечисленное уже изучено. Смотрится как то весело. Специально добавил эту страницу в закладки и вот случайно нашел. Чтож чао удачи, страницу удаляю
Очень полезный и познавательный материал и да, до сих пор актуален для 2020 года. Но есть некоторые корректировки, помимо разработки верстки css и html разработчик обязан иметь навыки юзабилити и немного разбираться в маркетинге, это можно легко увидеть на примере: <link removed>, где мы как команда разработали дизайн и сделали верстку, ну нам также пришлось работать над функционалом, изучать СЕО, а также разбираться в аналитике. Скорее всего в наше время разработчика можно охарактеризувать более общим термином -вебмастер. Так как с годами все больше и больше добавляется обязательное знание и многофункциональность различных умений.