Как эффективно выучить PHP?
=============================

 Всем привет! :)  

Два месяца назад я начал изучать PHP самостоятельно дома. Посмотрел полностью курс "Премиум курс. Курс по PHP программированию" от команды WebForMySelf. В целом, небольшая база у меня есть, я понимаю что такое переменные, константы, операторы, циклы и условия. Но вся проблема в том, что нету чёткого представления как всем этим пользоваться, да и вообще как писать программы в целом. Я пробовал писать по статьям и видео на YouTube блог, авторизацию, но толку от этого мало.   

Вопрос заключается в следующем, как максимально эффективно отточить усвоенную теорию, научиться нормально писать скрипты, и не потерять кучу времени на ненужную информацию? Кто-то советует по статьям писать на процедурке, кто-то говорит что лучше изучать ООП сразу. Стоит ли сразу изучать ООП? Или лучше научиться писать на процедурном для начала? Ещё мне посоветовали курс, "PHP-Мастер. От теории до собственной CMS интернет-магазина", там используется ООП, и я незнаю стоить сейчас его учить, просто не особо хочется создавать путаницу в голове. Короче, поставьте меня правильный путь, господа! =)  

Заранее спасибо! :) 

 Курсы по PHP это часто плохое начало, странно, что вы не знаете как применить свои знания.  

Знания не применить без задачи, для чего вы учите язык? Просто так?  
  

1. Ставишь себе задачу: Написать программу *А*, которая будет реализовывать функционал *Б*  

2. Начинаешь писать  
  

[Возникнет куча трудностей, вопросов, непонимание чего либо]  
  

3. Гуглишь, ищешь информацию по непонятному моменту, можешь создать вопрос на тостере или ещё где-то.  

4. **Не бросаешь задачу, если не получается.** Возвращаясь к пункту 3 пока не получится.  

5. Если дошёл до этого пункта - у тебя отложились какие-то новые знания, причём практические.  

5. GOTO 1  
  

Можешь какие-то бумажные книги купить \ или в электронном виде, они куда больше пользы принесут чем курсы, заранее отвечу, что советовать какие-то книги я не буду, тут уже тыщу и один раз поднимался этот вопрос - используй поиск.  
  

"Направьте меня" - делегировать выбор на других, думай сам.  

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

 Во-первых, грешно знать одну парадигму. Учите и процедурный подход, и объектно-ориентированный и функциональный. Во-вторых, читайте учебники, они намного полезнее курсов и видео-уроков. В-третьих, самое эффективное обучение - это работа в профессиональном коллективе над реальными задачами. 

 Пока не лезь в ООП вообще, напиши простенький блог на процедурах, потом перепиши на функциях и только потом смотри на ооп, НЕ прыгай через базовые навыки сразу к сложному! 

 ИМХО ключевое в php, когда имеешь базу - это не сам язык, а понимание того, какую роль он выполняет, и какое место в архитектуре эта роль занимает.  

Что касается php, то это в первую очередь скриптовый язык, созданный специально для связи Фронта с Беком, т.е. основная его функция - предоставление доступа к БД сервиса для html и js-кода, работающих на фронте.  
  

На сегодняшний день php решает следующие задачи:  

-доступ к БД  

-вспомогательные вычисления  

-шаблонизация  

-связь с внешними сервисами  

-предварительное кеширование  
  

Нужно в первую очередь понять как работает Веб, что такое фронт и бек, как они взаимодействуют, что такое хит, что такое ajax, как происходит идентификация посетителя (в частности как работают сессии и куки). Это основные моменты.  
  

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

Все, что тебя отделяет от ООП - это автозагрузка, освой composer, и написание кода станет лёгким и приятным занятием.  
  

Очень важно иметь хоть какую-то базу по алгоритмам и структурам данных. Если её нет - её следует подтянуть. Без этого будешь строить велосипеды на ровном месте, и запугаешь народ своим кодом.  
  

Очень важно изучить php.net  

Не обязательно штудировать всё, но стоит как минимум взглянуть что там вообще есть.  

Этот сайт - нечто вроде документации по STDLIB языка, в ходе практики ты к нему будешь возвращаться ещё тысячи раз.  

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

Очень важно поработать с фреймворками и репозиторием composer: большинство из задач, которые встанут перед тобой, уже кем-то решены, и существует либо готовая библиотека, либо как минимум публичный интерфейс, который ты можешь реализовать, чтобы не натворить архитектурных ошибок.  

Посмотри на symfony, почитай стандарты PSR.  

Большинство задач решается декомпозицией алгоритма, и сборкой приложения из готовых библиотек или PSR-интерфейсов. Остаётся только это всё сконфигурировать, и дописать немного кода для склейки всего этого в единое приложение.  
  

Т.к. php - это прокладка между html и БД, обязательно нужны основы html, SQL, и практика по развертыванию, проектированию, и управлению какой-либо СУБД.  

Наиболее популярная и простая СУБД - MySQL, на ней и сконцентрируйся. Намного позже, когда будет опыт, обязательно попробуй postgres - это намного более совершенная СУБД, но она сложнее MySQL, и новичкам с неё начинать не стоит.  

Особо углубляться в sql не стоит, т.к. в чистом виде с ним будешь работать мало, по большей части взаимодействие с БД сведётся к установке ORM-библиотеки, например doctrine2. Вот ORM стоит изучить плотнее, они предоставят тебе простой и приятный доступ к данным в БД, и обеспечат лёгкие миграции состояния БД.  
  

Что касается курсов - они очень ценные, особенно для новичка. Быстро вводят в строй.  

Но на практике все это выливается в год-два кодинга ради кодинга, что не особо эффективно.  

Обязательно нужна практика, желательно боевая.  

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

Такая практика прокачает тебя намного быстрее, и не позволит забыть то, что выучил. Но без курсов она будет однонаправленна: в реальной работе разработчики используют лишь малую часть из того, что может php, но знать нужно все - это сделает тебя профессионалом.  

Поэтому нужно комбинировать практику с курсами.  
  

Очень сильно поможет хороший редактор кода, например phpstorm - он будет подсвечивать твои ошибки, предоставит интерактивные подсказки по коду, и позволит быстро инспектировать код большого проекта, параллельно работая с ФС сервера, БД и docker-контейнерами. Серьезно ускоряет и упрощает работу. 

 Хочется добавить к вышесказанному замечательным ресурс, который описывает путь для овладения PHP: [PHP the right way](https://phptherightway.com/)