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


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

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

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

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

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

моя текущая структура представляет собой смесь WordPress, Kohana и моих собственных знаний.

способы, которые я могу видеть как потенциально полезные:

  • блоги читать
  • читать учебники
  • работа с кем-то еще
  • чтение книги

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

15 75

15 ответов:

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

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

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

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

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

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

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

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

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

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

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

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

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

резюме

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

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

  1. посмотреть в скрытые возможности PHP и предопределенные интерфейсы PHP
  2. изучайте разные языки. Изучайте языки, которые имеют более крутую кривую обучения, чем PHP. Каждый раз, когда я указываю на преимущества других языков над PHP, меня обвиняют в PHP-трепке, в основном это люди, которые совершенно очевидно никогда не овладевали другим языком высокого уровня. Но я собираюсь рискнуть. Я предлагаю Рубин, питон, жемчуг и haXe (как строго набранный аналог). После того, как вы это сделали, попробуйте применить свои новые знания к PHP. Или просто отойдите от PHP, если вы не хотите возвращаться (что, я думаю, вряд ли произойдет).
  3. учитесь иметь дело с критицизмом. Ваша реакция на сообщение Натана показала, что вы пока не можете с этим справиться. Он абсолютно прав.
    • глядя на мой первый PHP фреймворк сейчас, я должен сказать, что это было довольно дерьмово. В то время я думал, что это было здорово (и это все еще лучше, чем много производственный код, который я уже видел развернутые). Тем не менее, у него было много недостатков. Если вы не полный гений, ваши первые фреймворки будут выглядеть ужасно, если вы оглянетесь на них через несколько лет (предполагая, что вы развиваетесь).
    • на самом деле, любая структура, которую вы создадите, будет выглядеть хуже с течением времени (если вы не перестанете развиваться). По этой причине вы можете также использовать доступные фреймворки и больше сосредоточиться на разработке приложений. Если используемая структура имеет ограничения, подумайте о том, чтобы внести свой вклад, а не писать еще один фреймворк PHP.
    • момент времени, чтобы выбрать написание собственных фреймворков (не только для удовольствия/обучения, но и для развертывания производства), - это когда ваши требования превосходят то, что предлагают другие фреймворки, а не когда вам просто не нравится идея работы с одним из них. Это распространенная ошибка, которую я сделал сам. Но теперь я могу сказать, что научился этому. Но если вы попросите совета (что я, к сожалению, не сделал в то время) вы получите ответы, как эти.
    • вы многому научились, работая с кодом, который вы не писали сами. Вы не только подбираете концепции, продвигаемые фреймворками, в которые другие вкладывают много мыслей, но и учитесь быть продуктивным, гибким, способным работать в команде и выполнять свою работу (получая при этом достаточно хорошие результаты).
    • Я полагаю, вы не можете действительно думать, что вы лучше, чем каждая команда проекта PHP с открытым исходным кодом, иначе вы бы спросили. Преодолевать упрямая инстинктивная потребность изобретать велосипед у любого молодого разработчика есть и расти, чтобы решать проблемы, которые еще никто не решал.
  4. узнайте, в чем разница между библиотекой компонентов и фреймворком. Поскольку вы думаете, что можете заменить фреймворк "своей собственной библиотекой функций", вы, вероятно, не поняли, в чем смысл фреймворков. Взгляните на зависимость инверсии,инверсия управления и инъекции зависимостей.
  5. узнайте о разработке программного обеспечения. Посмотрите на принципы OO, такие как SOLID и понять.
  6. попробуйте разные парадигмы. АОП, функциональное программирование. Повысьте свои навыки OO, используя языки с более сильной объектной ориентацией, такие как Ruby, Objective-C или Smalltalk.
  7. посмотрите на PHP-фреймворки, такие как Flow3, Symfony, PHP igniter и CakePHP. Я уже указал, почему я думаю, что вы должны сделать так.
  8. Как указано в другом моем комментарии, вы должны рассмотреть другие хранилища, чем СУБД. SQL и ООП действительно не очень хорошо сочетаются. Посмотрите на OODBMS, различные уровни абстракции базы данных, хранилища ключей-значений, хранилища документов, такие как CouchDB и MongoDB, распределяет серверы кэширования как memcache и т. д.

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

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

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

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

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

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

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

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

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

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

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

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

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

Я бы также рекомендовал посмотреть на Facebook Библиотеки PHP. Они там делают кое-что интересное.

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

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

с уважением.

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

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

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

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

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

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

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

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

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

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

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

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

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

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