Я много лет работаю с PHP и очень хорошо разбираюсь в языке, создал много продвинутых и не очень продвинутых систем, которые работают очень хорошо.
Проблема, с которой я сталкиваюсь, заключается в том, что я только узнаю, когда нахожу потребность в том, что я раньше не изучал. Это заставляет меня искать решения и другой код, который обрабатывает проблему, и поэтому я узнаю о новой функции или структуре, которые я раньше не видел. Именно таким образом я изучил многие из моих лучших методов (например, изучение классов, выпущенных Amazon, Google или другими крупными компаниями).
Главная проблема заключается в том, что вы не можете чему-то научиться, если не знаете, что это существует. Например, мне потребовалось несколько месяцев программирования, чтобы узнать о функции empty()
, и я просто проверил бы длину строки, используя strlen()
чтобы проверить пустые значения.
Теперь я собираюсь создавать большие и большие системы, и я начал читать блоги, такие как highscalability.com, и изучал репликацию MySQL и данные сервера для масштабирования. Я знаю, что структура вашего кода очень важна для обеспечения полной работы систем.
Прочитав недавний блог о структуре reddit, я задал вопрос, есть ли там какие-то стандартные или «принятые системы».
Я изучил рамки (я использовал Kohana, о котором я пожалел, но решил, что фреймворки PHP не для меня), и я предпочитаю свою собственную библиотеку функций, а не фреймворк.
Моя нынешняя структура – это сочетание WordPress, Kohana и моих собственных знаний.
Способы, которые я вижу потенциально полезными, следующие:
Каким был бы лучший способ (ы) «выйти на следующий уровень», чтобы быть очень хорошим разработчиком системы?
Каждый, кто хочет быть программистом на PHP, всегда берет только первое слово и полностью игнорирует второе.
В то время как «программирование» WAY более важно, чем «PHP», чтобы быть профессионалом PHP, в первую очередь нужно быть программистом.
Итак, я проголосовал за последнее – чтение книг. Не на PHP, а на программировании вообще. Грэди Буча , Мартина Фаулера и даже старых Дональда Кнута .
Также было бы неплохо взглянуть на некоторые другие языки, такие как Java или Python. Не переключаться на них, а учиться у них.
Я предпочитаю свою собственную библиотеку функций, а не структуру
Вы ссылаетесь на «библиотеку функций» и «рамки» как на различные понятия (хорошо!), Так почему бы не попробовать и не переложить бит и превратить эту библиотеку функций в структуру? Имейте в виду, что это отличный способ учиться, но не лучший способ иметь рыночные навыки;)
Это также отличный способ научиться ошибаться, поэтому перед началом работы вам нужно провести какое-то исследование.
Есть некоторые функции, которые имеют почти все структуры, и есть причина для этого. Изучать их; узнать, почему они присутствуют и каковы их вариации; выберите, какие реализации вы предпочтете включить в свою структуру.
Я понятия не имею, что вас интересует, поэтому я остановлюсь.
Эта часть важна, потому что Натан прав : ваша работа должна рассматриваться, оспариваться, критиковать и исправлять другие люди. Не оставляйте лампу под бушелем – ее нужно увидеть; поместите его в код Google или sourceforge или что-то в этом роде, и если люди будут серьезно смотреть на него, вам нужно серьезно относиться к нему; вам необходимо поддерживать модульные тесты и регрессионные тесты; вам нужно использовать контроль версий; вам нужно прокомментировать это, с большим /* header comment */
вверху каждого файла и полезными комментариями, генерирующими doc для каждого класса и его члена.
Если вы сделаете все это, вы сможете узнать (на высоком уровне) о других платформах. Вы можете определенно «ding 40» в качестве разработчика PHP. Вы можете узнать об модульном тестировании; о регрессионном тестировании. Вы можете эффективно изучить документацию.
Гарантированная ваша структура выйдет «идиосинкразической и, вероятно, сочной», но вы можете многому научиться ее написанию. Просто имейте в виду, что структура не является продуктом; это путешествие … своего рода.
Вот несколько мыслей:
Попробуйте разные вещи. Изучите новый язык. Несколько раз в процессе изучения этого другого языка, на самом деле вы улучшаете себя на обоих.
Внести вклад в проект с открытым исходным кодом.
Высокая масштабируемость и PHP / MySQL не являются друзьями. Сегодня есть технологии, которые строятся именно для этого. node.js и Redis, чтобы назвать пару.
Ответьте на вопросы в SO. Проблемы других людей могут заставить вас думать нестандартно, и вы улучшаете процесс попытки помочь, и вы также делаете что-то приятное для кого-то.
[попытаюсь добавить сюда, если я думаю о чем-то еще, что я только что проснулся, пил кофе: D]
Научитесь делать то, что уже знаете … по-другому. Примеры:
Возможно, вам стоит снова взглянуть на фреймворки, я бы предложил взглянуть на Zend Framework, потому что это больше похоже на библиотеку компонентов, которую вы можете использовать по своему усмотрению, и на самом деле не навязывает жесткую структуру, которой вы должны следовать (например, некоторые другие фреймворки), хотя это и предполагает (вполне разумный imho) макет проекта. Хорошей отправной точкой было бы выживание глубокого конца .
Вещи, о которых вы еще не упомянули, и которые могут оказаться полезными для изучения (особенно в крупных проектах):
Просто: сделайте это . Потребности заставят вас учиться. Найдите способ участвовать в более продвинутых проектах, будь то коммерческий или открытый источник. Другого пути вы не можете чему-то научиться.
Я хотел бы присоединиться к дискуссионным советам и попытаться решить проблемы других народов. Иногда возникают довольно сложные вопросы, которые заставляют вас делать некоторые исследования. Если вы не можете ответить на него, вы можете ждать кого-то, кто может и что-то узнать.
Что касается фреймворков, учитесь у них. Я тоже рулон, так как большинство фреймворков там может быть довольно медленным. Хотя достаточно быстро для большинства веб-сайтов.
Я бы также рекомендовал посмотреть библиотеку 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, потому что разработчики, похоже, последовательно стремятся делать все согласно «лучшим» практикам … но вы, вероятно, могли бы многому научиться у любого из популярных фреймворков.
Не пишите свои собственные рамки. Пожалуйста.