Як ще більше збільшити свої "просунуті" знання PHP? (швидко) [закрито]


74

Я працював з PHP роками і дуже добре зрозумів мову, створив багато прогресивних і не дуже просунутих систем, які працюють дуже добре.

Проблема, з якою я стикаюся, полягає в тому, що я вчуся лише тоді, коли виявляю потребу в чомусь, чого раніше не вчився. Це змушує мене шукати рішення та інший код, який обробляє проблему, і тому я дізнаюся про нову функцію або структуру, яких я раніше не бачив. Саме таким чином я навчився багатьом своїм кращим методам (наприклад, вивченню занять, що проводяться Amazon, Google чи іншими великими компаніями).

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

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

Прочитавши нещодавній блог про структуру reddit, це змусило мене задуматися, чи існують там якісь стандартні чи "прийняті системи".

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

Моя поточна структура - це поєднання WordPress, Kohana та моїх власних знань.

Способи, які я бачу як потенційно вигідні:

  • Читати блоги
  • Прочитайте підручники
  • Працюйте з кимось іншим
  • Читати книгу

Який найкращий спосіб (-і) перейти на наступний рівень - бути дуже хорошим розробником системи?

Відповіді:


115

Кожен, хто хоче стати програмістом на PHP, завжди бере лише перше слово і повністю ігнорує друге.

Хоча «програмування» НАДИНГ важливіше за «PHP», щоб бути професіоналом PHP, насамперед слід бути програмістом.

Отже, я би проголосував за останнє - читання книг. Не на PHP, а на програмування загалом. Грейді Буха , Мартіна Фаулера і навіть старого Дональда Кнута .
Було б також непогано поглянути на деякі інші мови, такі як Java або Python. Не переходити до них, а вчитися у них.


26
Це правда. Але що ви маєте на увазі під "іншими мовами"? Чому веб-програмісту потрібно знати про речі, характерні лише для настільних програм? Мене завжди спантеличує, чому відповідь на тему "вдосконалення певної мови" - це завжди "вивчати іншу мову" і отримує стільки голосів "за". Чи є відповідь на те, щоб краще розмовляти італійською мовою для вивчення латині? Деякі люди сказали б так, але, на мій погляд, не варто витрачати час на вивчення іншої мови, яку ви не будете використовувати лише для того, щоб побічно полегшити вивчення іншої мови.
Lotus Notes

10
І вибачте за подвійний пост, але я не можу редагувати. ОП спеціально попросив про передові знання PHP. Можливо, я просто наївний, але єдиним, що ви насправді вільно передаєте між мовами програмування, є шаблони проектування (які ви можете вивчити на чистому PHP, якщо хочете), алгоритми (дуже ситуативні для веб-програмування) та загальна хороша практика. Я вважаю, що більшу частину часу «вивчення» мови витрачається на з’ясування конкретних бібліотек, стандартних чи ні. Єдина реальна проблема полягає в тому, що програмістам, які починають з PHP, а не з такої мови, як C ++ або Java, важче користуватися OOP.
Lotus Notes

4
@Byron: Останнє речення у вашому другому коментарі суперечить усім іншим, що ви говорите.
stagas

2
Я також хотів би додати, що якщо ви подивитесь на деякі інші мови, такі як Ruby, ви можете швидко розглянути можливість переходу з PHP :) Я перебуваю в тому ж місці, що і ви, і зараз я серйозно розглядаю можливість відмови від PHP.
Том

22
Вивчення англійської мови @Byron зробило мене більш обізнаним щодо рідної німецької мови, вивчення японської мови значно покращило мою англійську мову та загальне знання граматики. Вивчення Javascript розширило моє мислення щодо функцій та об'єктів, а також використання Хаскела та Рубі показало мені багато цікавих концепцій, які відображають мої навички PHP. Тож я точно стверджую, що так, вивчення чогось іншого покращує вашу "основну" мову. Вивчення латині, безсумнівно, покращило б ваше розуміння більшості європейських мов.
обман

