天天看點

成為一個PHP專家:缺失的環節

當浏覽各類與PHP相關的部落格時,比如Quora上的問題,谷歌群組,簡訊和雜志,我經常注意到技能的等級分化。問題都類似于“我如何連接配接到MySQL資料庫?”或者“我該如何擴充郵件系統才能在每小時發送超過一萬封郵件,而不需要引入新的伺服器?”

我将PHP能力水準分為4個等級(可能适用于任何程式設計語言或專業):初級、中級、專家和精英。

等級

對于PHP初級者,他們學習如何使用變量,包含檔案,表單處理等。他們學習簡單的邏輯結構。在教程的指導下,實作了用PHP發送郵件,甚至觸及了面向對象程式設計但卻沒有完全了解它。他們還能修改WordPress的幾個CSS檔案。有了這些知識,他們就開始找工作,但不幸的是通常都會失敗。

專家是指那些經曆過許多項目并有了豐富經驗的人。他們已經開發了許多商業應用,但沒有完全使用架構來做。他們能夠使用PHP與不同的資料庫進行高效地開發,以及通過會議來讨論解決問題的方案。他們熟悉

設計模式

,能夠輕松地将項目的工程圖用代碼實作。他們遠離過程式地程式設計。

精英程式員是那些努力了10000+小時磨練自己專業技能的人。他們能夠根據自己的需要編寫PHP的擴充,隻是瞧一下源代碼檔案就能發現BUG,并且非常了解自己的代碼布局。他們隻做最複雜的項目,并且能夠找到可選的和富有創造力的方案來解決問題。他們已經寫了一些深受歡迎的關于程式設計語言的書籍,開過幾十次講座,甚至可能擁有自己的PHP語言版本或者非常成功的架構,或兩者都擁有。

那麼,誰屬于中級呢?

缺失的環節

初學者怎樣才能成為和超越專業人士?如果一個人不知道超出基本知識的東西,他如何能提高自己的技能,摒棄錯誤的開發方式和學習更先進的開發方法。這個問題是許多初學者向我提問過的。為了成為一個專家,他必須先成為中級者。

下面的清單中指出了一個人成為中級者所需經曆的PHP學習路程:

放棄意大利面條式的代碼

很多人認為使用了類就意味着在編寫面向對象的代碼,而使用了函數則意味着編寫過程式的代碼。然而這是

錯誤的

,為了支撐這一觀點,我們假設一個廣為流傳的定義:過程式代碼是沒有使用到類和對象的代碼,而OOP代碼是盡可能地使用類和對象的代碼。

我的建議是完全放棄過程式代碼。盡可能地使用面向對象的風格程式設計-編寫類,封裝邏輯,考慮使用真實世界中的術語。相比适當的OOP代碼所帶給你的可重用性和未來開發者能友善地在你的項目繼續開發的好處,過程式代碼的性能優勢顯得微不足道。針對這個觀點的反對聲音是“但是,WordPress是過程式的!”。坦白地說,這聽起來可能有點刺耳,“WordPress的開發者”并不是真正的PHP開發者,好比擁有了Instagram 就會是攝影師一樣。請不要認為這意味着WP是沒用的—當你不希望花太多時間開發一個部落格,簡單的站點和為期一天的小項目時,使用WP開發會讓你感到驚奇。它非常适合于急于求成或者沒有太多技術的人,但掌握WP絕對無法使你成為一個專業的PHP開發者—它使用意大利面條式的編碼,教你的是不合适的設計原則。

從小事做起。想想

現實世界的概念

,并嘗試以OOP代碼表示它。通過一些

基本的教程

,并慢慢地熟練掌握OOP。在過渡到合适的架構和樸所迷離的術語例如“模型”,“視圖”和“控制器”之前,堅持用OOP思想編寫代碼直到你大體上了解了類-所有這些都是雲裡霧裡,抽象術語在OOP中并沒有堅實的基礎。

剖析現有項目

深入到現有的你所能尋找到的源代碼中。例如,檢視

PHP projects on Github

,克隆它們,部署到自己的主機上并且試着去閱讀代碼。每一個檔案,每一行,直到你了解它們是做什麼的。

尋找具備規範的注釋,結構良好,而且還在不斷開發的項目。在2008年之前更新的項目并不是太好,如果你要開始使用PHP5.5的話—否則你可能會錯過能使你在已經人口過剩的領域裡脫穎而出的PHP最新和最強大的特性。

學會搭建自己的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開發者的路上。維持原則,絕不放棄(即使你身邊有人放棄了)并且堅持實踐。

如果你有一些有用的資源并且想要與我們分享你是如何跨越(或正在跨越)中級開發者這道坎,請在下面留言,讓我們知道!