如何成為一個優秀的 PHP 工程師?

因為各種各樣的原因,馬上要成為一個前端 React 後端 PHP5 的程序員,並且很可能很多時間花在寫 PHP 上面。之前對後端的了解只是了解一點 node,Express.js/KOA1 和 MySQL,比較熟悉 Javascript 和 Scheme(也就是說完全沒有碰過 Java 和 CPP17);

請問如何

1. 寫出不讓同事想打人的 PHP 代碼

2. 如何寫優秀的可維護的 PHP 代碼

3. 如何積累工作經驗以及注重哪些地方才能成為一個不被 PHP 現有 frameworks 局限的優秀後端程序員


只要你的同事中存在知乎PHP黑這樣的角色,是無論如何也會被打的。寫風格良好的代碼真跟編程語言沒太大關係,只怪你自己水平夠不夠。事實上,你如果了解OOP,了解設計模式,你寫的PHP代碼的風格真不會差到哪裡去。

來黑PHP吧!讓PHP像海燕般掠過風浪!


都說放棄php,php7足夠應付大部分業務,難道所有的應用並發都那麼高,運算量都那麼大嗎,知乎裝比越來越厲害了,就和所有公司業務都是百萬級一樣,就算百萬級大部分場景下php也足夠應付。

有人統計過,高並發和高運算量業務在全國現有的情況只佔10%,我就納悶了,放著好用的不用,非去用效率低的,成本高的,而且效果都一樣。


首先排除新開php項目的情況。像我們這種90%的代碼資產都在php技術棧上的公司都努力嘗試在新項目里換其他語言平台(哪怕是golang -_-#)。何況居然還不是php7,還要用php5?

所以默認假設是進入一個legacy的代碼庫。那麼:

1. 寫出不讓同事想打人的 PHP 代碼

基本上你的同事應該已經在這個項目里待了更長時間,那就好辦了,你有很大概率可以找到用來打他的更多代碼。

2. 如何寫優秀的可維護的 PHP 代碼

向同事們學習!是不是優秀可維護不知道,做到通過代碼形成互相威懾來達成和平還是很有希望的。

3. 如何積累工作經驗以及注重哪些地方才能成為一個不被 PHP 現有 frameworks 局限的優秀後端程序員

偷偷寫 node。Java 啥的也可。

當然,更有職業道德的方式是給它上微服務架構。這樣就可以一個微服務一個微服務的逐步把 php 換成其他技術棧啦。就算換不了,因為微服務比較小嘛,代碼規模小嘛,看上去就沒有那麼糟糕,或者糟糕也可以忽略啦!


1. 寫出不讓同事想打人的 PHP 代碼

除非你不寫代碼,用任何語言,你都會寫出讓同事想打人的代碼。但你開發時可以儘力寫不重複,可被別人復用的代碼,移交測試前多自測。可以大量減少同事想打人的次數。

2. 如何寫優秀的可維護的 PHP 代碼

在上面的基礎上,多看別人優秀的框架,或者優秀人的代碼,想想為什麼這麼用。在自己寫代碼的時候多思考,看看是否我能學以致用,同時自己寫代碼的時候想想寫在自己代碼中的這個位置是否合適。

3. 如何積累工作經驗以及注重哪些地方才能成為一個不被 PHP 現有 frameworks 局限的優秀後端程序員。

上面人的回答應該是屬於不被PHP思想所局限,這時多學幾門語言是對的。但是你的問題是不被現有的PHP框架所局限,那答案應該是自己不用框架寫一個項目或者說自己重新搭建一個框架寫一個項目,這個項目不能有任何別人的代碼或者庫。開發一套下來你應該有所感悟。同時儘可能多看看PHP底層,儘可能從底層看懂PHP的生命流程和實現原理。這樣你應該不受PHP框架所限制了。


首先 聲明一點 代碼寫的好和語言關係不大 更多的與對他人代碼的閱讀對代碼本身的思考有關。

我一直覺得語言不重要 重要的是你思考過的問題空間。很多情況下,針對同一類問題,不同語言僅僅是對解決方案的不同描述罷了。但是,語言雖然不會影響你對問題的思考,卻會影響你解決方案的實施與擴展性。

給新人的建議:

  • 努力去理解他人的代碼 無論多爛 只有看過爛的代碼 你才知道爛在哪裡。下次你看到好的代碼 才知道好的代碼好在哪裡。如果打算在公司還呆一年半載的話 最好能花時間把爛代碼一點一點重構 不要怕捅婁子 細心排查 大膽求證。慢慢的你會發現自己的進步。
  • 多看PHP的API。 用官方API的解決方法 肯定不是一個壞方法。特別是array的處理 如多用array_column array_combine array_merge。
  • 一定減少foreach 和 if的嵌套使用
  • 代碼其實還是為實際產品服務的 就像離開實際業務的架構都是耍流氓。所以多站在產品的角度考慮問題
  • 不斷學習

對於寫PHP的你,相對於其他語言的開發,你可能會有如下特點。

強項:

作為PHP開發經常啥都需要做,所以在通常會和直接與產品PK,在人力緊缺的情況下可能會運維 前端都干。什麼原型圖,docker+docker-compose,CI平台搭建,Redis,Mysql主從+分庫分表,Nginx代理,埠轉發,分散式ID生成解決方案,CDN,http協議,Vue.js,Scss,Gulp 統統不在話下。

  • 對產品的理解。
  • Linux系統的熟悉度
  • 前端技能

弱項:

  • 對強類型語言的數據類型掌握不全。PHP的array讓你非常容易入門,但是降低了PHP的性能,同時也讓你缺乏了對 list, map, struct, 泛型的實際操作
  • 對線程 鎖 並發的理解不夠
  • 思考過的問題空間較頂層,對底層的理解欠缺

所以在寫了幾年PHP之後 建議學習一門新的語言 比如golang 作為補充技能。

(以上均為個人見解,不服來辯)


很贊同首先要寫出不讓同事打的代碼

規範代碼是第一步,也是最重要的一步


任何技術都是相通的,只要你有足夠好的技術功底,換個語言只是熟悉語法而已


語言只是體現形式,演算法、思路、匠心才是程序的核心。想當年,自己用ASP應付了若干系統。包括在線考試系統,用西數百十塊錢的虛擬主機,達到了20用戶同時考試的並發。現在轉PHP,在TH基礎上,優化底層、設計緩存然後在基礎上做P2P……


學習規範,多看多寫多想,持之以恆。


推薦閱讀:

待進階的phper 想要通讀一個開源項目源碼,應該研究哪個較好?
對於PHP程序初學者來說,有沒有比較好的開源項目適合學習和深入的呢?
相對於別的php框架來說thinkphp有什麼缺點嗎?
面試php工程師出什麼考題好?
Web後台語言的選擇?

TAG:PHP | PHP學習 | 全棧工程師 |