28

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

Ви називаєте "бібліотеку функцій" і "а" фреймворк окремими поняттями (добре!), То чому б не спробувати трохи вдосконалити анте і перетворити цю бібліотеку функцій на фреймворк? Майте на увазі, це чудовий спосіб вчитися, але не найкращий спосіб володіти товарними навичками;)

Це також чудовий спосіб вчитися неправильно, тому перед тим, як почати, вам доведеться провести деякі дослідження.

Особливості "must have"

Існують певні особливості, які мають майже всі фреймворки, і на це є причина. Дослідити їх; з’ясувати, чому вони присутні та які їх варіації; виберіть, які реалізації ви хотіли б включити у свою структуру.

  • Об'єктно-орієнтований (це є ключовим для того, чому ви пишете фреймворк, а не просто використовуєте свою бібліотеку функцій)
  • Використання шаблонів (перевірте і почніть запитувати себе, чому так багато фреймворків використовують Контролер додатків на відміну від Front Controller ... і чи є деякі платформи, які використовують Контролери сторінок ?
  • Базова структура MVC
  • Чисті URL-адреси

Особливості не-PHP платформ, які ви хочете зрозуміти та наслідувати

Я не уявляю, що вас цікавить, тому на цьому я зупинюсь.

Опублікуйте це!

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

Резюме

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

Гарантовано, що ваш фреймворк вийде "своєрідним і, мабуть, солідним", але ви можете багато чому навчитися, написавши його. Тільки майте на увазі, що фреймворк - це не продукт; це подорож ... свого роду.


Лише заради аргументів;)
Річард JP Le Guen

Ха, дякую Річарду. На жаль, зараз у нас недостатньо кадрів і ми працюємо одразу на 3-4 основних системах, тому я не встигаю створити справжню структуру. Хоча я чітко бачу переваги та причини для цього, я також маю ідею не винаходити колесо. Замість того, щоб робити своє власне, я бачу, як швидше копаюся в інших рамках і знаходжу їхні чесноти та пороки.
Керрі Джонс,

@Nathan - np ... дякую, що зосередились на реквізиті, а не на моєму -1: S
Річард JP Le Guen,

@RJPLG - Ме. Шорстка натовп тут! Коментатори до питань Perl класифікуються: P
Натан

Я погоджуюся з цим у багатьох відношеннях. Вам стає краще, намагаючись і не вдаючись. Період.
FredTheWebGuy

