本文來自知乎的提問:什麼是程序員的核心競爭力?php
如題所說,我如今是個剛畢業的小本,野雞學校,並且不是正統的計算機專業,如今踏入了程序員這一行,到底什麼樣的技能纔是纔是程序員的核心競爭力,換言之,我在工做的前幾年,須要累積什麼樣的技能,以後才能更好的和老闆要工資,提要求。程序員
圖片來自 yestone web
姚冬,招聘音視頻相關算法工程師算法
學習能力,尤爲是自學能力,你啥時看到那些有名的程序高手在論壇上問「學習 XX 該看什麼書,如何快速學習 XXX,學習 XXX 有什麼代碼推薦」之類的問題,他們想學什麼很快就能本身找到相關資料。這個行業發展太快,技術淘汰的速度也很快,3 年不學新東西就可能落伍了。數據庫
動手能力,都是看書看資料,當別人還在糾結看什麼書,還在糾結書裏的字句是什麼意思的時候,有些人的幾百上千行代碼都已經能運行了。安全
耐心和毅力,作程序員興趣當然重要,寫本身喜歡的代碼那是至關愉快的事情,可是程序開發中不管如何還有大量乏味無趣的事情,要能堅持,咬牙把這些作完。性能優化
表達能力,能在大庭廣衆下,把本身的想法邏輯清晰流暢地講出來,讓人聽懂。服務器
那麼技術呢?技術不重要,有了以上幾種能力,市場上須要什麼技術,很快就能掌握了。網絡
最後再說說工資的事,記住兩句話:架構
工資不是老闆對你過去貢獻的回報而是對你將來貢獻的預期。
現任老闆不可能給出讓你滿意的工資,下一任老闆纔會。
曹政,數據控/歷史控/考證控
姚冬回答的很是好,我狗尾續貂的說幾句。
咱們都知道學習能力很重要,那麼學習能力從何而來,除了去看書上課這種,如何在實踐工做中學習成長?
我以前微博說了一個籠統的概念,什麼是能力? 對待問題的態度,以及處理問題的思路和方法。
先說態度
你服務器偶爾出 501 錯誤,也許比例不高(知乎也出現過不少次),不少程序員,沒錯,是不少,僞裝看不見,不在意,或者歸咎於人品問題。 這就是態度問題。
再日後,負載高了或者其餘什麼緣由,忽然頻繁出現 501 錯誤,不去追尋深刻的緣由,而是找各類藉口, 什麼 IDC 服務商很差,服務器品牌很差,操做系統很差,數據庫很差,CDN 很差,網絡情況很差,web server 很差,甚至,直接對 Boss 說咱們被 DDOS 啦!(遇到過,幫他 Boss 找過多個安全專家會診,最後發現根本不是 DDOS,是程序員太爛。)
這就是態度,觸目驚心,若是能對問題有敏感性,能知道對任何小的,輕微的問題有足夠的敏銳度,你就有了一個快速成長的基礎。對問題的敏銳度是很是重要的。不少性能或程序邏輯上非致命的 bug,在不夠敏銳的時候是發現不了的,可是一旦進入特殊場景就會驟然爆發,你多一點敏銳度,就會減小這種危機的風險。
第二個態度是解決問題的態度,有人對本身的解決方案信心滿滿,認爲萬無一失,但有的人就會多留一條後路;就比如你說我服務器要不要作安全加固,確定要作對不對,要作到儘量嚴謹和周全,可是你數據庫保存密碼的時候是否是還要加密?並且要隨機 salt,不就是防止萬一依然有漏洞被人拿庫怎麼辦麼。程序也同樣,之前寫的一些服務端守護進程,有 bug,會莫名其妙的終止,這個 bug 固然要定位,要修復,可是同時,寫一個 cron 檢查這個守護進程狀態,一旦遇到終止給予自動恢復,這就是第二手準備,即使你多麼不但願他執行,這個準備仍是要作的。對問題作兩手甚至三手準備,也是優秀程序員,架構師的關鍵素質。
第三個態度是基於溝通與理解的態度,產品或運營提了一個不靠譜需求,一句話打回去固然很爽很威風,可是有沒有仔細溝通分析過,這個需求基於怎樣的實際訴求,這個實際訴求有沒有更合理的實現途徑,一句話「這個無法作,這個實現成本過高」,不是正確的溝通態度,並且,最優秀的產品,每每是實現了那些本來人們認爲沒法實現的訴求。
這樣的態度,纔有了一個持續進步的基礎,下面說思路和方法。
優秀的程序員和平庸的程序員,若是隻看敲打代碼的速度,我以爲是分不出來的,也許每人均可以一天寫不少行代碼,可是遇到問題後,平庸的程序員的解決效率,和優秀程序員相比就會有天壤之別。 所謂解決效率,不外乎對 bug 的分析、定位,以及思考。
最基本的一條,看執行日誌,看各類日誌,web server 的日誌,數據庫的日誌,慢查詢日誌,binlog 日誌,php 的錯誤日誌,等等等等,線上出問題瞎猜連日誌都不看的大有人在。看日誌不仔細不完整的也大有人在,你能去認真研究日誌已經超越不少人了。
第二條,模塊測試和斷點分析,程序員一個壞習慣就是上來就寫很大一坨代碼而後再執行,不知道一個模塊一個模塊來寫來測試,執行出了問題不知道設置斷點,縮小範圍逐步分析。斷點分析很是簡單,將整個代碼中插幾個中間輸出,觀察哪一個環節出了問題,或者觀察每一個環節的系統開銷,對調錯和性能優化都很是重要,高手們大概認爲這是 ABC 的東西,可是就這玩意我看到的大部分程序員都沒有這個習慣。
第三條,錯誤信息的理解和搜索,搜索引擎上有各類豐富的技術資料和技術問答,你所遇到的錯誤信息和錯誤提示,一般都能在網上搜索到,固然,搜索到後要結合你的場景認真思考,並理解透徹,而不是照貓畫虎的去處理,不然可能此次運氣好就蒙對了,下次運氣很差又不知道怎麼回事了。
第四條,不斷總結概括,對一個問題,一類問題,以及不一樣類型的問題,善於概括整理,不斷反思本身的問題,即使是不出 bug 的代碼,你通過一段時間去回頭看,也有不少思考不正確不合理的地方,有不少優化點,若是你以爲本身的代碼一貫牛逼,毫無破綻,那你必定是原地踏步,毫無進展。
關於概括總結,我說個案例
之前咱們有個系統,請求量很是大,負載很是高,有個不錯的技術經理來處理,他列了幾個升級計劃,都很靠譜,去執行了,效果很是好,而後咱們跟進彙報的時候他來說,作了幾項升級,總體效果如何,而後我就批評了他。
我批評了什麼呢?他是一塊兒作的升級,而後一塊兒觀測的效果,那麼這幾個方案裏,具體每一個方案的實際效果怎樣,對提高的幫助多大,他沒有任何數據。因此對具體每一個升級方案的價值和重要性,他沒有任何概念。你正確的解決了問題,卻沒有認真的去概括整理,你的收穫是有限的。一塊兒作升級不能說是錯的,可是效果評估須要單獨去作,而這個數據是很是有價值的,知識積累,不是你處理過的就必定有積累,而是整理過的。
大概就這些
最後重述一遍
什麼是能力?
遇到問題的態度
處理問題的思路和方法
這就是能力
原文連接:http://www.zhihu.com/question/27180582