parschakov
@parschakov
Начинающий изучать PHP и JS

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

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

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

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

Прошу помощи! Кто чем может :)
Заранее благодарю за советы и потраченное время.
  • Вопрос задан
  • 11954 просмотра
Решения вопроса 5
GTRxShock
@GTRxShock
Full-stack developer (Symfony, Angular)
если программируете на 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
Fullstack разработчик
Я проникся ООП когда писал одну программулину в процедурном стиле и внезапно понял что не могу разобрать свой собственный код, написанный вчера. Потратил на рефакторинг 12 часов и после этого код стал больше похож на английский язык, чем на непонятный набор букв, точек, цифр и скобочек. Так что в идеале нужна практическая задача на чистом языке, без фреймворков.
Раз речь о PHP, попробуйте написать свою ORM. Простейший построитель запросов для CRUD, но универсальный. Как минимум наследование точно поймёте.
По паттернам я сейчас толкового курса сходу не нашёл, но не переоценивайте их значимость. Лучше почитайте (посмотрите видео) о том, что такое SOLID.
Когда придёт понимание что такое наследование и зачем оно нужно, тогда можно и про паттерны почитать, но как по мне, реально интересен только Одиночка. Все остальные это просто правильные способы применить наследование, и выглядят довольно очевидными.
Ответ написан
Пригласить эксперта
Ответы на вопрос 9
solotony
@solotony
code for food, caviar preferably
проблема понимания ООП на 90% - в плохих переводах которые делаются хрен знает кем и хрен знает как. зачастую люди вообще слабо понимают о чем пишут (переводят) либо у них проблемы с языком изложения.
либо авторы страдают неудержимыми приступами графомании.

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

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

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

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

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

Войти через TM ID
Похожие вопросы
OS33 Нижний Новгород
от 100 000 до 140 000 руб.
от 80 000 до 100 000 руб.
OS33 Нижний Новгород
от 100 000 до 150 000 руб.
19 дек. 2018, в 16:42
2000 руб./за проект
19 дек. 2018, в 16:02
10000 руб./за проект