18
  1. Вивчіть приховані функції PHP та заздалегідь визначені інтерфейси PHP
  2. Вивчайте різні мови. Вивчайте мови, які мають більш високий рівень навчання, ніж PHP. Кожного разу, коли я вказую на переваги інших мов перед PHP, мене звинувачують у руйнуванні PHP, в основному це люди, які, очевидно, ніколи не володіли іншою мовою високого рівня. Але я піду на ризик. Я пропоную Ruby, Python, Pearl та haXe (як суворо набраний аналог). Як тільки ви це зробите, спробуйте застосувати свої нові знання до PHP. Або просто відійдіть від PHP, на випадок, якщо ви не хочете повертатися назад (що, на мою думку, навряд чи станеться).
  3. Навчіться боротися з критикою. Ваша реакція на допис Натана чітко показала, що ви ще не можете з цим боротися. Він абсолютно правий.
    • Переглядаючи мій перший PHP фреймворк зараз, я повинен сказати, що це було зовсім дерьмово. Тоді я думав, що це чудово (і все ще краще, ніж багато виробничого коду, який я вже бачив, розгорнутого). І все ж у нього було багато недоліків. Якщо ви не справжній геній, ваші перші фреймворки просто виглядатимуть жахливо, якщо озирнутися на них через кілька років (за умови, що ви еволюціонуєте).
    • Насправді, будь-який фреймворк, який ви створите, буде виглядати гірше з плином часу (за умови, що ви не припините розвиватися). З цієї причини ви можете так само добре використовувати наявні фреймворки і більше зосереджуватись на розробці додатків. Якщо фреймворк, який ви використовуєте, має обмеження, спробуйте внести свій вклад, а не писати ще один фреймворк PHP.
    • Сенс у часі вибрати написання власних фреймворків (не лише для розваги / навчання, але і для розгортання виробництва) - коли ваші вимоги перевершують інші, що пропонуються там, а не тоді, коли вам просто не подобається ідея працювати з ними. Це типова помилка, яку я зробив сам. Але тепер я можу сказати, що я навчився у цьому. Але якщо ви запитаєте поради (чого, на жаль, я тоді не зробив), ви отримаєте такі відповіді.
    • Ви багато чому навчитесь, працюючи з кодом, який не писали самі. Ви не тільки підбираєте концепції, просунуті рамками, над якими багато думають, але ви також навчитесь бути продуктивними, гнучкими, вміти працювати в команді та виконувати роботу (отримуючи при цьому досить хороші результати).
    • Я припускаю, ви не можете насправді думати, що ви кращий за кожну команду PHP-проекту з відкритим кодом, інакше ви б запитали. Подолайте вперту інстинктивну необхідність винаходити колесо будь-якого молодого розробника і виростати, щоб вирішувати проблеми, з якими ще ніхто не займався.
  4. Дізнайтеся, в чому різниця між бібліотекою компонентів та фреймворком. Оскільки ви думаєте, що можете замінити фреймворк на "власну бібліотеку функцій", ви, мабуть, не зрозуміли, у чому сенс фреймворків. Подивіться на інверсію залежності , інверсію контролю та ін’єкцію залежності .
  5. Дізнайтеся про розробку програмного забезпечення. Подивіться на принципи ОО, такі як SOLID і GRASP .
  6. Спробуйте різні парадигми. AOP, функціональне програмування. Покращуйте свої навички ОО за допомогою мов з більш сильною орієнтацією об’єктів, таких як Ruby, Objective-C або Smalltalk.
  7. Подивіться на фреймворки PHP, такі як Flow3, Symfony, PHP igniter та CakePHP. Я вже вказував, чому, на мою думку, ви повинні це робити.
  8. Як зазначено в іншому моєму коментарі, вам слід розглянути інші сховища, крім RDBM. SQL і OOP насправді погано поєднуються. Подивіться на OODBMS, різні рівні абстракції баз даних, сховища ключ-значення, сховища документів, такі як CouchDB та MongoDB, розподіляє сервери кешування як memcache тощо.

11

Ось кілька думок:

  • Спробуйте різні речі. Вивчіть нову мову. Деколи в процесі вивчення іншої мови насправді ви покращуєте обидві.

  • Сприяти проекту з відкритим кодом.

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

  • Відповідайте на запитання SO. Проблеми інших людей можуть змусити вас думати нестандартно, і ви вдосконалюєте процес спроб допомогти, а також робите комусь щось приємне.

  • [спробую додати сюди, якщо я думаю про щось інше, щойно прокинувся, пиючи каву: D]


10
Я не згоден з високою масштабованістю, і PHP / MySQL не є друзями, наприклад, Adobe використовує MySQL, а Facebook використовує PHP. Хіба що ви мали на увазі їх поєднання разом? Але я все ще сумніваюся в цьому. Все інше чудово
Керрі Джонс

1
@Kerry: Яка ваша думка? Військово-морський флот США використовує Windows 2000.: D PHP працює погано, і тому facebook працює на hiphop: developers.facebook.com/blog/post/358 . Справа в тому, що купувати нові сервери завжди дешевше, ніж переписувати програму на кращу платформу. Але якщо ви пишете програму з нуля, вам знадобиться час, щоб вибрати хорошу платформу. SQL походить з 1974 року, а AS3 від Adobe - це просто макет Java 90-х. Спробуйте відкрити та використовувати нові технології та підходи. Особливо, якщо ви хочете стати добрим.
back2dos

