這一篇文章是「Becoming a PHP Professional」系列 4 篇博文中的第 1 篇。php
當瀏覽各種與PHP相關的博客時,好比Quora上的問題,谷歌羣組,簡訊和雜誌,我常常注意到技能的等級分化。問題都相似於「我如何鏈接到MySQL數據庫?」或者「我該如何擴展郵件系統才能在每小時發送超過一萬封郵件,而不須要引入新的服務器?」html
我將PHP能力水平分爲4個等級(可能適用於任何編程語言或專業):初級、中級、專家和精英。html5
對於PHP初級者,他們學習如何使用變量,包含文件,表單處理等。他們學習簡單的邏輯結構。在教程的指導下,實現了用PHP發送郵件,甚至觸及了面向對象編程但卻沒有徹底理解它。他們還能修改WordPress的幾個CSS文件。有了這些知識,他們就開始找工做,但不幸的是一般都會失敗。jquery
專家是指那些經歷過許多項目並有了豐富經驗的人。他們已經開發了許多商業應用,但沒有徹底使用框架來作。他們可以使用PHP與不一樣的數據庫進行高效地開發,以及經過會議來討論解決問題的方案。他們熟悉設計模式,可以輕鬆地將項目的工程圖用代碼實現。他們遠離過程式地編程。git
精英程序員是那些努力了10000+小時磨練本身專業技能的人。他們可以根據本身的須要編寫PHP的擴展,只是瞧一下源代碼文件就能發現BUG,而且很是瞭解本身的代碼佈局。他們只作最複雜的項目,而且可以找到可選的和富有創造力的方案來解決問題。他們已經寫了一些深受歡迎的關於編程語言的書籍,開過幾十次講座,甚至可能擁有本身的PHP語言版本或者很是成功的框架,或二者都擁有。程序員
那麼,誰屬於中級呢?github
初學者怎樣才能成爲和超越專業人士?若是一我的不知道超出基本知識的東西,他如何能提升本身的技能,摒棄錯誤的開發方式和學習更先進的開發方法。這個問題是許多初學者向我提問過的。爲了成爲一個專家,他必須先成爲中級者。mongodb
下面的列表中指出了一我的成爲中級者所需經歷的PHP學習路程:數據庫
不少人認爲使用了類就意味着在編寫面向對象的代碼,而使用了函數則意味着編寫過程式的代碼。然而這是錯誤的,爲了支撐這一觀點,咱們假設一個廣爲流傳的定義:過程式代碼是沒有使用到類和對象的代碼,而OOP代碼是儘量地使用類和對象的代碼。編程
個人建議是徹底放棄過程式代碼。儘量地使用面向對象的風格編程-編寫類,封裝邏輯,考慮使用真實世界中的術語。相比適當的OOP代碼所帶給你的可重用性和將來開發者能方便地在你的項目繼續開發的好處,過程式代碼的性能優點顯得微不足道。針對這個觀點的反對聲音是「可是,WordPress是過程式的!」。坦白地說,這聽起來可能有點刺耳,「WordPress的開發者」並非真正的PHP開發者,比如擁有了Instagram 就會是攝影師同樣。請不要認爲這意味着WP是沒用的—當你不但願花太多時間開發一個博客,簡單的站點和爲期一天的小項目時,使用WP開發會讓你感到驚奇。它很是適合於急於求成或者沒有太多技術的人,但掌握WP絕對沒法使你成爲一個專業的PHP開發者—它使用意大利麪條式的編碼,教你的是不合適的設計原則。
從小事作起。想一想現實世界的概念,並嘗試以OOP代碼表示它。經過一些基本的教程,並慢慢地熟練掌握OOP。在過渡到合適的框架和樸所迷離的術語例如「模型」,「視圖」和「控制器」以前,堅持用OOP思想編寫代碼直到你大致上理解了類-全部這些都是雲裏霧裏,抽象術語在OOP中並無堅實的基礎。
深刻到現有的你所能尋找到的源代碼中。例如,查看PHP projects on Github,克隆它們,部署到本身的主機上而且試着去閱讀代碼。每個文件,每一行,直到你理解它們是作什麼的。
尋找具有規範的註釋,結構良好,並且還在不斷開發的項目。在2008年以前更新的項目並非太好,若是你要開始使用PHP5.5的話—不然你可能會錯過能使你在已經人口過剩的領域裏脫穎而出的PHP最新和最強大的特性。
若是可以創建本身的環境是很是不錯的能力。本身搭建環境時不只容許你根據實際狀況進行一些微小的調整,還能讓你熟悉如何從源代碼構建擴展。
放棄在Windows上開發—若是你主要的桌面環境是Windows,那麼安裝個虛擬軟件和運行一個Linux虛擬機—Windows中不區分大小寫,它的行結束符,以及其餘的一些東西與大多數服務器環境並不相符,在Windows上開發只會出現許多麻煩,因此最好在一個你最終運行項目的系統上進行開發。
虛擬機還能夠幫助你進行一些實驗-若是出現錯誤,你能夠從新開始或者進行回滾。你能夠儘量多低去嘗試,只要你想,而沒必要擔憂把事情搞亂了。掌握工具當然重要,但有一個良好的工做平臺也是很重要的。
本身進行實驗也能讓你熟悉不一樣的服務器—是否使用Apache或者Nginx,仍是使用Appserver等。
當編寫代碼的時候,請確保你有充足的文檔註釋,精美的縮進和良好的結構。當你構建一個類、項目或庫的時候,使用衆所周知的文檔工具(PHPDocumentor, ApiGen)來提取你的文檔註釋並加以改進。
一個好的IDE也是很是值得的—使用一個跨平臺的編輯器能幫助你在任什麼時候間創建一個新的開發環境時,保證你將注意力集中在編寫代碼而不是把時間浪費在修改鍵盤快捷鍵和主題上。確保你備份了IDE的配置文件到谷歌雲服務等地方,這樣你就能夠隨時導入你的配置文件進行全新安裝。一個好的IDE是PHPStorm,或者若是你買不起,或者沒有須要免費許可的開源項目,Netbeans是一個好的選擇,而且二者都是跨平臺的。
儘早的進行最佳實踐能幫助你的代碼保持一致,以及其餘人可以更加流暢的閱讀你的代碼。找到你的風格,並堅持下去-你幫助到的將不僅是你本身,還有他人。試着遵循PSR標準(PSR-0, PSR-1, PSR-2, PSR-3)—它們能成爲標準是有緣由的。咱們大多數人都使用而且喜好這些標準,它讓每一個人的代碼都具備良好的可重用性和可讀性。
對於一個初級者很是好的且不斷更新的資源是PHP the right way—學習它將能熟悉最新的實踐,基本的OOP,安全,部署,編碼標準等我所提到的,甚至更多。
長期以來,PHP是大多數框架使用的語言(最近JavaScript成爲了最多者)。這是否說明咱們的社區或者語言的流行程度不一致,我也說不清,但事實還是,選擇一個框架是一項艱鉅的任務,特別是第一次開始選擇。
嘗試過了其中的大部分框架,我能夠全心全意推薦Phalcon框架,由於它具備不錯的魯棒性和質量,而事實上,它是用C編寫的並做爲PHP的擴展被安裝(所以比如今的任何框架都要快)。然而,親自嘗試不一樣的框架是頗有必要的。
當你嘗試不一樣框架的時候,你會發現對於一樣的問題能夠用新的方法解決。每一個框架都有你所喜歡的優勢和你所厭惡的缺點,但更重要的是,你將能瞭解到他人的心態(尤爲是框架的開發者)。你會看到新的用法和方法,而且最好的實踐是使用盡量多的框架重構相同的實驗項目。這將幫助你有效地衡量一個特定框架的功效:使用它進行開發的速度和它的性能。
別低估別人的提示和技巧。儘量多地閱讀—若是你一直堅持着,它並不會花費你所想象的那麼多時間。找一個好的博客並跟隨它,閱讀本站的指南,遍歷StackOverflow的問題和答案,訪問SitePoint論壇,訂閱簡訊,跟隨在Google+上的良好資源。避開基本的PHP教程書籍—由於在它們一出版的時候就過期了—相反,專一於你所能在網上找到的含有最新代碼的片斷和指南。即便遇到你已經學習過的話題,試着閱讀下—經過閱讀他人對於同一個問題的觀點,你常常會發現一些新的東西。
老是有事可作。永遠不要說「我沒有項目可作」,或者更糟的「我很無聊」。若是你沒有一個正在進行的項目能夠作—那就創造一個。你天天使用的工具是否讓你感到受挫由於它不完善的功能?本身作出一個更好的!對新產品沒有想法?那就複製一個現有的—試着重建一個基本的FaceBook,重建一些你已經知道了的,爲了可以實踐一下。
最重要的是永不中止—若是不珍惜每個小時,你將不可能積累到10000小時!繼續努力,保持本身的興趣和參與熱情。作一個簡單的地址簿應用。而後用另一個框架重建它。而且使用不一樣的數據庫(例如使用Mongo代替MariaDB)。保持忙碌!
若是有人能和你一塊兒的話,學習會變得更加容易。找到可以與你共享激情的搭檔。也許你就是那幸運的少數人之一,已經擁有一個搭檔共享你的獨特興趣。也許你在學校或者大學裏有一個同行願意和你一塊兒開始並努力學習。你甚至能夠找到一個導師,並接受專家的指導。
不要低估搭檔的力量—三人行必有我師焉!
當你專一於全部這些條目而且儘量地掌握它們時,當你意識到這就是你所想要的,那麼請堅持下去—你正走在成爲一個高級PHP開發者的路上。維持原則,毫不放棄(即便你身邊有人放棄了)而且堅持實踐。
若是你有一些有用的資源而且想要與咱們分享你是如何跨越(或正在跨越)中級開發者這道坎,請在下面留言,讓咱們知道!