Intereting Posts

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Если вам нравится Ruby, возможно, вы захотите использовать средства в классах ?
  • Если вам нравится Asp.NET, возможно, вы захотите попробовать создать серверные элементы управления в среде PHP?
  • Расстроено, что прощение по умолчанию – это HTML? Почему не следует проверять выходную сторону сервера

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

Публикуйте это!

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

Резюме

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

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

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

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

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

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

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

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

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

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

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

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

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

  • ООП с PHP (шаблоны проектирования)
  • Модульное тестирование ( PHPUnit , SimpleTest , …)
  • ORM ( Propel , Doctrine )

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

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

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

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

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

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

С уважением.

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

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

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

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

Подход к рассмотрению кода других программистов определенно является хорошим способом изучения «хороших» или «плохих» практик. После прочтения другого кода вы создаете «чувство» для хорошего кода.

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

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

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

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

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

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

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

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

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