PHP高級程序員所要掌握的技能?

現在工作快一年了,工作的主要內容就是利用PHP的Yii框架進行開發,主要就是CRUD,還有前台的js效果呈現。現在感覺每天的工作都是重複性的勞動,一點新意也沒有,感覺技術上沒有多大的長進了。不知道如何再提高自己的PHP水平,想知道 :

1.要掌握什麼技能 才能算的上是PHP高級程序員呢。

2.我所在一個外包公司,簽訂了2年合同,現在想跳槽,不知道是否可以,如果可以現在這個時節是否適合跳槽。

3.如果跳槽,1年的PHP開發經驗,公司一般能給多少薪水呢。

4.我是大專學歷。看到許多的大公司都招本科及以上學歷,不知道他們對大專生是否接受,在軟體開發行業對學歷很有要求么。

歡迎大家來指點迷津。


很多工作幾年的php開發者都會有這樣的迷茫,php開發多了,無外乎「增刪改查調介面」,真的是這樣嗎?

實際上開發者除了把自己當成php程序員,更應該關注php以外的東西,將自己定位於能熟練使用php搭建系統的工程師。

我認為高級php工程師可以往幾個方向去發展:

1.深度方向

一個工程師要往高階發展,必須同時強化幾個技術能力:

  • 設計能力:懂得如何利用分層、面向對象、設計模式等設計組織代碼
  • 編碼能力:熟悉php語法特性,知道怎麼用一兩行代碼代替初級開發者十几上百行代碼。

  • 工程能力:學會如何快速構建工程,學會如何構建可讀、可擴展性的工程,學會如何避免埋坑給後人,學會如何與人協作維護工程,學會如何保證工程質量,學會如何權衡利弊,學會如何在困難面前妥協。

  • 抽象能力:初級開發者通常會等到邏輯重複時再抽象封裝(甚至怕拖進度或者懶惰而放棄),而高級開發者通常一開始寫出的邏輯就為了以後的重用,並且深知一開始多付出的思考設計時間最終都會因為復用得到回報。很多開發框架就是一步步抽象/埋坑/優化而來的。

  • 架構能力:一個業務系統如何劃分模塊,模塊之間如何協作通信,每個模塊的技術選型如何做,系統細節如何規避問題等等。
  • 優化能力:學會如何評估、分析、提升系統性能。優化途徑很多,產品功能優化、業務邏輯優化、基礎技術優化、操作系統底層硬體的優化等等。

2.廣度方向

php開發基本上離不開操作系統、存儲、緩存、網路、webserver等等配套設施,因此這也是高階必備技能。一旦業務系統出問題了,必須要能快速定位解決(不一定自己解決,但要知道找到哪個負責人來解決)。

比如存儲mysql,高級開發者會懂得利用索引、利用分表分庫提高查詢性能,懂得負載均衡和災備提高性能提高可靠性(雖然是DBA的工作,但了解了有助於出問題時排查)

比如緩存,高級開發者懂得如何有效且最大限度利用緩存系統提高應用性能。

比如http,初級開發者往往只懂得http網路請求就只一去一回兩個包,高級開發者會去深究網路七層模型、會深究http請求的各個環節(DNS、三次握手等等)

比如web前端,學習如何依靠瀏覽器緩存、CDN緩存、壓縮代碼、合併文件等等提高前端性能,學習如何進行前端安全攻防。

3,軟素質

懂得團隊管理,項目管理,溝通技巧等等。(有空再展開)

以上觀點同樣適用於其他語言的開發者。


正好Yii是我最熟悉的php框架,這個問題我想回答下。

你用的CRUD,是用gii生成的嗎?操作資料庫是用的是ActiveRecord嗎?grid用的是zii庫的CGridView嗎?

這裡面其實有很多可以思考的問題,比如

  • gii是一個module,它的源碼是如何定製components的?它只用一個密碼來管理user的許可權,它是如何替換掉你用的WebUser的?

  • 用ActiveRecord進行CRUD的時候,它和DAO的性能差距有多大?它的性能都損耗在了哪裡?如何彌補?它與cache如何結合使用達到最優?
  • 用ActiveRecord進行CRUD的時候 ,如何使用after save、after find、after delete這些event以優化代碼?再深入一點,event和behavior是如何結合的?
  • CGridView的ajax部分是如何寫的? CGridView的filter(就是頭部下面那一欄的篩選框)在什麼情況下才會出現? 深入一點, CGridView的column如何深度定製?

