成為一個PHP專家:缺失的環節
這一篇文章是“Becoming a PHP Professional”系列 4 篇博文中的第 1 篇。
當瀏覽各類與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開發者的路上。維持原則,絕不放棄(即使你身邊有人放棄了)並且堅持實踐。
如果你有一些有用的資源並且想要與我們分享你是如何跨越(或正在跨越)中級開發者這道坎,請在下面留言,讓我們知道!
相關文章
- 如何一步步打怪升級成為一個人工智慧專家?人工智慧
- 阿里技術專家:努力成為一名‘‘值得跟’’的Leader阿里
- Laravel 成為最佳 PHP 框架的 14 個理由!LaravelPHP框架
- Laravel成為最佳PHP框架的14個理由!LaravelPHP框架
- 理財AI勇闖「無人區」:理解專家、成為專家AI
- 如何讓自己成為一個專業的高階開發?
- “假臉”橫行!這個良心網站教你如何成為“打假”專家網站
- 更優雅快速的為你的專案構建一個PHP版本SDKPHP
- 分享我成為GDE(Google開發者專家)的經歷Go
- LeetCode 41. 缺失的第一個正數LeetCode
- 4個月成為PHP工程師實戰指南!PHP工程師
- 掌握這七點,讓你成為CleanMyMac使用專家!Mac
- 從優秀到卓越:成為DevOps專家的7項軟技能dev
- 一個專科生的 2022 年終總結——默默努力,成為更好的自己
- 經過一個多月的等待我有幸成為Spring相關專案的ContributorSpring
- 精讀《為什麼專家不再關心技術細節》
- 成為一個專案負責人後給我帶來的影響
- PHP 批鬥大會之缺失的異常PHP
- 如何成為優秀的遊戲特效美術師?Riot專家分享遊戲特效
- 不是所有國家都認為環境保護是一個重大問題?
- PHP開發環境 03 - 使用KFKDock搭建PHP專案環境PHP開發環境
- 科普&數學書單 | 如何成為一個自帶學霸光環的人?
- 每個專案都寫 helper? 為什麼不自己搞一個呢?給你一個不一樣的 PHP-tools 分享PHP
- 演算法41. 缺失的第一個正數演算法
- 成為專業人士的3個步驟,拿走不謝!
- 一文了解採購管理流程中的各個環節
- Python Seaborn綜合指南,成為資料視覺化專家Python視覺化
- 為什麼Laravel會成為最成功的PHP框架LaravelPHP框架
- 成為一個有目標的學習者
- 一個人成為廢物的九大根源
- 如何成為一個出色的敏捷開發者?敏捷
- CNCF 宣佈 Helm 成為基金會下一個重點孵化專案
- 【資料科學家】如何成為一名資料科學家?資料科學
- 暴雪總裁 J. Allen Brack 專訪:「我們不會成為一家只做手遊的公司」
- 如果是個窮光蛋:如何從零開始學習成為一個資料科學家?資料科學
- 成為第一沒有捷徑:AI新勢力MindSpore成長祕籍 | 源創者說 專訪開源專家胡曉曼AI
- 10步成為一個優秀的Java開發!Java
- 如何成為一個合格的資料架構師?架構
- 陸奇:如何成為一個優秀的工程師?工程師