什么是程序員的核心競(jìng)爭(zhēng)力?
本文來自知乎的提問:什么是程序員的核心競(jìng)爭(zhēng)力?
如題所說,我現(xiàn)在是個(gè)剛畢業(yè)的小本,野雞學(xué)校,而且不是正統(tǒng)的計(jì)算機(jī)專業(yè),現(xiàn)在踏入了程序員這一行,到底什么樣的技能才是才是程序員的核心競(jìng)爭(zhēng)力,換言之,我在工作的前幾年,需要累積什么樣的技能,之后才能更好的和老板要工資,提要求。
圖片來自 yestone
姚冬,招聘音視頻相關(guān)算法工程師
學(xué)習(xí)能力,尤其是自學(xué)能力,你啥時(shí)看到那些有名的程序高手在論壇上問“學(xué)習(xí) XX 該看什么書,如何快速學(xué)習(xí) XXX,學(xué)習(xí) XXX 有什么代碼推薦”之類的問題,他們想學(xué)什么很快就能自己找到相關(guān)資料。這個(gè)行業(yè)發(fā)展太快,技術(shù)淘汰的速度也很快,3 年不學(xué)新東西就可能落伍了。
動(dòng)手能力,都是看書看資料,當(dāng)別人還在糾結(jié)看什么書,還在糾結(jié)書里的字句是什么意思的時(shí)候,有些人的幾百上千行代碼都已經(jīng)能運(yùn)行了。
耐心和毅力,做程序員興趣固然重要,寫自己喜歡的代碼那是相當(dāng)愉快的事情,但是程序開發(fā)中無論如何還有大量乏味無趣的事情,要能堅(jiān)持,咬牙把這些做完。
表達(dá)能力,能在大庭廣眾下,把自己的想法邏輯清晰流暢地講出來,讓人聽懂。
那么技術(shù)呢?技術(shù)不重要,有了以上幾種能力,市場(chǎng)上需要什么技術(shù),很快就能掌握了。
***再說說工資的事,記住兩句話:
工資不是老板對(duì)你過去貢獻(xiàn)的回報(bào)而是對(duì)你未來貢獻(xiàn)的預(yù)期。
現(xiàn)任老板不可能給出讓你滿意的工資,下一任老板才會(huì)。
曹政,數(shù)據(jù)控/歷史控/考證控
姚冬回答的非常好,我狗尾續(xù)貂的說幾句。
我們都知道學(xué)習(xí)能力很重要,那么學(xué)習(xí)能力從何而來,除了去看書上課這種,如何在實(shí)踐工作中學(xué)習(xí)成長(zhǎng)?
我之前微博說了一個(gè)籠統(tǒng)的概念,什么是能力? 對(duì)待問題的態(tài)度,以及處理問題的思路和方法。
先說態(tài)度
你服務(wù)器偶爾出 501 錯(cuò)誤,也許比例不高(知乎也出現(xiàn)過很多次),很多程序員,沒錯(cuò),是很多,假裝看不見,不在乎,或者歸咎于人品問題。 這就是態(tài)度問題。
再往后,負(fù)載高了或者其他什么原因,突然頻繁出現(xiàn) 501 錯(cuò)誤,不去追尋深入的原因,而是找各種借口, 什么 IDC 服務(wù)商不好,服務(wù)器品牌不好,操作系統(tǒng)不好,數(shù)據(jù)庫(kù)不好,CDN 不好,網(wǎng)絡(luò)狀況不好,web server 不好,甚至,直接對(duì) Boss 說我們被 DDOS 啦?。ㄓ龅竭^,幫他 Boss 找過多個(gè)安全專家會(huì)診,***發(fā)現(xiàn)根本不是 DDOS,是程序員太爛。)
這就是態(tài)度,觸目驚心,如果能對(duì)問題有敏感性,能知道對(duì)任何小的,輕微的問題有足夠的敏銳度,你就有了一個(gè)快速成長(zhǎng)的基礎(chǔ)。對(duì)問題的敏銳度是非常重要的。很多性能或程序邏輯上非致命的 bug,在不夠敏銳的時(shí)候是發(fā)現(xiàn)不了的,但是一旦進(jìn)入特殊場(chǎng)景就會(huì)驟然爆發(fā),你多一點(diǎn)敏銳度,就會(huì)減少這種危機(jī)的風(fēng)險(xiǎn)。
第二個(gè)態(tài)度是解決問題的態(tài)度,有人對(duì)自己的解決方案信心滿滿,認(rèn)為萬無一失,但有的人就會(huì)多留一條后路;就好比你說我服務(wù)器要不要做安全加固,肯定要做對(duì)不對(duì),要做到盡可能嚴(yán)謹(jǐn)和周全,但是你數(shù)據(jù)庫(kù)保存密碼的時(shí)候是不是還要加密?而且要隨機(jī) salt,不就是防止萬一依然有漏洞被人拿庫(kù)怎么辦么。程序也一樣,以前寫的一些服務(wù)端守護(hù)進(jìn)程,有 bug,會(huì)莫名其妙的終止,這個(gè) bug 當(dāng)然要定位,要修復(fù),但是同時(shí),寫一個(gè) cron 檢查這個(gè)守護(hù)進(jìn)程狀態(tài),一旦遇到終止給予自動(dòng)恢復(fù),這就是第二手準(zhǔn)備,即便你多么不希望他執(zhí)行,這個(gè)準(zhǔn)備還是要做的。對(duì)問題做兩手甚至三手準(zhǔn)備,也是優(yōu)秀程序員,架構(gòu)師的關(guān)鍵素質(zhì)。
第三個(gè)態(tài)度是基于溝通與理解的態(tài)度,產(chǎn)品或運(yùn)營(yíng)提了一個(gè)不靠譜需求,一句話打回去當(dāng)然很爽很威風(fēng),但是有沒有仔細(xì)溝通分析過,這個(gè)需求基于怎樣的實(shí)際訴求,這個(gè)實(shí)際訴求有沒有更合理的實(shí)現(xiàn)途徑,一句話“這個(gè)沒法做,這個(gè)實(shí)現(xiàn)成本太高”,不是正確的溝通態(tài)度,而且,***秀的產(chǎn)品,往往是實(shí)現(xiàn)了那些原本人們認(rèn)為無法實(shí)現(xiàn)的訴求。
這樣的態(tài)度,才有了一個(gè)持續(xù)進(jìn)步的基礎(chǔ),下面說思路和方法。
優(yōu)秀的程序員和平庸的程序員,如果只看敲打代碼的速度,我覺得是分不出來的,也許每人都可以一天寫很多行代碼,但是遇到問題后,平庸的程序員的解決效率,和優(yōu)秀程序員相比就會(huì)有天壤之別。 所謂解決效率,不外乎對(duì) bug 的分析、定位,以及思考。
最基本的一條,看執(zhí)行日志,看各種日志,web server 的日志,數(shù)據(jù)庫(kù)的日志,慢查詢?nèi)罩荆琤inlog 日志,php 的錯(cuò)誤日志,等等等等,線上出問題瞎猜連日志都不看的大有人在??慈罩静蛔屑?xì)不完整的也大有人在,你能去認(rèn)真研究日志已經(jīng)超越很多人了。
第二條,模塊測(cè)試和斷點(diǎn)分析,程序員一個(gè)壞習(xí)慣就是上來就寫很大一坨代碼然后再執(zhí)行,不知道一個(gè)模塊一個(gè)模塊來寫來測(cè)試,執(zhí)行出了問題不知道設(shè)置斷點(diǎn),縮小范圍逐步分析。斷點(diǎn)分析非常簡(jiǎn)單,將整個(gè)代碼中插幾個(gè)中間輸出,觀察哪個(gè)環(huán)節(jié)出了問題,或者觀察每個(gè)環(huán)節(jié)的系統(tǒng)開銷,對(duì)調(diào)錯(cuò)和性能優(yōu)化都非常重要,高手們大概認(rèn)為這是 ABC 的東西,但是就這玩意我看到的大部分程序員都沒有這個(gè)習(xí)慣。
第三條,錯(cuò)誤信息的理解和搜索,搜索引擎上有各種豐富的技術(shù)資料和技術(shù)問答,你所遇到的錯(cuò)誤信息和錯(cuò)誤提示,通常都能在網(wǎng)上搜索到,當(dāng)然,搜索到后要結(jié)合你的場(chǎng)景認(rèn)真思考,并理解透徹,而不是照貓畫虎的去處理,否則可能這次運(yùn)氣好就蒙對(duì)了,下次運(yùn)氣不好又不知道怎么回事了。
第四條,不斷總結(jié)歸納,對(duì)一個(gè)問題,一類問題,以及不同類型的問題,善于歸納整理,不斷反思自己的問題,即便是不出 bug 的代碼,你經(jīng)過一段時(shí)間去回頭看,也有很多思考不正確不合理的地方,有很多優(yōu)化點(diǎn),如果你覺得自己的代碼一向牛逼,毫無破綻,那你一定是原地踏步,毫無進(jìn)展。
關(guān)于歸納總結(jié),我說個(gè)案例
以前我們有個(gè)系統(tǒng),請(qǐng)求量非常大,負(fù)載非常高,有個(gè)不錯(cuò)的技術(shù)經(jīng)理來處理,他列了幾個(gè)升級(jí)計(jì)劃,都很靠譜,去執(zhí)行了,效果非常好,然后我們跟進(jìn)匯報(bào)的時(shí)候他來講,做了幾項(xiàng)升級(jí),整體效果如何,然后我就批評(píng)了他。
我批評(píng)了什么呢?他是一起做的升級(jí),然后一起觀測(cè)的效果,那么這幾個(gè)方案里,具體每個(gè)方案的實(shí)際效果怎樣,對(duì)提升的幫助多大,他沒有任何數(shù)據(jù)。所以對(duì)具體每個(gè)升級(jí)方案的價(jià)值和重要性,他沒有任何概念。你正確的解決了問題,卻沒有認(rèn)真的去歸納整理,你的收獲是有限的。一起做升級(jí)不能說是錯(cuò)的,但是效果評(píng)估需要單獨(dú)去做,而這個(gè)數(shù)據(jù)是非常有價(jià)值的,知識(shí)積累,不是你處理過的就一定有積累,而是整理過的。
大概就這些
***重述一遍
什么是能力?
遇到問題的態(tài)度
處理問題的思路和方法
這就是能力
原文鏈接:http://www.zhihu.com/question/27180582