還有一些別的問題,也可以思考

  • 你寫的js,是如何和Yii結合起來的?是用的Yii::app()-&>clientScript嗎?是用的registerScriptFile或registerScript方法嗎?它們又是如何向view插入script標籤的?Yii在這塊是如何優化的?
  • Yii用AssetManager來管理私有的css js文件,這東西用的時候有什麼不方便的地方嗎?如何優化?
  • 再問得大一點,一個request,Yii完整的處理步驟是什麼,涉及了多少個class?

拋開Yii,也有很多問題可以思考

  • 前台的js效果,是否夠用就好?稍微長一點的js代碼,是不是也應該考慮一下可維護性?
  • 很多js效果,都是重複重複再重複,我們是不是有辦法將他們模塊化,提高可重用性呢?
  • 用jQuery插件的時候,是否會遇到有相互依賴的插件?有沒有用js就能處理依賴問題的辦法?嗯哼,js loader?哪個loader比較好用?seajs?
  • 再問個無聊的問題,js css有沒有『時髦』的技術呢?coffee script?less?nodejs?咱有必要玩一玩嗎?

好吧,其實我想說的就是,『高級程序員』之類不過就一頭銜,有人覺得你是,你就是,但它根本不能作為你技能水平的標杆。

我也不覺得一個程序員有什麼一定要掌握的技能,我只知道『一個個解決每天所能見到所能想到的問題,這本身就是對自己最好的提高』。


還是三多吧,多看,多想,多寫。

1、多看技術書籍,開拓自己的視野,學習和接觸自己所欠缺的知識,提升自己的技術能力,了解行業技術大趨勢。

推薦幾本我看過的:

《PHP核心技術與最佳實踐》- https://www.amazon.cn/gp/product/B00E87TUZC/ref=oh_aui_d_detailpage_o00_?ie=UTF8psc=1

《推薦系統實踐》- https://www.amazon.cn/gp/product/B00ALPRM28/ref=oh_aui_d_detailpage_o01_?ie=UTF8psc=1

《MongoDB權威指南》- https://www.amazon.cn/gp/product/B00JVLEYYW/ref=oh_aui_d_detailpage_o02_?ie=UTF8psc=1

《大型網站技術架構:核心原理與案例分析》- https://www.amazon.cn/gp/product/B00V4OFPNI/ref=oh_aui_d_detailpage_o04_?ie=UTF8psc=1

《高效程序員的45個習慣:敏捷開發修鍊之道》- https://www.amazon.cn/gp/product/B00ALPRKJ8/ref=oh_aui_d_detailpage_o05_?ie=UTF8psc=1

《Redis設計與實現》- https://www.amazon.cn/gp/product/B00LZNV5B4/ref=oh_aui_d_detailpage_o00_?ie=UTF8psc=1

《響應式Web設計:HTML5和CSS3實戰》- https://www.amazon.cn/gp/product/B00ALPRMFA/ref=oh_aui_d_detailpage_o03_?ie=UTF8psc=1

《HTML5權威指南 》- https://www.amazon.cn/gp/product/B00H706BIG/ref=oh_aui_detailpage_o05_s00?ie=UTF8psc=1

《HTTP權威指南》-https://www.amazon.cn/gp/product/B008XFDQ14/ref=oh_aui_detailpage_o00_s00?ie=UTF8psc=1

《高性能MySQL》- https://www.amazon.cn/gp/product/B00C1W58DE/ref=oh_aui_detailpage_o01_s00?ie=UTF8psc=1

2、多想。

根據前者的鋪墊,多想一下架構、設計模式、軟體工程、模塊化開發等。

項目整體架構的合理性太重要了,決定了今後的業務擴展,好的架構設計避免了大規模的改動帶來的巨大工作,具有很好伸縮性的架構更是值得研究。

平常經常聽說高並發,大數據,這裡用到最重要的就是架構知識。

3、多寫。

寫代碼,學習優秀的開源源碼,我這人有一個毛病就是經常動筆,做做筆記,記錄隨想和理解。

優秀的源碼往往彙集了很多大牛的心血,值得多去學習和研究,提升自己的碼工水平,搬磚來的更容易,避免了太多的重構。


一個用PHP很多年(1999年開始自學)的屌絲給你一些小建議:

(前提是假設你往web方向發展)

1、PHP運行環境可以非常熟練的搭建,環境問題也可以很容易判別。

這個絕對不是用yum ,apt-get可以學會的;數年以來,我都是 make 環境的,不下1000次。環境一般涉及 Nginx、PHP、MySQL、memcached、radis、sphinx 以及 PHP的擴展。可能比較費時間,就把交女朋友、約炮的時間拿來學這個吧。

2、開源的PHP項目多閱讀

我用心閱讀過比如 discuz、phpwind、Yii 等。時間不夠同上。

