PHP从入门到接到外包合同,再到放弃
生活随笔
收集整理的這篇文章主要介紹了
PHP从入门到接到外包合同,再到放弃
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
? ? ? ? 15年7月,我自學(xué)兩個(gè)月PHP后進(jìn)入鳥(niǎo)窩(公司),接受作為程序員的第一份工作。那時(shí)候真是一頭純純的菜鳥(niǎo),我甚至連ls命令都不知道。
? ? ? ? 我的第一個(gè)項(xiàng)目是為一個(gè)正在運(yùn)行的網(wǎng)站,寫(xiě)一套相應(yīng)的接口, 供App前端調(diào)用。項(xiàng)目很小,代碼量也小,現(xiàn)在看來(lái)是很簡(jiǎn)單的工作。而當(dāng)時(shí)我在閱讀源碼時(shí)的感覺(jué),就像做英語(yǔ)考試的閱讀理解:一個(gè)個(gè)單詞我都認(rèn)得,但拼起來(lái)是幾個(gè)意思?不過(guò)我學(xué)習(xí)得很快,這個(gè)項(xiàng)目也算順利完成,可是App的體驗(yàn)并不好。這個(gè)項(xiàng)目讓我對(duì)web開(kāi)發(fā)有了初步的了解,源碼也對(duì)我的代碼風(fēng)格產(chǎn)生了一定影響。 ?
? ? ? ? 由于公司一直招聘,我見(jiàn)識(shí)到一些其他的PHPer。其中,echo(一個(gè)人)看過(guò)代碼后,指出我沒(méi)有真正的理解MVC。受第一個(gè)項(xiàng)目的影響,我當(dāng)時(shí)基本上沒(méi)有使用M層,即把數(shù)據(jù)庫(kù)的操作放在C層,所以實(shí)際上是VC結(jié)構(gòu)。我那時(shí)曾經(jīng)思考過(guò),數(shù)據(jù)庫(kù)操作完全可以放在C層,M層有什么意義?后來(lái)我?guī)У膶?shí)習(xí)生阿曼,也有過(guò)類似的困惑。問(wèn)題的答案是很明確的,就是為了提高代碼復(fù)用率。
? ? ? ??菜鳥(niǎo)們總是喜歡把所有代碼,寫(xiě)在一個(gè)文件里,一個(gè)類里,一個(gè)方法里。因?yàn)檫@樣簡(jiǎn)單,符合一般的線性思維習(xí)慣:想到哪里,寫(xiě)到哪里。但這顯然不是一個(gè)合格的程序員思維。模塊化、面向?qū)ο?#xff0c;才是PHPer的真理。我對(duì)阿曼說(shuō):”引用代碼,不要復(fù)制代碼“。
? ? ? ??在相當(dāng)長(zhǎng)的時(shí)間里我的指導(dǎo)思想是,先把想到的寫(xiě)出來(lái)。這種想法讓我吃盡苦頭。如果只是研究一個(gè)新的功能,這樣想沒(méi)有問(wèn)題。但如果放在一個(gè)項(xiàng)目中,后果可能是災(zāi)難性的。我曾經(jīng)多次修改一個(gè)項(xiàng)目的結(jié)構(gòu),因?yàn)橐獢U(kuò)容,添加新功能。這使我們的工作量直線飚升,因?yàn)榈讓咏Y(jié)構(gòu)一改,幾乎所有人都要做出修改。這就是為什么架構(gòu)師如此的重要,我無(wú)法想像一個(gè)大型項(xiàng)目頻繁地修改底層架構(gòu)會(huì)發(fā)生什么事。
? ? ? ??所以動(dòng)手前一定要先想一想,哪怕只是簡(jiǎn)單的估計(jì)項(xiàng)目規(guī)模、劃分模塊。
? ? ? ??不久后,我開(kāi)始全權(quán)負(fù)責(zé)招聘,這項(xiàng)工作讓我有好多體會(huì)、感慨。一開(kāi)始我的方法就是看簡(jiǎn)歷,覺(jué)得還行,就叫來(lái)面試。但這樣有點(diǎn)虛,因?yàn)榭床坏綉?yīng)聘者的代碼。于是,增加一個(gè)環(huán)節(jié),做測(cè)試題。題目是我自己出的,PHP的測(cè)試題考察數(shù)組操作和編寫(xiě)類,Js(前端)考察dom操作。
? ? ? ??這讓我看到很多人寫(xiě)的代碼,人和人真的很不同。PHP題一般都能做完(實(shí)現(xiàn)功能),但在代碼規(guī)范,執(zhí)行效率上千差萬(wàn)別。印象比較深刻的一個(gè)小伙子,剛畢業(yè),有實(shí)習(xí)經(jīng)歷,他完成得很好,但在交談過(guò)程中,顯得很不自信。他認(rèn)為是實(shí)習(xí)經(jīng)歷讓他有成長(zhǎng),也留下了陰影。還有一位有四年工作經(jīng)驗(yàn)的PHPer(我應(yīng)該叫他前輩),他當(dāng)然也完成了題目,但是我覺(jué)得他的答卷對(duì)不起四年經(jīng)驗(yàn)。因?yàn)樗昧俗钊菀紫氲降?#xff0c;效率最低的實(shí)現(xiàn)方法,與一個(gè)實(shí)習(xí)生沒(méi)什么差別, 甚至代碼很不美觀。
? ? ? ??Js題目的完成度很低,高質(zhì)量的代碼很少。我后來(lái)意識(shí)到題目的方向可能錯(cuò)了,邏輯考察過(guò)多,就像為了出題而把問(wèn)題復(fù)雜化。前端工程師的日常工作很少會(huì)遇到比較復(fù)雜的邏輯。當(dāng)然也有做得好的,他們讓我見(jiàn)識(shí)了一堆東西,webpack, ?Angular, Vue, Backbone, gulp等等。我想說(shuō),”貴圈發(fā)展得太快,我跟不上“。
? ? ? ??實(shí)現(xiàn)一個(gè)功能往往有很多種方法。你可以把一段代碼封裝成一個(gè)函數(shù),也可以是一個(gè)類,甚至不封裝。你可以把邏輯代碼寫(xiě)在M層,也可以寫(xiě)在C層,甚至寫(xiě)在V層,用js來(lái)實(shí)現(xiàn)。不同的解決方案,就是水平的體驗(yàn)。寫(xiě)代碼不能滿足于只實(shí)現(xiàn)功能,我正在追求優(yōu)雅的路上。
? ? ? ??與很多PHP初學(xué)者一樣,我第一個(gè)學(xué)習(xí)的框架是ThinkPHP。TP很好,方便,簡(jiǎn)潔,易學(xué),文檔齊全,能找到一大堆教學(xué)資料,大多數(shù)PHPer也都接觸過(guò)TP, 交流零成本。我甚至認(rèn)為以后的項(xiàng)目都用TP就可以了,直到遇見(jiàn)Laravel。我們接到一個(gè)微信公眾號(hào)開(kāi)發(fā)外包單,對(duì)方堅(jiān)持使用Laravel。于是我們只能邊學(xué)邊做,慢慢地我被它的強(qiáng)大和優(yōu)雅所震撼。我不打算對(duì)比不同框架的優(yōu)劣(這個(gè)問(wèn)題永遠(yuǎn)都吵不完),只談代碼風(fēng)格。
? ? ? ??Laravel5.2要求的最低PHP版本是5.5,它大量使用新的特性和標(biāo)準(zhǔn),如閉包、Reflection、psr、spl、靜態(tài)綁定等等,這讓Laravel看起來(lái)很“高大上”。在閱讀源碼過(guò)程中,會(huì)遇到好多“新”的東西,這讓我對(duì)PHP的理解更深刻和廣闊。
? ? ? ??當(dāng)然解決問(wèn)題不一定需要“高大上”的代碼, 但是程序員總是追求“高大上”,不是嗎?
? ? ? ??由于大量的外包工作,我接觸過(guò)很多cms或框架,如discuz, ecshop, shopnc, wordpress, dedecms, 小豬cms, WeiPHP, 方維p2p等等,有一些對(duì)PHP的要求還停留在5.2。
? ? ? ??在此忍不住吐糟一下外包,好一些甲方明確要求使用某個(gè)cms,在此基礎(chǔ)上“二次開(kāi)發(fā)”。他們認(rèn)為這樣可以壓低成本,“套一下模版,改兩行代碼就可以了”。理論上是對(duì)的,但是甲方需求“一定會(huì)”修改的。比如dedecms的頁(yè)面都是預(yù)先生成的靜態(tài)html文件,現(xiàn)在要加入一個(gè)動(dòng)態(tài)的頁(yè)面,怎么辦?當(dāng)然也有套的很好的,我見(jiàn)過(guò)用wordpress做企業(yè)網(wǎng)站,就好像徹積木一樣拼出來(lái),真的很快。
? ? ? ??我還見(jiàn)過(guò)這樣的需求,“使用原生PHP開(kāi)發(fā),不能使用框架”。對(duì)于是否使用框架的爭(zhēng)論,早就有了。我的答案是,“無(wú)法理解拒絕使用主流框架的想法”。理由之一是擔(dān)心框架有未發(fā)現(xiàn)的bug,其實(shí)所謂的不用框架的原生PHP,難道不封裝數(shù)據(jù)庫(kù)操作層?不用模板引擎?不實(shí)現(xiàn)路由功能?如果這些都做了,與一個(gè)開(kāi)源框架何異?而且哪來(lái)的自信,覺(jué)得自主開(kāi)發(fā)的框架,可以比主流框架封裝得更好,執(zhí)行效率更高?
? ? ? ??我是開(kāi)源的忠實(shí)粉絲。由于多人協(xié)作必須使用版本控制,我選擇用git。為什么不是SVN?因?yàn)間it 看起來(lái)更“高大上”。由此關(guān)注到GitHub,但真正使用開(kāi)源,還是從學(xué)習(xí)用Laravel開(kāi)始。從各種開(kāi)源項(xiàng)目中,我吸收到很多營(yíng)養(yǎng),同時(shí)git 和 composer 也解決了項(xiàng)目開(kāi)發(fā)的很多問(wèn)題。后來(lái)我也開(kāi)始寫(xiě)幾個(gè)項(xiàng)目放在GitHub,到現(xiàn)在還沒(méi)一顆星....
? ? ? ?我還稍微學(xué)習(xí)了一下Python, 主要是為擺脫煩人的bash。還有node.js,這個(gè)只能說(shuō)還處在"hello world"的階段。
? ? ? ??文章的題目說(shuō)的放棄不是指放棄PHP,而是放棄外包。上面提到的糟點(diǎn)都是技術(shù)上的問(wèn)題,是可以解決的。而不能解決的核心問(wèn)題是,外包的產(chǎn)品不是自己的。我找不到理由去優(yōu)化代碼效率,對(duì)頁(yè)面微調(diào),不能提出對(duì)需求的修改意見(jiàn)。如果我這樣做,會(huì)被認(rèn)為是傻。因?yàn)檫@是甲方的產(chǎn)品,我只需要在規(guī)定時(shí)間內(nèi)做過(guò)指定的界面、實(shí)現(xiàn)相應(yīng)的功能,就可以了,交貨收錢后管他洪水滔天。? ? ? ??這樣不可能做出優(yōu)秀的產(chǎn)品。我可能不是一個(gè)安分的程序員,總對(duì)產(chǎn)品有想法。我想做一個(gè)“好的”產(chǎn)品,而不是很多個(gè)“能用的”產(chǎn)品。
? ? ? ??絮絮叨叨說(shuō)了這么多,希望以后看的時(shí)候能不忘初心吧。不知道明年七月會(huì)不會(huì)再寫(xiě)?
總結(jié)
以上是生活随笔為你收集整理的PHP从入门到接到外包合同,再到放弃的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 机器学习中的奥卡姆剃刀定律
- 下一篇: PHP动态网站开发期末试卷,《PHP动态