PHP程序員的現(xiàn)狀 ?
下面就是PHP程序員的現(xiàn)狀等等的介紹,希望為您帶來幫助。 ?
?
現(xiàn)階段大部分PHP程序員都比較迷茫,初級 PHPer 覺得這個(gè)行業(yè)難,中級 PHPer 大都想通過學(xué)習(xí)來提升自己,但往往會陷入今天追這個(gè)技術(shù)明天追那個(gè)技術(shù)的一種情況,高級 PHPer 大都有了自己的知識體系,部分在架構(gòu)的位置。 ?
程序員對自己的行業(yè)認(rèn)識是非常重要的,也就是職業(yè)生涯規(guī)劃。這是一個(gè)比較難的問題,因?yàn)橐獙ψ约旱穆殬I(yè)有所規(guī)劃,首先要充分了解行業(yè)。這一點(diǎn)和當(dāng)初為什么選擇做程序員有很大的關(guān)系。 ?
一般來說,如果你很難熬過開發(fā)生涯的入門期,可能說明你不適合這個(gè)行業(yè);如果你無法通過蛻變期,你可能就不會有太大的成就。 ?
每個(gè)人開發(fā)生涯的入門各有不同,一部分人是對于這個(gè)行業(yè)感興趣自己心中也有一個(gè)目標(biāo),雖然沒有清晰的職業(yè)規(guī)劃,但至少會有一個(gè)該領(lǐng)域的偶像。還有一部分人是經(jīng)過三、四個(gè)月的培訓(xùn)進(jìn)入這個(gè)行業(yè)的。 ?
我之前用重慶互聯(lián)網(wǎng)中某家培訓(xùn)機(jī)構(gòu)(YMSD)的數(shù)據(jù)分析過,在這部分培訓(xùn)進(jìn)入行業(yè)的學(xué)生中 2 年后還在這個(gè)崗位繼續(xù)發(fā)展的學(xué)生僅僅占有 20%。也就是說 80% 的學(xué)生花錢花時(shí)間只是做了回陪跑員。這也從側(cè)面說明,如果我們進(jìn)入這個(gè)行業(yè),除了期望讓自己能夠掙到很多錢,也必須對以后的發(fā)展有個(gè)預(yù)期。 ?
一般來說,通過培訓(xùn)入行的開發(fā)人員在工作中會走得非常艱難,因?yàn)樗麄儧]有技術(shù)路線的體系目標(biāo),而在線下培訓(xùn)機(jī)構(gòu)中接受的是一味地模仿,非常缺乏創(chuàng)新能力。而且據(jù)我所知,大部分線下培訓(xùn)機(jī)構(gòu)的課程體系至少和企業(yè)場景脫節(jié) 5 年。所以這部分程序員更應(yīng)該努力改變自己的現(xiàn)狀,明確自己的處境。 ?
程序員如何快速成長 ?
我們主要是探討,拋磚引玉。 ?
首先我們要看到的字眼是成長。 ?
我之前帶過一個(gè)程序員,他也是做了一年的開發(fā)了。我讓他通過 User-Agent 來判斷用戶是不是在微信中訪問的,結(jié)果他問我什么是 User-Agent。大家別覺得可笑,其實(shí)不知道的人大有人在,為什么呢?因?yàn)樗麄冎蛔⒅赜谧约旱?CURD 能力了。我不是說 CURD 不好,只是因?yàn)?CURD 就像了解 User-Agent 一樣只是基礎(chǔ)。 ?
對于開發(fā)人員來說了解計(jì)算機(jī)網(wǎng)絡(luò)方面的知識非常重要,計(jì)算機(jī)相關(guān)專業(yè)畢業(yè)的都學(xué)習(xí)過計(jì)算機(jī)網(wǎng)絡(luò)這門課程。非計(jì)算機(jī)專業(yè)也沒有關(guān)系,最基本的 http 請求報(bào)文和相應(yīng)報(bào)文的結(jié)構(gòu)都應(yīng)該了解一些,這些都是基礎(chǔ)。 ?
之前我在培訓(xùn)機(jī)構(gòu)機(jī)械化時(shí),我讓學(xué)生背誦的面試題中還有 mysql 的 InnoDb 和 MyISAM 引擎的區(qū)別,每當(dāng)看到學(xué)生回答一個(gè)支持事務(wù)一個(gè)不支持事務(wù),然后看著領(lǐng)導(dǎo)高興到想笑的表情時(shí),我就想笑。 ?
支持事務(wù)是一個(gè)區(qū)別,那我不需要支持事務(wù),我使用 InnoDb 的引擎又有什么問題呢?所以我覺得脫離場景談知識點(diǎn)往往是程序員被歸為底端序列的最直接原因。 ?
以上只是一個(gè)例子,只是說明學(xué)習(xí)也需要分場景。學(xué)習(xí)語言也是一樣的,我們要想想為什么不用當(dāng)前的語言而要再選擇一種新的語言。比如為什么不用 PHP 做機(jī)器學(xué)習(xí)?可能說到這個(gè)問題很多人就想笑,‘PHP 是世界上*的語言’(因?yàn)橄矏鬯匀菸易院谝幌?。 ?
但是我們再來嚴(yán)肅的思考這個(gè)問題,請你思考一下。很多學(xué)習(xí)機(jī)器學(xué)習(xí)的人也是被潮流推著走,別人都學(xué)習(xí) python 來做及其學(xué)習(xí)那我也要學(xué)習(xí) python。當(dāng)然人生苦短,你學(xué)習(xí) python 的選擇是沒有錯(cuò)的。在追著 python 跑中不乏有一些 c、c++、java 程序員。 ?
引用別人經(jīng)常說的一句話 “幾年前一幫人叫苦連天的說 java 要死了但是 java 死了嗎?” 別再看著語言杞人憂天了,你更應(yīng)該學(xué)會的是選擇語言。 ?
當(dāng)然招聘網(wǎng)站上,企業(yè)所需的程序員需掌握的語言種類,也是一部分程序員學(xué)習(xí)的方向。企業(yè)在選擇一個(gè)語言的時(shí)候考慮的因素非常多,包括了之前項(xiàng)目所使用的語言情況、遷移的成本、人員培訓(xùn)成本、語言所耗費(fèi)的硬件成本、人員溝通成本,最主要的是能否解決當(dāng)前遇到問題的,以及解決問題需要耗費(fèi)的時(shí)間。 ?
所以快速成長需要我們自己有主見地分場景來仔細(xì)探究技術(shù)細(xì)節(jié),需要有極強(qiáng)的學(xué)習(xí)能力。 ?
PHP程序員有前景嗎 ?
如果你還不是一名程序員,你是否在為是否從事程序員工作而掙扎呢? ?
如果你已經(jīng)是一名程序員,你是否在為程序員的前途而感到迷茫呢? ?
如果是,小卓可以告訴你,做程序員是有前途的! ?
首先你要明白,PHP程序員前途有兩條進(jìn)階路線。一條是技術(shù)路線,由程序員,經(jīng)系統(tǒng)分析師、系統(tǒng)設(shè)計(jì)師直到架構(gòu)設(shè)計(jì)師為歸宿。而另一條php程序員發(fā)展方向是領(lǐng)導(dǎo)路線,由程序員,經(jīng)開發(fā)小組負(fù)責(zé)人、工程負(fù)責(zé)人,奮斗到項(xiàng)目經(jīng)理。 ?
?
從程序員的角度 ?
可以發(fā)現(xiàn)更好的方向,IT業(yè)不斷有新東西出現(xiàn)。用J系列語言比用C系列語言更時(shí)尚,用面向?qū)ο?或構(gòu)件)的方法比面向過程的方法更先進(jìn),還有Delphi、.NET、eLearning等開發(fā)工具。如果你能不斷與時(shí)俱進(jìn),追著新東西走,可以極大的鍛煉你的學(xué)習(xí)能力,分析問題的能力和解決問題的能力。 ?
從社會的角度來講 ?
社會對程序員的定位是滿足技術(shù)需求,程序員自身所受的教育和積累的經(jīng)驗(yàn)也使自主前程意識局限于技術(shù)路線。實(shí)際上,我們所看到的在技術(shù)方面有建樹的前輩多是綜合型的人才,單純局限于技術(shù)思維的多有行為局限,也難看出自身的幸福感。 ?
其實(shí),人有多方面的屬性,除非你是極少數(shù)的天才,在某一方面特別突出(相應(yīng)地在其它方面就很脆弱),大多數(shù)人是多種屬性綜合發(fā)展,而且各屬性間相互促進(jìn)。所以,在考慮程序員的前程時(shí),有必要分析程序員的主要屬性及其可能產(chǎn)生的影響。 ?
當(dāng)你把程序當(dāng)作異物看待時(shí),編程是一種負(fù)擔(dān),是勞累的事兒,是極其厭惡的事。如果能把編程當(dāng)成一種興趣,一種愛好。這樣你就會不斷努力,不斷學(xué)習(xí)新知識,把程序作為人生奮進(jìn)的載體,創(chuàng)造性地使用程序,并且能影響到其它領(lǐng)域。 ?
php程序員前途很大,做程序員最需要的就是熬得住找準(zhǔn)php程序員發(fā)展方向,有時(shí)候你努力了很長一段時(shí)間可能一點(diǎn)好的結(jié)果都沒有這是很正常的。所以就看你的耐心怎么樣。 ?
如果你僅僅是有激情,想進(jìn)入這個(gè)行業(yè)嘗試,那做為前輩來說我還是奉勸你打消這個(gè)念頭,到IT里面做程序設(shè)計(jì)是很辛苦的,很多時(shí)候你腦子里想的只有代碼,其他的都不記得了。生活不規(guī)律,睡眠不足這些都是家常便飯。 ?
所以,如果你想進(jìn)來,那請你做好充分的思想準(zhǔn)備,很多只有激情的年輕人,*都是以放棄告終的,千萬要想好,半途而廢只會浪費(fèi)光陰。 ?
*,做程序員是有前途的,這個(gè)前途不是停止在程序員上,而是不斷的往上走,比如成為工程師、架構(gòu)師、分析師等,這些才是更高的你需要去奮斗的目標(biāo),千萬不要只做底層的程序員,不然就停止進(jìn)步了。 ?
中級PHP程序員應(yīng)掌握的技術(shù) ?
1.Linux: ?
能夠流暢的使用Shell腳本來完成很多自動化的工作;awk/sed/perl 也操作的不錯(cuò),能夠完成很多文本處理和數(shù)據(jù)統(tǒng)計(jì)等工作;基本能夠安裝大 部分非特殊的Linux程序(包括各種庫、包、第三方依賴等等,比如MongoDB/Redis/Sphinx/Luncene/SVN之類的);了解基 本的Linux服務(wù),知道如何查看Linux的性能指標(biāo)數(shù)據(jù),知道基本的Linux下面的問題跟蹤等 ?
2. Nginx: ?
在*階段的基礎(chǔ)上面,了解復(fù)雜一些的Nginx配置;包括多核配置、events、proxy_pass,sendfile/tcp_*配置,知道超 時(shí)等相關(guān)配置和性能影響;知道nginx除了web server,還能夠承擔(dān)代理服務(wù)器、反向靜態(tài)服務(wù)器等配置;知道基本的nginx配置調(diào)優(yōu);知道如 何配置權(quán)限、編譯一個(gè)nginx擴(kuò)展到nginx;知道基本的nginx運(yùn)行原理(master/worker機(jī)制,epoll),知道為什么nginx 性能比apache性能好等知識; ?
3. MySQL/MongoDB: ?
在*階段的基礎(chǔ)上面,在MySQL開發(fā)方面,掌握很多小技巧,包括常規(guī)SQL優(yōu)化(group by/order by/rand優(yōu)化等);除了能夠搭 建MySQL,還能夠冷熱備份MySQL數(shù)據(jù),還知道影響innodb/myisam性能的配置選項(xiàng)(比如key_buffer/query_cache /sort_buffer/innodb_buffer_pool_size/innodb_flush_log_at_trx_commit等),也知 道這些選項(xiàng)配置成為多少值合適;另外也了解一些特殊的配置選項(xiàng),比如 知道如何搭建mysql主從同步的環(huán)境,知道各個(gè)binlog_format的區(qū) 別;知道MySQL的性能追查,包括slow_log/explain等,還能夠知道基本的索引建立處理等知識;原理方面了解基本的MySQL的架構(gòu) (Server+存儲引擎),知道基本的InnoDB/MyISAM索引存儲結(jié)構(gòu)和不同(聚簇索引,B樹);知道基本的InnoDB事務(wù)處理機(jī)制;了解大 部分MySQL異常情況的處理方案(或者知道哪兒找到處理方案)。條件允許的情況,建議了解一下NoSQL的代表MongoDB數(shù)據(jù)庫,順便對比跟 MySQL的差別,同事能夠在合適的應(yīng)用場景安全謹(jǐn)慎的使用MongoDB,知道基本的PHP與MongoDB的結(jié)合開發(fā)。 ?
4. Redis/Memcached: ?
在大部分中型系統(tǒng)里面一定會涉及到緩存處理,所以一定要了解基本的緩存;知道Memcached和Redis的異同和應(yīng)用場景,能夠獨(dú)立安 裝 Redis/Memcached,了解Memcahed的一些基本特性和限制,比如*的value值,知道PHP跟他們的使用結(jié)合;Redis了解 基本工作原理和使用,了解常規(guī)的數(shù)據(jù)類型,知道什么場景應(yīng)用什么類型,了解Redis的事務(wù)等等。原理部分,能夠大概了解Memcached的內(nèi)存結(jié)構(gòu) (slab機(jī)制),redis就了解常用數(shù)據(jù)類型底層實(shí)現(xiàn)存儲結(jié)構(gòu)(SDS/鏈表/SkipList/HashTable)等等,順便了解一下Redis 的事務(wù)、RDB、AOF等機(jī)制更好 ?
5. PHP: ?
除了*階段的能力,安裝配置方面能夠隨意安裝PHP和各種第三方擴(kuò)展的編譯安裝配置;了解php-fpm的大部分配置選項(xiàng)和含義(如 max_requests/max_children/request_terminate_timeout之類的影響性能的配置),知道m(xù)od_php /fastcgi的區(qū)別;在PHP方面已經(jīng)能夠熟練各種基礎(chǔ)技術(shù),還包括各種深入些的PHP,包括對PHP面向?qū)ο蟮纳钊肜斫?SPL/語法層面的特殊特 性比如反射之類的;在框架方面已經(jīng)閱讀過最少一個(gè)以上常規(guī)PHP MVC框架的代碼了,知道基本PHP框架內(nèi)部實(shí)現(xiàn)機(jī)制和設(shè)計(jì)思想;在PHP開發(fā)中已經(jīng)能 夠熟練使用常規(guī)的設(shè)計(jì)模式來應(yīng)用開發(fā)(抽象工廠/單例/觀察者/命令鏈/策略/適配器 等模式);建議開發(fā)自己的PHP MVC框架來充分讓開發(fā)自由化, 讓自己深入理解MVC模式,也讓自己能夠在業(yè)務(wù)項(xiàng)目開發(fā)里快速升級;熟悉PHP的各種代碼優(yōu)化方法,熟悉大部分PHP安全方面問題的解決處理;熟悉基本的 PHP執(zhí)行的機(jī)制原理(Zend引擎/擴(kuò)展基本工作機(jī)制); ?
6. 系統(tǒng)設(shè)計(jì): ?
能夠設(shè)計(jì)大部分中型系統(tǒng)的網(wǎng)站架構(gòu)、數(shù)據(jù)庫、基本PHP框架選型;性能測試排查處理等;能夠完成類似:瀏覽 器 -> CDN(Squid) -> Nginx+PHP -> 緩存 -> 數(shù)據(jù)庫 結(jié)構(gòu)網(wǎng)站的基本設(shè)計(jì)開發(fā)維護(hù);能夠支撐 每天數(shù)百萬到千萬流量基本網(wǎng)站的開發(fā)維護(hù)工作; ?