11
Важко прийняти цю пораду від номінальної вартості від когось із іменем користувача @ back2dos: p
Kzqai

2
@ back2dos - але головним напрямком ВМС є не комп'ютери. Facebook, є. Вони мають понад 60 000 серверів і неодноразово переписували свій код, вони мали можливість перейти з PHP / MySQL, але цього не зробили. Так, вони використовують HipHop, але пишуть на PHP. Це не означає, що HipHop не може бути реалізований з самого початку.
Керрі Джонс,

3
@ back2dos - Я не читав цю публікацію, бо прочитав безліч інших. Я коли-небудь говорив, що Facebook має більше комп’ютерів, ніж флот? Ні, хороший спосіб вкласти слова в рот. Крім того, якщо ви збираєтеся висувати смішні звинувачення та претензії (наприклад, PHP та пілоти ... жодним чином пілот не може зреагувати за 0,0001 секунду, де PHP може легко робити розрахунки), також я бачу величезну відсутність посилань і багато полум’я. Yahoo !, YouTube та Wikipedia використовують PHP. Це одні з найбільш популярних веб-сайтів у мережі.
Керрі Джонс,

3

Навчіться робити те, що ви вже знаєте ... по-іншому. Приклади:

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

3

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

Те, про що ви ще не згадали, і що може виявитися корисним знати (особливо у великих проектах):


Зенд зменшить швидкість? Більшість фреймворків ДРАСТИЧНО зменшують його (я дивився на контрольні показники, і навіть ті, які хваляться швидкістю, порівняно з тими, що не мають фреймворків, були набагато повільнішими)
Керрі Джонс,

Якщо ви використовуєте автозавантаження, тоді так, це зменшить швидкість. Якщо ви використовуєте безліч різних компонентів, тоді так, це зменшить швидкість. Але гнучкість (і стандартизація, не тільки для вас, але і для майбутніх співробітників / колег), яку ви отримуєте, перевищує мінуси використання фреймворку imho. Хоча, звичайно, це те, що ви повинні вирішити самі. За потреби ви можете легко кешувати фрагменти виводу. Але приємна річ Zend полягає в тому, що ви можете використовувати лише ті компоненти, які вам потрібні / потрібні у ваших програмах, замість цілої енчилади, і змішувати їх з іншим кодом, як вам зручно.
wimvds

2
До речі, використання кешу операційного коду (XCache, Zend Optimizer та ін.) Може різко збільшити швидкість ваших сценаріїв, якщо ви турбуєтесь про швидкість (хоча, звичайно, ви в кінцевому підсумку використаєте більше ресурсів - пам'ять / диск) ...
wimvds

3

Просто: зроби це . Потреби змусять вас вчитися. Знайдіть спосіб залучитись до дедалі прогресивніших проектів, будь то комерційні чи відкриті джерела. Немає іншого способу, яким ви дійсно можете чогось навчитися.


3

Я б приєднався до обговорення та спробував би вирішити проблеми інших людей. Іноді виникають досить складні питання, які змушують вас провести якесь дослідження. Якщо ви не можете відповісти на нього, ви можете почекати когось, хто може, і тоді чогось навчитися.

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

Я б також порекомендував переглянути PHP-бібліотеку Facebook. Вони там роблять цікаві речі.


Дякую за це останнє речення.
Керрі Джонс,

2

Найкраще, що ви можете зробити, - це придбати книгу про ефективні алгоритми . У житті кожного студента-інформатика настає момент, коли він / вона повинен їх вивчити. Проблеми, які обговорюються / вирішуються, є абстракціями майже будь-якої реальної проблеми, з якою ви коли-небудь стикалися.

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

З повагою.


чи можете ви порекомендувати хорошу книгу?
Шям

2

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

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

Сподіваюся, що це допомагає.


1

Читайте чужий код. Зараз у вас є власна бібліотека, але ви можете отримати деяке просвітлення при читанні джерела інших програм. Тоді запитайте себе, чому. Будьте автором блогу, а не читачем. Крім того, наголошуйте більше на програмісті, ніж на мові. Швидше дивіться на рішення, які вже вирішують проблему, і намагайтеся відтворити їх своїми знаннями. Успіхів та веселощів!


1
Для більшості, і те, що інші люди не розуміють, це те, що моя бібліотека функцій базується на Kohana & WordPress і дуже рідко є моїми власними функціями. Я переглянув майже кожну сторінку сторінок і структури WordPress, тому так, я погоджуюсь з вами :)
Керрі Джонс,

