Задать вопрос
parschakov
@parschakov
Начинающий изучать PHP и JS

Как въехать в программирование (ООП, паттерны)?

Здравствуйте. Программирую около 2-3 лет на PHP, дошел до фреймворка Laravel (разобрался с контроллерами, роутами REST, модели ORM...), прошел несколько курсов по нему, разобрался с GIT и Composer. Но понимаю, что не хватает все же понимания основ программирования, не знаю как лучше выразить это чувство :)

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

К примеру, научился применять Dependency Injection в конструкторе контроллера, но нет понимая как это работает и для чего это делается.

Прошу помощи! Кто чем может :)
Заранее благодарю за советы и потраченное время.
  • Вопрос задан
  • 15435 просмотров
Подписаться 86 Средний 11 комментариев
Решения вопроса 5
GTRxShock
@GTRxShock
SA
если программируете на php 2-3 года, то пора бы перед сном почитать РНР: объекты, шаблоны и методики программирования (Зандстра) желательно в бумажном варианте.

+ Паттерны проектирования (Фримен) для общего/наглядного понимания паттернов
+ www.phptherightway.com основные тезисы
+ Рефакторинг: улучшение проекта существующего кода (Фаулер) & https://refactoring.guru/ru на будущее, к чему стремиться :)
Ответ написан
@Wentixon
Шаблоны проектирования с человеческим лицом
К сожалению, не успел к началу вопроса, многое уже посоветовали, но эту статейку вроде не успели еще кинуть. Недавно нашел ее и просто поразился как просто и доступно это изложено + с примерами кода на php. Просто шикарный перевод великолепной статьи!

От себя же хочу сказать, что единственный способ понять паттерны - это столкнуться с проблемами которые они решают, ибо паттерны ни что иное как шаблоны решения каких то проблем (и предотвращения). Так что делаем вывод - нет проблем, не может быть и решений (конечно, вы просто не осознаете, что они есть, так как проект растет довольно медленно и чаще это какие то правки или добавление нового функционала, который не зависит от старого). Я очень долго пытался с ними разобраться, пробовал читать все перечисленные книги, но вроде читаешь такой и типа понимаешь, но с другой стороны какбы и нет. Вроде понятно, но где это применять хрен знает. Вообщем, как уже сказали, нужны реальные проблемы и тогда открываешь книгу с решениями этих проблем и думаешь какое решение выбрать. Это как с рецептами.. Хочешь что то приготовить, можешь как бы и сам, но не факт, что вкусно получится, тогда открываешь книгу проверенных рецептов и начинаешь применять все по шагам, опираясь при том на ингридиенты, которые у тебя имеются.

Так что посоветую 2 варианта изучения.
1) Тупо работаешь над сложные проектами, только действительно сложными, а не сайтиками на cms. И со временем ты начинаешь встречаться с проблемами. Тогда открываешь паттерны и тебе не придется даже как то их особо понимать, потому что это будет естевственно для тебя. Я думаю ты используешь ide вместо редактора кода. Но к примеру я помню тот момент, когда я пользовался саблаймом и знал, что есть ide, но я писал на тот момент простые вещи и когда мне говорили, почему я не юзаю ide, ведь в ней столько всего, я не понимал их потому что мне и саблайма за глаза хватало. Но пришло время, когда надо было то и се и саблайма стало мало. И тут открываю ide, а там уже есть все необходимое и думаешь в такие моменты, как я раньше этим не пользовался. А дело в том, что раньше и не надо было. Может неудачный пример, но вы поняли ) Конечно, этот вариант изучения не совсем реален, по скольку сложный проект еще найти надо, да еще попасть в команду, которая не говнокодит, так как и крупные проекты бывают достаточно плохо написаны. Но можно как вариант к примеру делать свою cms и применять в ней как можно больше паттернов.

2) Тупо садитесь и изучаете паттерны (как и делал я). Но не просто изучаете, а к какждому паттерну придумываете как можно больше проблем, которые может у вас были или могут быть, так как паттерны в большинстве случаях любят описывать в метафорах, но чаще это получается слишком абстрактно, поэтому нужно чтобы вы придумали свои конкретные задачи, где бы вы попробовали применить этот паттерн. И второй этап - садитесь и пишите эти задачи. Тупо открываете свой яп и реализовываете паттерн. При чем несколько раз с разными проблемами.

