2.5 如何學習PHP程序員
PHP以其簡單易學的特色,以及敏捷開發的優點,從一個幾乎不被人知的開源項目,慢慢成長爲技術人員首選的動態Web設計工具,與其餘語言相比,PHP表現得更好、更快、更簡單易學。儘管如此,咱們在面對一項本身不熟悉的新技術時,仍然會感到無所適從,不知道從何處入手,彷佛老是感受摸不出一條清晰的脈絡來。另外,最大的障礙莫過於學習的過程枯燥乏味,從而失去學習興趣。不過,若是你能掌握一種適合你的學習方法,就能夠事半功倍。根據筆者多年的PHP教學經驗,和衆多人才培養的成功案例,列出的學習方法或多或少地有必定的借鑑做用。固然再科學的學習方法,也只是讓你少走彎路,而不能一晚上精通,仍是須要持久地修煉!正則表達式
2.5.1 肯定學習的目標算法
是什麼讓你選擇學習PHP呢? 是愛好、是爲了找工做、仍是工做中的開發須要?既然選擇學習PHP就必定要有堅決的信念。不能一時興起學了一陣兒,聽別人說某某語言有多麼得好,立刻切換,或是多門語言的學習同時進行。只有專心在一門課上下苦功,才能成爲「專家」,鍥而不捨才能產生興趣,畢竟興趣纔是最好的老師!數據庫
2.5.2 PHP學習線路圖編程
剛開始學習PHP時,多數新手都會有一些迷茫,不知道從哪裏開始學起,不瞭解學習的順序,找不到學習的重點。例如,有新手據說學習PHP須要先搭建好運行環境,就按網上的資料搭建。網上好多這方面的資料,幾乎都是真實項目上線使用的專業環境,所提供的都是Linux下源代碼包安裝方式,至關複雜,成手若是按項目功能定製安裝都有可能要花費一兩天的時間,新手有的須要花費一兩個月時間才能瞭解個大概,這就是爲何有好多新手從一開始就選擇了放棄。若是有人教你一種學習用的集成安裝環境,可能你只須要5分鐘就能夠搞定。還有新手學了很久,就是不知道如何寫項目,反覆學習基礎部分,就是停滯不前。也有的新手找不到重點,學習了大量的內容,結果實際用到的並很少,浪費好多時間。因此新手開始學習,須要有人給你指引,找到正確的方向才能大步前行。如圖2-7所示,是筆者建議的PHP新手學習線路圖。設計模式
圖2-7 PHP新手學習線路圖數組
按PHP學習線路圖2-7中的指引, 能夠將學習PHP的過程分爲4個階段,爲每一個階段設定一個學習目標,並安排好學習計劃, 達到目標後就能夠開啓下一階段的學習。安全
Ø 階段一:入門服務器
這是剛接觸PHP時的入門階段,先要了解PHP的開發能力,並多接觸一些用PHP開發過的開源項目,網上有不少開源的PHP項目能夠下載,先學習一下簡單的功能操做便可,主要是能產生對PHP的學習興趣,從中瞭解PHP的開發需求和PHP的開發特色等。前面咱們介紹了Web開發所需的構件,因此只孤立地學習PHP確定是不行的,先學PHP也不行。若是剛開始接觸Web開發就直接學習PHP會力不從心,由於PHP是服務器端腳本,至少要在PHP的運行環境去解析它。另外,PHP是嵌入到HTML中的腳本語言,還要了解一些常見的HTML標記等。在開始學習PHP以前先作一點準備是很是有必要的。網絡
Ø 階段二:打基礎
這個階段是學習的重點,但方法很重要,像PHP的基本語法和語言結構(流程控制、函數、字符串等)這部份內容能學多細就學多細,每一個知識點都會在開發中使用到。而像數組、對象、文件處理、圖像處理、MySQL數據庫的操做、PHP操做數據庫等內容,先學習一些經常使用的部分,掌握一些基本的應用,這樣能夠大大提升學習的進度。大多數新人在這個階段的學習中都會出現兩個常見的問題:第一,可能當天學習的內容,下次在學習新內容時,上次學的忘得差很少了,老是記不住。固然,這個大可沒必要擔憂,不要停下來,必定要繼續往下學習,由於基礎的語法都是後面知識中會用到的技術,用多了天然就記住了。而像高級的部分也不用擔憂記不住,都是類庫或函數庫,只要記住系統已經提供了哪些功能就好,使用時經過查詢手冊便可,能記住經常使用的固然更好。第二,就是書上講的內容,能看懂也都能理解,就是本身一動手時,不知從何下手,沒有思路。因此說對這個階段的知識點有所瞭解之後,必定要想盡辦法作出一個小項目(例如,模擬寫個小型商城、論壇或聊天室等),暫時不用去管安全、優化及代碼質量,只要能實現功能就行。這個項目的目的就是將基礎部分的零散知識點貫穿在一塊兒,在實際項目中去應用實踐,能更好地對其理解和掌握。
Ø 階段三:增強
有了階段二的項目開發的練習後,積累了一些開發思路,須要再回過頭深度學習每部分的知識點,如數組、對象、正則表達式、數據庫操做、數據結構和算法等,這些內容是PHP開發中最經常使用的技術,這個階段的學習能夠更全面、更透徹,更容易掌握。固然還要學習一些新的內容,像模板引擎和PHP框架,而後再作一個項目。這個階段的項目就不能像階段二時的項目,只是實現基本功能就好了,不只要求代碼質量要好,業務邏輯要清晰,項目的結構也要基於目前最流利的開發模式,使用框架和模板引擎,並採用面向對象的思想和MVC模式的設計要求,還要學習項目的開發流程和規範,儘可能讓這個項目達到真實上線的項目標準。
Ø 階段四:提升
這個階段建議在工做中去學習, 由於這個階段的內容沒有統一的標準,須要根據實際項目去設計解決方案。固然多收集和學習一些這方面的理論,或模擬場景作一些有關的實驗是頗有必要的。以上四個階段,看似簡單,卻也須要咱們全身心投入,鍥而不捨才行。
2.5.3 堅持動手實驗
打過籃球的朋友都知道投籃理論能夠掌握的很快,但要提升實際的命中率,就須要反覆練習了。學編程也是同樣的,能看懂的代碼,可不必定能寫出來,多動手練習是很是有必要的,可能剛接觸時,寫了幾行代碼就會出現N個錯誤,出現的錯誤就是你沒有掌握的技術,解決掉的問題就是你學到的知識,當錯誤出現的愈來愈少時,你編寫代碼的能力也就愈來愈熟練。固然,爲了能更快地解決代碼錯誤,初期能夠寫幾行代碼就運行一下,這樣方便定位查找Bug的位置。另外,編寫代碼是對理論進行實踐的最好方法,你認爲比較迷茫的技術,均可以經過實驗解釋經過。還有,在練習時必定要邊練習邊爲代碼加上註釋或記錄學習筆記進行總結和分析。
做爲編程過來人,筆者剛開始學習編程時一樣沒有思路,至少也是照貓畫虎寫上萬行代碼,才慢慢出現思路的。多動手跟着書上的例子或配套的教學視頻開始練習,固然最好加一些本身的功能,按本身的思路敲上一些代碼,收穫會大得多。提醒一句,要理解代碼思路以後再跟着敲,揹着敲,千萬不要左邊擺着別人的程序,右邊本身一個一個子母地照着寫。
2.5.4 Bug解決之道
無論是新手學習,仍是成手程序員,寫程序就會遇到Bug。那麼,自學時遇到Bug以後,環境配不通,程序調不出來,運行不正常,碰見這些惱人的問題時,該怎麼辦呢?首先我要恭喜你,碰見問題,意味着你又有長經驗的機會了,每解決了一個問題,你的PHP經驗值就應該上升幾百點,問題遇到的越多,知識提高的就越快。
可是老是解決不了Bug也是很惱人的,怎麼辦呢? 筆者的建議是當你遇到一個問題時:首先要仔細地觀察錯誤的現象。有很多新人的手很是快,訪問頁面報了一大堆的錯誤,掃了一眼以後就開始盯着代碼一行一行地找,看清什麼錯誤了嗎?沒有!還有出現Bug立刻網上求救,本身都沒看一下,這都是典型的不上心的方法!請記住,學習編程並非一件很容易的事情,本身首先要重視,要用心才能夠。別人幫你解決的問題可不是你的提升,最少也要本身嘗試着去解決,真的沒有思路了,可就別浪費時間了,再花多少時間也解決不了,這時就該想別的辦法了。在開發過程當中,仔細觀察出錯信息,或者運行不正常的信息,是你要作的第一件事。若是錯誤信息讀懂了,就要仔細思考問題會出在哪一個環節了;若是沒讀懂,又要怎麼辦呢? 讀了個大概,有些思路可是不太能肯定,也要如何處理呢?
Ø 要仔細思考問題會出在哪些環節上
程序是一系列語句完成後產生的結果。當你讀懂了一個問題以後,要好好地思考這個問題可能會在哪些環節上出錯。例如,客戶端產生數據→按「提交」按鈕→發送到服務器→服務器接收到後保存到數據庫。這幾個環節都有可能會出錯:有可能客戶端根本就沒產生數據、提交按鈕按下去後根本就沒發出去、發出去的不是你產生的東西、根本就沒鏈接網絡、發送出去服務器沒有接收到,或者接收到的信息沒保存到數據庫等。仔細地分析程序的環節和這些環節可能產生的問題,你的經驗值天然會大幅度提高。在網頁A輸入了一我的的名字,提交到B,首先存儲到數據庫,而後再讀出來,發現亂碼!怎麼辦?固然是分析環節:客戶輸入→HTTP發送→B接收→存儲到數據庫→讀出→展示到網頁。每一個環節均可能出問題,怎麼才能知道哪裏出的問題?繼續往下讀。
Ø 如何定位錯誤
寫代碼時常見的Bug有兩大類:一類是語法錯誤,例如沒寫結束的分號,訪問時頁面中就會提示哪裏出錯,打印出錯誤報告,只要認真讀完錯誤報告,這樣的問題很容易找到,也很好解決。另外一類是編寫的邏輯錯誤,這是由於設計缺陷或是開發思路混亂形成的,要定位這樣的錯誤會麻煩一些,分析清楚有哪些環節以後,一般有三種方法找到錯誤位置:第一種是輸出調試法,經過在多個可疑的位置打印輸出不一樣的字符串,經過觀察輸出的結果,並結合輸出信息的位置周圍的代碼來確認錯誤的位置。第二種是註釋調試法,先將全部代碼註釋掉,再從上到下一點一點去掉註釋,去掉一次註釋運行一下,觀察運行的結果,若是有不正常的結果出現,也就是定位到了錯誤的位置。第三種是刪除調試法,先將代碼備份,而後刪掉一部分調試一部分,也就是去掉一部分功能來作簡化,而後調試剩下的功能。若是還查不出來,恭喜你,你遇到的錯誤是值得認真對待的錯誤,是會影響你學習生涯的錯誤,就使用搜索引擎吧。 也能夠在專業的BBS中詳細列出問題,或加入一些QQ羣尋求指導。
2.5.5 看教學視頻,讓學習變得簡單
跟着教學視頻學習是很好的學習方式,既有詳細的理論講解又有代碼分析,看書和配套視頻結合學習能夠達到最佳的效果。目前,網上能夠免費學習的技術視頻愈來愈多,像兄弟連雲課堂(yun.itxdl.cn),不只視頻種類多、視頻新、講解全面詳細,並且又會根據企業實際的技術應用,不斷更新,不只能夠記錄學習筆記,還有專業老師在線指導答疑,也能夠和同窗互動。 找到比較適合你的全套視頻,保存在硬盤裏便可。
2.5.6 優秀的Web程序員是怎樣練成的
學習軟件開發「思惟邏輯」是核心,「記憶」只是輔助。每一個行業都有新手和成手之分,軟件開發也是同樣,分爲普通程序員和高級軟件工程師等不一樣級別的職位。從初級程序員成長爲高手並非一步到位的,而須要經過不間段的努力逐漸成長起來。例如,在工做中不斷積累經驗,掌握複雜網站的架構設計,並具備解決問題的能力,還要多研發產品,並能挑戰高難度的項目。除了要有強烈的好奇心和學習精神之外,筆者還總結如下幾點提供給剛入行的新手參考。
1. 克服慣性
萬事開頭難,克服慣性是學習新技術的第一步。有不少的小技巧能夠調動咱們的積極性,幫助咱們克服慣性。對於筆者來講,微習慣是一個很好用的小技巧。與其被手頭的任務嚇到,不如將任務細分爲一個個具體的微任務,而後挑選其中的一個開始作起。經過完成一個個的微任務,你會發現本身克服了慣性,任務再也不顯得難以完成。關鍵就是將大塊任務細分爲微任務。
2.具有紮實的技術功底
PHP是衆多計算機開發語言中最容易入門並上手最快的開發語言。但若是不瞭解數據結構、離散數學、編譯原理、計算機網絡、結合多種語言的編程特色等這些計算機科學的基礎知識,很難寫出高水準的程序。當你發現寫到必定程度很難再提升的時候,就應該想一想是否是要回過頭來學學這些最基本的理論。所以,多讀一些計算機基礎理論方面的書籍是很是有必要的。
3.遵循良好的編碼規範
高質量的代碼都具備統一的編碼規範,要養成良好的編碼習慣,代碼的縮排編排、變量的命名規則要始終保持一致。由於在一致的環境下,團隊協做中會有更高的效率,團隊的成員能夠減小犯錯的機會。程序員還能夠方便地瞭解其餘人的代碼,弄清程序的情況,就和看本身的代碼同樣。另外,也能夠防止剛接觸PHP的新人自創一套風格並養成終生的習慣,一次次地犯一樣的錯誤。
4.遇到問題要解決不要逃避
學習過程當中遇到比較難理解的重要章節不要跳過,更不能放棄,要多花一些時間和精力在這些知識點上,將其攻破,這樣才能不斷地提升。解決過的問題再次遇到時將再也不是你的障礙。
5.擴充本身的想象力
程序員不要侷限於固定的思考方式,遇到問題時要多想幾種解決問題的方案,能夠試試別人從沒想過的方法。豐富的想象力創建在豐富的知識的基礎上,除計算機以外,多涉及其餘的學科,好比天文、物理、數學等。
6.對新技術的渴求
咱們能夠愈來愈方便地得到大量學習資源。這些資源的傳播載體由最初的教室變成了博客、技術論壇等。
7.挖掘設計模式,提升代碼質量
動手將一個新的模塊開發出來後,不要認爲本身編寫的代碼就是完美的,也不要草率地將別人的代碼拿過來就直接使用,更不要在開發過程當中屢次遇到相同的功能,將同一段代碼直接粘貼反覆使用。提升本身的編碼能力必定要多參考和總結別人的設計模式,還要不斷地改進和升級才能提升本身編寫代碼的質量,也能從中學到新的技術。
8.多與高手交流
儘可能多認識一些大型互聯網公司的程序高手,多瞭解一些大型網站的解決方案。要多上網,看看別人對同一問題的見解,會給你很大的啓發。也要常常參加一些互聯網技術大會,瞭解一些新技術和行業的發展,拓展本身的眼界。它能夠是任何你有激情去學,而且想深刻學習的一些東西。這種原始的學習慾望很是重要,這種慾望能夠在你的學習低潮期給你提供動力。你想學的或許是一門新的編程語言、應用框架或者是新的工具,一旦你肯定了想要的是什麼,就馬上去收集相應的優秀羣體所作的一些優質的工做成果。
9.韌性和毅力
程序高手們並非什麼天才,而是在無數個日夜中磨鍊出來的,成功能給咱們帶來無比的喜悅,但程序倒是無比的枯燥乏味。作程序員,停滯不前就是落後,要不斷地學習擴展新知識,就像軟件版本升級同樣,也要不斷地更新本身的技術。
10.寫博客
在技術領域,博客是最簡單易得的表達載體。當你準備落筆的時候,你會強迫本身整理思路,而且對積累下來的零散的知識片斷進行結構梳理。說不定,經過互聯網的分享,你的經歷和分享會給別人的成長帶來幫助。寫博客可以提高你的我的溝通能力,這與你學到的技術一樣重要。
11.考慮接單
許多程序員正不斷地尋找新的項目和解決不一樣的問題,以此來增長經驗。然而,不多有一個單一的環境可以提供這樣的條件。若是基於遺留系統代碼(維護原有系統),架構方面沒有多大的想象空間。所以,許多程序員以爲須要變換工做,到不一樣的環境去獲取新一階段的學習。然而,「跳槽」只不過是獲取豐富經驗的途徑之一,筆者提議另外一個選擇——接單。
2.6 小結
本章必須掌握的知識點
Ø PHP是什麼,能夠用來開發哪些類型的應用。
Ø PHP的開發優點。
Ø 如何學習PHP。
本章須要瞭解的內容
Ø PHP的誕生與發展。