1
Я потрапив у таку ж ситуацію, як і ти (я думаю, що більшість програмістів були, за винятком тих, хто народився з керівництвом 500 фунтів всередині мозку). Я виявив, що мені стає «краще», прочитавши джерело CodeIgniter і глибше зрозумівши, що відбувається далі. Особливо тому, що вона орієнтована на продуктивність. Гарне судження випливає з досвіду, досвід - із написання коду та читання інших (як читання книги та розуміння гумору між рядками).
Шям

1

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

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

З таким довгим досвідом роботи з PHP ви можете розглянути можливість сприяння фреймворку з відкритим кодом. Обговорення з іншими розробниками пришвидшує вас.

Показ вашого коду іншим і запит на конструктивний відгук має той самий ефект. Ви ніколи не знаєте, наскільки ви добрі, поки не порівняєте свої навички з іншими. Завжди в конструктивній манері. Це було б закономірним процесом, коли б ви брали участь у структурі з відкритим кодом. ;)


0

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

Хоча, добре створити щось, про що ви до цього часу дізналися в PHP. Щоб практикувати більше, вам слід створити щось на зразок системи бронювання тощо. Рано чи пізно ви зможете більше розширюватись, вивчаючи більше, коли будете вчитися більше в PHP, що призведе до того, що ваш розвиток стане набагато кращим.


0

Ви можете запитати у вашої компанії, чи можуть вони заплатити вам сертифікаційний іспит Zend PHP. Навчання на цьому іспиті зобов’язало б вас добре знати PHP і тренуватися, читаючи багато документації, навчальний посібник Zend, а також тренуючись з фіктивними іспитами. Це дуже ефективний спосіб вдосконалення, і він досить добре виглядає в резюме.


Хіба це не буде більше орієнтоване на структуру, ніж мову?
Шям

2
Я говорю про сертифікацію PHP, а не про сертифікацію ZF. Я його пройшов, і не було жодного запитання про фреймворк.
greg0ire

-11

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

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

Не пишіть свій власний фреймворк. Будь ласка.


1
Щоб судити про те, що я зробив до того, як ви уявляєте, що це одночасно і образливо, і своєрідно.
Керрі Джонс,

2
Чим менше ваш код (або ідеї) бачать, оскаржують, критикують та виправляють інші люди, тим менше шансів, що вони будуть такими ж чудовими, як ви думаєте.
Натан

6
Яка дурна відповідь. У написанні власного фреймворку немає нічого поганого. Я зробив це з другом просто тому, що ми хотіли і мали час на запас. Зараз ми використовуємо власну структуру для наших додатків і можемо досить швидко розвиватися в ній. Це не те, що було щось погане у використанні іншого FW, просто ми хотіли створити наш власний. так ми і зробили. Я особисто виріс як розробник, також взявши в ньому участь, дав мені набагато більше розуміння MVC.
Крістіан

3
якби ніхто не "писав власний фреймворк", тоді у нас не було б ніяких фреймворків - сказано, ви, мабуть, не повинні починати, поки не отримаєте багато досвіду, використовуючи кілька інших фреймворків для багатьох інших додатків
HorusKol

2
Я буквально не можу повірити, наскільки дурні ці коментарі. Це правильна відповідь. Постало питання: "Як ще більше збільшити свої" просунуті "знання PHP?" і правильна відповідь: "Дізнайтеся, спостерігаючи, як це робиться у зрілих рамках, що застосовують найкращі практики".
calumbrodie
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.