Также советую четко понять uml диаграммы. Таким образом, чтобы освежить паттерн вы не будете читать примеры, а просто посмотрите диаграмму и сразу вспомните, зачем он нужен и как его можно реализовать.
Вот пожалуй и все
Ответ написан
parschakov
@parschakov Автор вопроса
Начинающий изучать PHP и JS
про SOLID действительно очень интересно, понравилось объяснение от Дмитрия Афанасьева, оставлю ссылку на плейлист здесь думаю будет интересно подписавшимся на вопрос.
Ответ написан
alexfilus
@alexfilus
Senior backend developer
Я проникся ООП когда писал одну программулину в процедурном стиле и внезапно понял что не могу разобрать свой собственный код, написанный вчера. Потратил на рефакторинг 12 часов и после этого код стал больше похож на английский язык, чем на непонятный набор букв, точек, цифр и скобочек. Так что в идеале нужна практическая задача на чистом языке, без фреймворков.
Раз речь о PHP, попробуйте написать свою ORM. Простейший построитель запросов для CRUD, но универсальный. Как минимум наследование точно поймёте.
По паттернам я сейчас толкового курса сходу не нашёл, но не переоценивайте их значимость. Лучше почитайте (посмотрите видео) о том, что такое SOLID.
Когда придёт понимание что такое наследование и зачем оно нужно, тогда можно и про паттерны почитать, но как по мне, реально интересен только Одиночка. Все остальные это просто правильные способы применить наследование, и выглядят довольно очевидными.
Ответ написан
Пригласить эксперта
Ответы на вопрос 9
solotony
@solotony
покоряю пик Балмера
проблема понимания ООП на 90% - в плохих переводах которые делаются хрен знает кем и хрен знает как. зачастую люди вообще слабо понимают о чем пишут (переводят) либо у них проблемы с языком изложения.
либо авторы страдают неудержимыми приступами графомании.

почему-то мне кажется что все ООП можно изложить схематически на 3-х тетрадных листочках

Я сам изучал ООП на С++ (по страуструпу лет 25 назад), но парадигмы остаются такими же - наследование, инкапсуляция, полиморфизм.

а Dependency Injection - просто как мычание. "в объект при его создании (как правило при создании ) передаются объекты от которых он зависит"
Ответ написан
toxicmt
@toxicmt
кофаундер Хекслета
Если вы хотите по настоящему серьезного фундаментального и взорослого. То возьмите книгу Бенджамина Пирса "Типы в языках программирования". Сначала испугайтесь как следует, а затем перемотайте до главы "ООП".
Ответ написан
SowingSadness
@SowingSadness
web-разработчик
Вот смотрю на горе советчиков и понимаю, что они сами далеко не ушли. Начинать изучать ООП нужно с ответов на вопросы:
Для чего его придумали?
Какие цели преследует и какие задачи решает?
Какие инструменты есть для решения этих задач?

Все остальное следствие. Как придёт понимание, вы поймёте в какую сторону копать. А то вам тут насоветовали паттернов. И их глупое изучение благополучно убьёт кучу вашего времени почти без толку.
Ответ написан
Комментировать
dimovich85
@dimovich85
https://u-academy.net/
Советую посмотреть вот это видео и остальные видео и плейлисты на этом канале, бесплатно и очень наглядно: https://youtu.be/zWjT_2hFkMw
Ссылка об объектах в js, но суть ООП описана как по мне очень понятно. По php тоже есть материал.
Ответ написан
@Vahmur
Network Administrator, Web Developer
О, я помню, как я пытался в ооп по книжкам въезжать.
...создаем класс типа машина.(с)
А толку ноль.
Может это я кинестетик. Но у меня все только руками по чуть-чуть на реальных задачах.
Ответ написан
Комментировать
@Vasiliy_M
Ссылка
Надо просто научиться мыслить объектами.
Ответ написан
@novrm
Если вы начали дублировать одинаковый код в проекте - значит вы не до конца поняли ООП и патерны проектирования.
Избавление от дублирования одинакового кода в проекте - главный мотиватор искать решение в ООП и шаблонах.
Ответ написан
@EvGenom
Чтобы понять, как работает -> Берёте свой код и прогоняете его в IDE с точками останова.
Чтобы понять, для чего это делается -> РНР: объекты, шаблоны и методики программирования + Приёмы ООП. Паттерны проектирования ( не обращайте внимение на год 2001, эта книга ещё актуальна )
Ответ написан
Нужно начинать с SOLID. Позволяет понять, как писать изменяемый и расширяемый с минимальными проблемами код. А программирование - это изменение и расширение кода. Паттерны далее легче приложатся.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы