Как увеличить мои "продвинутые" знания PHP дальше? (быстро)

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

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

Основная проблема заключается в том, что вы не можете чему-то научиться, если не знаете, что это существует. Например, мне потребовалось несколько месяцев программирования, чтобы узнать о функции empty(), и я просто проверил бы длину строки, используя strlen(), чтобы проверить пустые значения.

Теперь я занимаюсь созданием больших и больших систем, и я начал читать блоги, такие как highscalability.com, и изучал репликацию MySQL и данные сервера для масштабирования. Я знаю, что структура вашего кода очень важна для обеспечения полной работы систем.

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

Я просмотрел фреймворки (я использовал Kohana, о котором я сожалел, но решил, что фреймворки PHP не для меня), и я предпочитаю свою собственную библиотеку функций, а не фреймворк.

Моя нынешняя структура - это сочетание между WordPress, Kohana и моими собственными знаниями.

Я вижу, что потенциально полезно:

  • Читать блоги
  • Прочитайте учебники
  • Работа с кем-то другим.
  • Читайте книгу

Каким будет лучший способ "перейти на следующий уровень" на уровень очень хорошего разработчика системы?

Ответ 1

Каждый, кто хочет быть программистом PHP, всегда берет только первое слово и полностью игнорирует второй.

В то время как "программирование" WAY более важно, чем "PHP", чтобы быть профессионалом PHP, в первую очередь нужно быть программистом.

Итак, я проголосовал за последнее - чтение книг. Не на PHP, а на программировании вообще. Grady Booch, Мартин Фаулер и даже старый Дональд Кнут.
Также было бы неплохо взглянуть на некоторые другие языки, такие как Java или Python. Не переключаться на них, а учиться у них.

Ответ 2

Я предпочитаю свою собственную библиотеку функций а не с каркасом

Вы ссылаетесь на "библиотеку функций" и "фреймворк" как на различные понятия (хорошо!), так почему бы не попробовать и не поднять бит и не превратить эту библиотеку функций в структуру? Имейте в виду, что это отличный способ узнать, но не лучший способ иметь рыночные навыки;)

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

Функции "должны иметь"

Есть определенные функции, которые имеют почти все структуры, и есть причина для этого. Изучать их; узнать, почему они присутствуют и каковы их вариации; выберите, какие реализации вы предпочтете включить в свою структуру.

  •  
  • Объектно-ориентированный (это ключ к тому, почему вы должны писать фреймворк, а не просто использовать свою библиотеку функций) 
  • Использование шаблонов (проверьте и спросите себя, почему так много фреймворков используют Application Controller вместо Front Controller... и есть ли какие-то платформы, которые используют Контроллеры страниц
  • Основные Структура MVC 
  • Очистить URL-адреса

Особенности не-PHP-платформ, которые вы хотите понять и эмулировать

Я понятия не имею, что вас интересует, поэтому я остановлюсь там.

Опубликовать его!

Эта часть важна, потому что Натан прав: ваша работа должна рассматриваться, оспариваться, критиковать и исправлять другие люди. Не оставляйте лампу под бушелем - ее нужно увидеть; поместите его в код Google или sourceforge или что-то в этом роде, и если люди будут серьезно смотреть на него, вам нужно серьезно относиться к нему; вам необходимо поддерживать модульные тесты и регрессионные тесты; вам нужно использовать контроль версий; вам нужно прокомментировать это, с большим /* header comment */ в верхней части каждого файла и полезными комментариями для создания комментариев для каждого класса и его члена.

Резюме

Если вы все это сделаете, вы сможете узнать (на высоком уровне) о других платформах. Вы можете определенно "ding 40" в качестве разработчика PHP. Вы можете узнать об модульном тестировании; о регрессионном тестировании. Вы можете эффективно изучить документацию.

Гарантированная ваша структура выйдет "идиосинкразической и, вероятно, сочной", но вы можете многому научиться ее написанию. Просто имейте в виду, что структура не является продуктом; это путешествие... своего рода.

Ответ 3

  • Посмотрите на скрытые функции PHP и предопределенные интерфейсы PHP
  • Изучайте разные языки. Изучите языки с более крутой кривой обучения, чем PHP. Каждый раз, когда я указываю преимущества других языков по сравнению с PHP, меня обвиняют в том, что я ошибаюсь в PHP, в основном это люди, которые, очевидно, никогда не овладели другим языком высокого уровня. Но я рискну. Я предлагаю Ruby, Python, Pearl и haXe (как строго типизированный аналог). Как только вы это сделаете, попробуйте применить свои новые знания к PHP. Или просто удаляйтесь от PHP, если вы не хотите возвращаться (что, я думаю, вряд ли произойдет).
  • Учитесь разбираться с критикой. Ваша реакция на пост Натана показала, что вы все еще не можете справиться с этим. Он абсолютно прав.
    • Теперь, глядя на мою первую фреймворковую структуру PHP, я должен сказать, что это было довольно хреново. В то время я думал, что это здорово (и это все же лучше, чем много производственного кода, который я уже видел, развернутого). Тем не менее, у него было много недостатков. Если вы не полный гений, ваши первые рамки просто будут выглядеть ужасно, если вы посмотрите на них несколько лет спустя (предполагая, что вы эволюционируете).
    • На самом деле любая структура, которую вы создадите, будет выглядеть хуже по мере продвижения по времени (если вы не перестанете развиваться). По этой причине вы можете просто использовать доступные фреймворки и больше ориентироваться на разработку приложений. Если используемая вами инфраструктура имеет ограничения, подумайте о том, чтобы внести вклад, а не писать еще одну фреймворк PHP.
    • В то время, когда вы выбираете писать собственные фреймворки (а не только для развлечения/обучения, но для развертывания производства), ваши требования превосходят другие структуры, предлагаемые вами, а не когда вам просто не нравится идея работы с одним. Это распространенная ошибка, которую я сделал сам. Но теперь я могу сказать, что я узнал об этом. Но если вы попросите совета (чего я, к сожалению, не сделал в то время), вы получите ответы, подобные этим.
    • Вы многому научитесь от работы с кодом, который вы сами не пишете. Мало того, что вы выбираете концепции, продвигаемые каркасами, в которые другие вкладывают много мыслей, но вы также учитесь быть продуктивными, гибкими, способными работать в команде и выполнять работу (при получении достаточно хороших результатов).
    • Я полагаю, вы не можете думать, что вы лучше, чем каждая команда проекта с открытым исходным кодом PHP, иначе вы бы спросили. Преодолейте упрямую инстинктивную потребность изобретать колесо у любого молодого разработчика и расти, чтобы справиться с проблемами, которые еще не занялись.
  • Узнайте, какая разница, между библиотекой компонентов и каркасом. Поскольку вы думаете, что можете заменить фреймворк своей собственной библиотекой функций, вы, вероятно, не поняли, какова точка фреймворка. Посмотрите инверсия зависимостей, инверсия элемента управления и инъекция зависимостей.
  • Узнайте о разработке программного обеспечения. Посмотрите на принципы OO, такие как SOLID и GRASP.
  • Попробуйте разные парадигмы. AOP, функциональное программирование. Повысьте свои навыки OO, используя языки с более высокой ориентацией объектов, такие как Ruby, Objective-C или Smalltalk.
  • Посмотрите на фреймворки PHP, такие как Flow3, Symfony, PHP igniter и CakePHP. Я уже указывал, почему я думаю, что вы должны это сделать.
  • Как указано в другом комментарии, вы должны рассмотреть другие хранилища, кроме RDBM. SQL и OOP действительно не сочетаются друг с другом. Взгляните на OODBMS, разные уровни абстракции базы данных, хранилища ключей и хранилища документов, такие как CouchDB и MongoDB, распределяет кеширующие серверы как memcache и т.д.

Ответ 4

Вот несколько мыслей:

  • Попробуйте разные вещи. Изучите новый язык. Несколько раз в процессе изучения этого другого языка, на самом деле вы улучшаете себя на обоих.

  • Внести вклад в проект с открытым исходным кодом.

  • Высокая масштабируемость и PHP/MySQL не являются друзьями. Сегодня есть технологии, которые строятся именно для этого. node.js и Redis, чтобы назвать пару.

  • Отвечайте на вопросы в SO. Другие проблемы с людьми могут заставить вас думать нестандартно, и вы улучшаете процесс попытки помочь, и вы также делаете что-то приятное для кого-то.

  • [попытаюсь добавить сюда, если я думаю о чем-то еще, что я только что проснулся, пил кофе: D]

Ответ 5

Научитесь делать то, что уже знаете... по-другому. Примеры:

  • на другом языке
  • на другой платформе
  • в параллельном/распределенном
  • через фреймворк (да, вы решили, что они "не для вас" - возможно, попробуйте другой, они иногда сильно отличаются друг от друга)

Ответ 6

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

Что касается фреймворков, учитесь у них. Я тоже рулон, так как большинство фреймворков там может быть довольно медленным. Хотя достаточно быстро для большинства веб-сайтов там.

Я бы также рекомендовал посмотреть библиотеку Facebook PHP. Там есть интересные вещи.

Ответ 7

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

Вещи, о которых вы еще не упомянули, и которые могут оказаться полезными для изучения (особенно в крупных проектах):

Ответ 8

Простой: сделать это. Потребности заставят вас учиться. Найдите способ участвовать в более продвинутых проектах, будь то коммерческий или открытый источник. Нет другого способа научиться чему-то.

Ответ 9

Лучшее, что вы можете сделать, это купить книгу по эффективным алгоритмам. В каждой студенческой жизни информатики приходит время, когда он/она должен изучать их. Проблемы, которые обсуждаются/решаются там, - это абстракции практически любой реальной проблемы, с которой вы когда-либо сталкивались.

Кроме того, чтение блогов о том, как это делали другие, отлично, так как помогает понять, как практически (и возможно даже реализовать) принципы эффективных алгоритмов.

С уважением.

Ответ 10

Нельзя сказать о работе с другими разработчиками. Я знаю, 3 разработчиков, особенно, 2, с которыми я работаю изо дня в день, которые уносят меня с собой. Я прошу их мнения обо всем, что я делаю, а не потому, что я угадываю свои собственные идеи, но больше того, что хочу услышать другие идеи, особенно от людей, которых я уважаю как разработчиков. Я больше узнаю от этих людей, чем любые другие средства. Если у вас нет доступа к другим старшим разработчикам, то обязательно отправляйте сообщения на форумах SO или других разработчиков и спрашивайте мнения людей, спрашивайте людей, как они подходят к конкретному проекту/проблеме. Обычно вы не изучаете новые методы/методы/функции, если не видите их используемыми (как вы знаете, что искать, если вы не знаете, что они существуют?)

Также, как уже было сказано, примите участие в приложении ОС. Перейдите в sourceforge и найдите проект, требующий разработчика. Или загрузите приложение и попробуйте написать плагин для него (я пишу плагин для Invision 3.0 atm и узнаю несколько вещей.)

Надеюсь, что это поможет.

Ответ 11

Прочтите код других людей. Теперь у вас есть собственная библиотека, но вы можете получить некоторое просветление при чтении источника других приложений. Тогда спросите себя, почему. Будьте писателем блога, а не читателем. Кроме того, обратите внимание больше на программиста, чем на язык. Скорее посмотрите на решения, которые уже решают проблему и пытаются воспроизвести их своими знаниями. Удачи и очень весело!

Ответ 12

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

Я определенно рекомендую такие платформы, как Zend Framework, symfony, CakePHP или Agavi, потому что многие участники смотрят на этот код и постоянно развивают его в направлении "идеального" решения (которое, конечно же, никогда не будет достигнуто...);) все еще могут принять решение о разработке собственных классов вместо тех, которые предлагает инфраструктура...

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

Отображение кода другим и запрос на конструктивную обратную связь имеют тот же эффект. Вы никогда не знаете, насколько вы хороши, пока не сравните свои навыки с другими. Всегда конструктивно. Это было бы естественным процессом, когда мы вносили вклад в структуру с открытым исходным кодом.;)

Ответ 13

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

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

Ответ 14

Вы могли бы спросить свою компанию, могут ли они оплатить вам сертификационный экзамен Zend PHP. Изучение этого экзамена обязывает вас хорошо знать PHP и тренироваться, читая большую часть документации, учебное пособие Zend, а также путем обучения с макетными экзаменами. Это очень эффективный способ улучшения, и он выглядит неплохо на резюме.

Ответ 15

"моя собственная библиотека функций" == "[идиосинкратическая и, вероятно, sucky] framework".

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

Не записывайте свои собственные фреймворки. Пожалуйста.