當前位置:才華齋>計算機>php語言>

學習PHP的過程何時可以資料結構和演算法

php語言 閱讀(2.79W)

學習PHP的時候,什麼階段才可以學資料結構?這個問題其實不只是學習PHP,也是其他語言。

學習PHP的過程何時可以資料結構和演算法

關於這個問題一定不要瞎跟風,一定不要超前,也就是說不要看到網上別人說這個重要就馬上去學,也不要看到別人說它很抽象,很難,就不去學。總的來說,這個玩意是要學,而且必須學,關鍵是什麼時候學?怎麼學?

如果沒有學好該語言的基礎,就不要學資料結構和演算法,否則你學了許久,不但華而不實,派不上用武之地,還極大的打擊你學習興趣。

比如舉個例子:學PHP2年多的人,你在公司開發專案中,用的是比如PHPCMS,你什麼時候用過大學教材上教的資料結構中圖的演算法?或者哈夫曼演算法?但是你卻可以勝任公司的許多用PHPCMS開發的專案,工資可能還不低。

反過來,你哪怕背熟了漢諾塔這些複雜的演算法,但是你沒時間學PHP以及PHPCMS,你去應聘PHP開發職位,你覺得會有幾個給發麵試通知?你的簡歷上就只能寫“精通資料結構和演算法”,但是拍不上實戰用途上,結局也很可能挺尷尬的。

別人學文科的連資料結構是什麼都不知道,照樣能找工作,別人就不找需要資料結構的工作嘛。這就說明了:找工作甚至是PHP之類的開發應用領域的工作是和需求直接掛鉤的,工作中用到了什麼才會需要該方面的人才。

所以,學不學資料結構,要看你以後想找的工作崗位需要不需要。如果你是想找個PHP快速開發專案的工作各位,1年後崗位上需要的框架你用的很熟練,你是很可能當技術經理的。但你可能並沒有用到資料結構中那些複雜的演算法。

所以有一個誤區,那就是:但凡要學習PHP,就得要先吃透資料結構和演算法,還侷限於書本上寫的那幾個演算法,如:哈夫曼演算法,雜湊演算法,等等...誰不學這個誰就不會開發專案...之類的。

所以一聽到很多初學者,連PHP的基礎都沒學會,連面向物件都沒搞懂,連模板解析引擎也沒搞懂,連動態標籤都搞不清為什麼要有,連Laravel都不能開發出一個完整專案出來,一來就在啃資料結構這本書,這純粹是“華而不實”的舉動。

這是學給別人看的,讓別人看到你有多麼的“高深”。其實為什麼要學它,用在什麼地方,估計他自己也搞不清楚。這樣的學習嚴重脫離了實際,如果導致你找工作麻煩,難勝任工作需求,也是十分正常的。因為你學歪了。就像你精通歷史,但是卻是在找或者在做化學的工作,然後你跟別人說“歷史很重要...”。

所以:上面得出的建議就是:工作或者未來的工作用不到,那就暫時不需要學資料結構。

  那麼,什麼時候應該學資料結構呢?

那自然是用到了才需要學。什麼時候用到?像資料結構中的排序,這些在PHP中都已經對陣列集成了這些方法,一個sort()即可搞定,你還有必要自己來寫個嗎?相信你要做個對從資料庫中提取的結果集進行排序的時候,你首選的會是那些庫函式吧,不會自己再寫個排序的演算法吧,因為你在重複造輪子了。

很多人大誇特誇那些複雜演算法如何如何的重要,試問你工作了幾年PHP,你何曾用到哈夫曼演算法在你的專案中?雜湊演算法?漢諾塔演算法?在PHP中你自己寫過連結串列嗎?寫了你用在了什麼地方?你不需要寫,因為都寫好了。

PHP的陣列就是動態的,就是連結串列實現的,你還用得著寫嗎?別人庫函式寫的比你高效很多,考慮了更多的情況。你寫的'那種只考慮一般的動態陣列能派上用場嗎?除非沒有,你才必要去寫。比如對網站欄目的遞迴處理。在開發領域中很多都是拿來主義,因為就是要減少重複造輪子。

只有當你從頭到尾的寫一個框架的時候,你才可能用到。但是又有幾個在寫自己的框架呢?到真正需要的地方又會看到很多人這樣的言論:框架不是有了嗎?如:TP,如:Laravel;就連開源系統都可以舉出十多個常用的優秀的。知道這個,那麼試問:你學的那些複雜演算法又有什麼意義?

所以:上面得出的建議就是:如果你想鑽研框架的開發,開源系統的開發,那再去學資料結構和演算法的深入的東西。否則,學了,你根本用不到。還是把它該學的先學會吧,如面向物件,如面向切面,如模板解析引擎,如快取處理,如負載均衡,如叢集,如Linux。

  至於怎麼學資料結構?

當你可以到要學資料結構的時候了,該怎麼學呢?其實它就融在了你的日常生活中......

比如:如果你開發一個專案的過程中需要對提取的文章進行從1開始的列印。而你遍歷的時候索引是從0開始,那麼你只要加個1就可以實現。

在需要對偶數行進行標紅的時候,你只要對2取餘,看結果是0還是1,這其實就是演算法,那麼何謂演算法?就是解決問題的思考途徑,這樣才會出現偽演算法的概念,那就是用中文或者英文把解決過程先寫出來,然後才會去用某種語言去實現。

至於書上描述的那些演算法,是用在比如開發編譯效能,作業系統佇列任務的分配等底層領域,你以後要做底層驅動開發嗎?你要寫編譯器嗎?你要寫瀏覽器嗎?如果不想,那你死啃那些書籍有什麼現實意義?

所以:不要狹隘的認為資料結構和演算法就是某本大學教材上羅列的那幾個抽象的解題程式碼。這太狹隘了。那些其實更多的被許多“不學無術”的人用來做“學術顯擺”罷了,這也侮辱了真正程式設計前輩們的宗旨。相信你周圍也有那些人,對,就是那些人。

得不到就說一堆你聽不懂的專業術語,讓你聽的雲裡霧裡,方能獻出他比你優秀許多。讓你“崇拜不已”。這就達到了他“虛榮”的目的。其實很多公司裡的技術人員很多都是這樣的漂浮心態。總喜歡拿那些讓你聽不懂的來震懾你,這樣你就不敢繼續深究他的技術實力了...僅此而已。

其實這也涉及到了技術教學和技術開發是兩個不同的發展方向。前者就是要用通俗易懂的內容讓你學的容易,後者就是要讓你看不懂,才能顯出他比你優秀。這就是很多技術高手為什麼不懂技術教學的原因。這個話題以後在說。

那麼,什麼是真正的資料結構和演算法呢?真正有實際意義的資料結構和演算法其實是你身邊所用到而沒注意到的。這麼說吧,你在開發中所創造的資料型別,如:int,char,字串型別,結構體型別,類型別就是資料結構。

而你對他們的增刪改查,排序,構造出連結串列從而形成動態陣列,如何提取某個成員,其實就是演算法。更往上走就是組合這些基礎的去和實際問題的解決方案去結合。所以:那些比如漢諾塔演算法其實也就是一種應用罷了。