一般什麼模塊劃分、業務抽象、代碼風格、解耦都能在裡面看到一些(不是系統性學習,而是潛移默化的影響);如果你夠好奇、有刨根問底的精神,會有很大進步。

3、空的時候看看設計模式、軟體工程、重構相關的書

有興趣就看下去,沒興趣就換一本看;全部都沒興趣就換行業。

以上搞定,差不多可以有自己的技術方向了。


學習和使用 PHP 相當於只從正臉觀察 PHP,嗯你對它已經一見鍾情了,Good,

接下來你學習 HTML 和 CSS 相當於陪她逛街、買衣服、看時尚雜誌,提升了外在品味,

再接著你學習 JavaScript 相當於教她如何做更聰明的女孩,而不只是個好看的花瓶,

然而習得 C 語言,才是你時常跟她一起遛彎的那條街邊如家酒店 #521 大床房的房卡。

騷年,好好努力!


我的看法:其實沒有所謂的高級,把一個一個bug解決,一個一個功能實現就好了(最好可以用不同的方法),能力就自然上去了吧


如果你在 二次開發 cms curd 前端html 那麼你還只是個 初級phper,一般都是重複性勞動, 進階的方向很多, c語言 可以擴展PHP, 伺服器架構 各種緩存 資料庫 分散式系統部署 , php服務端編程 , 命令行編程 , socket通信, 所以服務端的PHP編程才是進階核心方向,正如js只會用在瀏覽器端真是不夠, 要是 es6 nodejs方向才算前端進階,學PHP 只有往服務端方向走,整體架構意識形成才算高級,這個過程光會PHP是不夠的,多種系統 軟體架構需要在伺服器上折騰總結經驗。 成都這邊工資 初級 5k 左右 中級 5-9K 中高級 10K - 不封頂


初級程序員不要考慮薪資問題,如果當前公司做的項目技術含量很高(數據量大,訪問量大)別想其它,好好想想怎麼把當前的項目做的更好,如果當前項目不行,想辦法找相對好一點的公司,程序員有了本事工資自然不是問題。


高手從來不先出劍,他一出劍,你就倒了~。任何高級都來自簡單,但不是簡單的堆砌。從初級到高級必然有一個循序漸進的過程。歷練出真知。漫漫碼農長征路,唯有修之,復修之。總有一天,你一出劍,倒下的就是你周圍的一群人了。這時候,就搞基(高級)了。


一年工作經驗 你認為你掌握的很好了么!我身邊也有這樣的同事,覺得天天寫這個沒意思,但是寫的代碼質量卻差強人意,對項目不夠細心。

首先當你寫的代碼質量上去了,再開始研究下一步,可以往linux運維方面的知識擴展下,如果空餘時間多,分析一些著名框架的源碼,比如zend framework。學習下國外大牛的編碼規範、設計思想,也有一些有用的類擴充自己的類庫。再往深了去,研究下php的內核!了解php底層到底是怎麼回事,加深對php的了解(前提是你懂c)。以後也可以自己寫一些擴展。


還有看看PHP內核的講解書籍,能自己寫一些擴展,清楚它怎麼運行的


技巧上無需多談,如果是高級PHP當然是管理團隊了,對項目的各個方面掌控。



yii是個不錯的框架 現在都yii2了,只用過yii1


多看看開源的源碼,很多思想還是值得學習的,然後在學習linux操作,運維方面的東西!


項目分析和設計能力,用你掌握的知識去解決客戶的實際需求


1.編程能力

2.設計能力

3.架構能力

4.學習能力


之前我做了一年半的.net也是和你一樣的感覺,但是,我轉php以後我才知道自己之前學的太膚淺了!其實很多時候,一些深入的東西自己要思考一下的,建議工作以後多看看一些其他的網站,了解一些最基本的php相關的原理知識,而不是簡單的寫代碼


一個PHP高級程序員要掌握的知識除普通的PHP程序員知識外,至少還要學習JavaScript、Ajax、CSS和XML等方面的知識。


掌握全棧技術,可以獨立完成項目,完成資料庫設計和功能列表,評估整體工作量,進行恰當的任務分配,並帶領參與開發人員完成項目。


推薦閱讀:

作為一名合格的PHP程序員,應該進行哪些技術儲備?
PHP自由職業者靠譜嗎?或者說是大學在校生,靠接一些項目來做賺錢養活自己。?
網上的PHP視頻版本比較老,是否適合現在(2017)自學?
學習PHP,然後學習C, 深入Linux的, 如果想往底層發展, 應該是如何的一個學習過程?
Symfony2 的優缺點有哪些?

TAG:跳槽 | 求職 | PHP | 職業技能 | 技能 | 工作 | Yii | PHP程序員 |