03.07 優秀的程序員和普通的程序員差別在哪裡?

環球科技評論


這幾年項目管理的事情做了不少,管理過不少程序員,有一些程序員確實會比其他人突出一些,他們在升職加薪方面確實會快很多,如果你也想成為優秀的程序員,個人提幾點小建議:

程序員的本職工作,還是把代碼寫好,所以先說說代碼的事兒,主要講兩個方面:

  • 關注實現,也要關注效率和性能:我見過的程序員,大部分都可以把功能實現,只有部分程序員會關注性能問題,並且肯為提高代碼執行效率投入大量的時間;因為很多項目組在開發過程中,測試環境和生產環境的數據量差別很大,測試中沒有問題的代碼,一上線就會出問題。

  • 關注代碼的可複用性和擴展性:代碼寫的好不好,可複用性和擴展性很重要,這個關係到項目後期的迭代,有些項目換了幾波開發人員之後,就留有很多誰也不敢動的“祖傳代碼”了。

以上兩點,可以說是對項目的責任心:有些額外的付出,可能並不會在短期內得到回報,比如兩個人實現相同的需求,外表上看實現的功能都是一樣的,但是你寫的代碼,後期擴展起來很簡單,不過也有可能幾個月、幾年後才需要擴展,才能見識到“你代碼的好”;在這方面,我希望大家能夠“笨一些”,多花些時間在這些事情上;

  • 首先,大家一定要認清:“我做好工作,不是為了公司,而是為了自己”;千萬不要抱著“給多少工資,出多少力”的想法;

  • 代碼的複用性、擴展性,不是看幾本書就能提高的,需要長期的實戰積累;

  • 你做的這些工作,領導會看在眼裡的;如果真遇到了忽視代碼、輕視開發的領導,把東西學會了,跳槽就好了。

除了一門心思敲代碼,還有很多重要的事情要注意:

  • 溝通能力、表達能力、演講能力,總之就是要“會說話”;

  • PPT能力,很多程序員對年中、年終述職嗤之以鼻,建議大家千萬要重視起來,有時候大領導不一定知道你的工作內容和成果,這真的是一個很好的機會展示自己。

  • 多和直屬領導交流,千萬不要等著領導找你;可以定期主動彙報一下最近的工作,不用很正式,時不時地找領導聊幾句:最近做了什麼,有什麼成果,遇到什麼問題...

  • 如果遇到問題,要拿著解決方案去找領導,方案A or 方案B,讓領導做選擇題;如果沒有解決方案,要說自己的思路;總之,要證明自己思考過;

  • 進一個從0到1的項目,更容易出成績,如果有機會進新項目的話,一定要把握住機會。

我將持續分享Java開發、架構設計、程序員職業發展等方面的見解,希望能得到你的關注。


會點代碼的大叔


我帶軟件軟件開發團隊多年,接觸過不少程序員,其中有一些非常優秀的程序員,簡單的總結一下,這些優秀的程序員往往具備以下特徵:

第一:健全的知識結構。程序員是一個對基礎知識結構要求比較高的工作崗位,健全的知識結構能夠充分的體現在工作能力上,所以對於普通程序員來說,要想成為優秀的程序員就一定要從健全自身的知識結構開始,尤其是基礎內容,包括數學、計算機操作系統、計算機網絡、算法設計等。

第二:較強的學習能力。學習能力較強是優秀程序員的重要特徵之一,能根據不同的項目採用不同的解決方案,而且能夠緊跟技術發展的腳步,這些都需要較強的學習能力。學習會伴隨著程序員整個職業生涯,學習能力往往決定了程序員能夠達到的高度。

第三:較強的理解能力。理解能力體現在很多方面,簡單的說就是能把握住問題的關鍵部分,在研發一個產品的過程中,能夠把握住產品的關鍵所在,不被旁枝錯節所影響,這對程序員來說是一個較大的挑戰。

第四:較強的溝通能力。優秀的程序員往往能進行有效的溝通,簡單的說就是有結果的溝通,溝通一定要達成一個共識,這是溝通的基本原則。優秀的程序員往往具備進行有效溝通的能力,問題往往都會得到圓滿的解決。

第五:強烈的責任心。責任心是職業素養的重要體現,優秀的程序員往往都具備強烈的責任心,把軟件產品看成是一件藝術品,不斷的進行打磨進而追求一種完美。所以,很多人也把程序員看成是藝術家。

第六:有團隊合作意識。優秀的程序員不僅要具備較強的個人能力,同時也要具備團隊合作意識,能夠帶領團隊不斷突破難點。

作者簡介:中國科學院大學計算機專業研究生導師,從事IT行業多年,研究方向包括動態軟件體系結構、大數據、人工智能相關領域,有多年的一線研發經驗。歡迎關注作者,歡迎諮詢計算機相關問題。


IT人劉俊明


在我看來,大多數程序員是屬於宅男類型,一天到晚編碼,特深奧。但總會有所差別,我覺得優秀的程序員,除了在編碼上能力超群以外,他們不會像普通的程序員一樣瘋狂地找插件,類庫和框架,而是更在學習鑽研、吃苦耐勞、精益求精、態度謙虛上做的更好。

就在最近一兩年,彷彿雨後春筍一般,身邊開始湧現出很多年薪百萬的程序員朋友,清一色集中在阿里、騰訊、京東、頭條這些公司。其中有一個程序員朋友對我說:“技術大牛是怎麼來的,你絕對想不到。”


出於好奇,我開始瞭解了這群特別的程序員,他們的工作總是和人工智能、IE工業大腦、大數據這些字眼掛鉤,充滿了高大上的感覺,沒想到朋友口中的程序員,居然還親自養豬、到深山裡搞研究、在車間寫代碼,太接地氣了。

其實這幾年,ET工業大腦已經是大熱門,阿里雲讓程序員進入工廠、實地考察交流,將人工智能和大數據技術嫁接到生產線,幫助企業實現生產流、數據流與控制流能協作,提升產能,實現工業智造,也不是稀罕事兒了。

在這些程序員之中,不僅有海歸博士、高學歷90後,還有來自金融界、諮詢公司的跨界人士。他們可以除了幫中策橡膠將良品率提升了3%-5%,讓天合光能電池片A品率提升7%,營收增值超過2000萬;還提升了京信通信產品調試定標工序35%的生產效率,讓迪森熱能的鍋爐健康能提前6-12小時發出預警......

普通公司的程序員可做不到。

在我看來,這些看似不善言辭的優秀程序員,絕不像普通的程序員一樣碼字交任務,他們既能爬8米高的鍋爐看看運作流程,也能不怕鹼中毒做試驗,用數據優化企業工作流程、提升效率及產能,背後靠的除了能吃苦、能鑽研、能學習的個人能力,還有受到了阿里雲強大的感召力,才能得到我們看起來不可能達到的成績。

作為普通人,也由衷感謝這些程序員用每一行代碼改變了世界。


媛姐的科技深探


作為一個工作多年的程序員,在工作中也接觸了很多大牛,也接觸過很多菜鳥程序員,當然大部分都是接觸的一般的普通程序員,通過對比我發現,我感覺優秀程序員和一般程序員的差別有以下幾種能力。

持續的學習力

程序員都知道,我們這個行業是一個快速發展的行業,技術更新迭代的速度很快,所以,如果不想被時代拋下,不想落伍,就必須保持一個持續的學習能力,能夠不斷的去研究新技術,學習新技術,嘗試新技術。

優秀的程序員大部分都是對編程痴迷,執著的一批人,他們對編程的興趣非常濃厚,所以絕對是喜歡學習,持續學習的一批人。而大部分普通的程序員,一般學會了某種技術之後,能夠滿足工作需要就行,不會主動的去努力學習,除非快被時代淘汰的時候,被倒逼著去學習。


優秀的程序員總會主動持續的去學習,而普通的程序員都是被倒逼著去學習的。


解決問題的能力

解決問題的能力,最能提現一個程序員之間的差別,是否優秀與否。一個優秀的程序員,經驗豐富,定位問題的能力快速準確,debug 能力強,有技巧,有經驗,而普通的程序員可能受限於經驗的緣故,解決bug的能力,比較差,比較慢,很多時候,都是靠著搜索引擎來解決的。

研究能力

見識多了大牛之後,你會發現,他們做事情,遇到問題,總是會較真的,必須知道知其人知其所以然,喜歡研究原理性的東西,必須搞懂這其中的原理,可以做到舉一反三,搞出新東西來。


而普通的程序員,一般就比較容易滿足,遇到問題,找到解決方法之後,知道怎麼用就行了,不太會去深究其中的一些原理或者根本性的問題,反正我知道這麼用,就不會用問題,容易滿足。

我感覺這是普通程序員和優秀程序員之間的差別,所以,我們今後如果從事這個行業,就應該必須保持主動的持續學習力,解決問題的能力以及研究能力。


非著名程序員


優秀的程序員和一般的程序員差別在那?

優秀的程序員,工作效率高,不斷的

學習和掌握新的技術,努力進取,他

/她們對程序員的工作非常的熱愛,

到了痴迷的地步,無時無刻的都在

學習,時間對他/她們是寶貴的,每

分每秒手都離不開健盤,做為一個

優秀的程序員,這是所具備的。

優秀程序員,遇到困難,一絲不苟的

去解決,而不是應付了事,對工作的

態度是認真的,也是較針的,解決問

題,善於思考。不達到目的決不罷休

,我很敬重程序員這個職業。

而一般的程序員,就和優秀的程予

員不一樣,一般的程序員,掌握一般

的技術就行了,新技術是不會進取

的,這就是一般的程序員和優秀程

序員的區別。

一般的程序員除非遇到困難,才逼

他/她不得不去學習新的技術,否則

就不會主動去學習新的技術。一般

的程序員是不思進取的,和優秀程

序員區別很大的。

我曾經認識一個程序員,他/她工作

非常認真,他/她的技術是一流的,

他/她不斷的學習新的知識,掌握程

序技巧,博學多聞,程序技術過硬,

他/她受到領導賞識,很歷害。

好多年沒見過,我這個朋友了,不知

他/她現在工作如何,祝我這位朋友

身體康健,萬事如意!多注意休息

程序員的職業,很不容易,貪黑起

早的,祝程序員吉祥如意。


黎洪明志


普通程序員,寫的代碼有些深奧難懂,其實就是在顯擺,或複製的代碼,優秀程序員寫的代碼整潔,簡單;

普通程序員,寫的代碼一般沒有註釋,即使寫大部份是後面補上去的,或隨便寫幾字,代碼冗餘多,優秀程序員,有註釋,有算法,協議,函數,類,甚至版本更新等,一目瞭然,發現冗餘代碼會重構,並標上註釋;

普通程序員不管什麼功能,先到網上搜索,然後複製代碼,而且並不弄懂代碼真正意思,優秀程序員會先考慮,如果卡住不知道怎麼解決,會網上尋找,弄懂後自己重寫一次,吸收成自己的知識;

普通程序員寫代碼,根本不考慮擴展性,利用性,完成了事,優秀程序員在寫代碼過程中,會考慮以後系統擴展,代碼複用,儘可能的留下接口;

普通程序員不喜歡看書,特別是紙質書,不喜歡學習,能做就行,研究技術喜歡高深的東西,優秀程序員一般手上有幾本經典編程書籍,而且是紙質的,看了很多遍,研究技術從基礎開始,瞭解原理;

普通程序員不喜歡寫文檔,討厭別人不寫文檔,卻不喜歡看別人文檔,優秀程序員喜歡做筆記,當寫文檔時,不需要寫‘回憶錄’,喜歡看文檔,也會自己定文檔;

普通程序員不喜歡聽需求文檔或看產品書,自以為是,一切以自己為中心,更不喜歡別人測試他的代碼,優秀程序員看需求文檔或產品書,以用戶為中心,善於聽取意見,喜歡別人測試自己的代碼;


海納百川x本地文化


做為一個20年的老程序員,工作中遇到了很多優秀的程序員和普通的程序員,在我看來,優秀的程序員和普通的程序員的主要區別有以下幾點:

  • 代碼編寫習慣

有的程序員覺得這個不重要,但我覺得這個太重要了,優秀的程序員普遍都養成了良好的代碼編寫習慣,寫出的代碼非常的規範,軟件即是工程又是藝術,小到變量,大到架構,整體代碼會給人一種賞心悅目的感覺,閱讀起來很舒服。

  • 持續學習的能力

技術日新月異,優秀的程序員時刻保持著學習的狀態,會不斷汲取新知識,會系統性的去學習新知識,而相對普通的程序員則不然,一樣技術保持到老,即使學習也是淺嘗即可,只學表面皮毛,不懂也不願意深入的去學習。

  • 對編程的熱愛程度

優秀的程序員通常對編程是真正的熱愛到骨子裡,而不僅僅是因為做程序員可以拿到高薪,不僅在工作中投入到編程中來,在自己的下班業餘時間也喜歡編程,甚至還會參與到某些開源的項目中去。

  • 代碼積累的能力

優秀的程序員大多都會積累自己的一些工具代碼庫或框架以便在以後的其它項目裡使用,優秀的程序員大多會從代碼的可複用性和可擴展性上去考慮得多一些,而普通的程序員只關注於當下,寫出來的代碼也無法代入到其它的項目裡。

  • 溝通的能力

大多數人覺得程序員都不善言辭所以溝通能力都比較差,其實不然,優秀的程序員非常懂得溝通,溝通不僅僅是說能言善辯,而是不鑽牛角尖,可以和他人很好的就一個問題深入的探討,懂得站在他人的角度考慮問題。

以上是我列舉的幾個優秀程序員和普通程序員的一些區別,當然也還會有一些其它的區別,也歡迎朋友們一起留言探討。

我是混跡於魔都的程序員創業者,歡迎關注我的頭條號,講述程序員的那些工作,生活和創業的故事,希望能和你引起共鳴。


猿人類


優秀的程序員

學習能力強,能夠快速掌握所需要的技術,以及出現的新技術,他會主動去了解。

開發效率高,能夠快速的實現相關的功能。做出相關的產品。

解決問題能力強,能夠快速找到問題的原因,經驗豐富,並且迅速解決。

擁有更豐富的經驗,更豐富的技能,對於程序的執行效率,代碼的質量以及相關的其他技術語言都有一定掌握,能夠相互融會貫通。能夠理解不同語言之間的差別,優勢進行相互融合。也包括對於程序的安全,邏輯的安全等相關的技能都有掌握。

一般的程序員

開發速度一般能夠做出來,但是做出來的效率不一定好產品功能實現了,但不一定性能好。就像兩個人都會坐自行車一個人用鐵架子做,一個人用木架子做,都可以做出來,但是一個經摔,另一個不禁摔,容易壞掉。

當出現問題的時候,能夠定位到,但可能會需要花更多的時間,這可能就會產生更多的不良影響,甚至可能會影響到用戶使用。

新技術出現,不會繼續去了解,因為沒有需求,不需要做相關的東西。

對技術的理解,停留在使用鑽石層面,有些東西會使用,但是深入的不夠理解透徹,原理可能一知半解,不夠通透。


通俗易懂且用心思考


貼一篇曾經引發過許多討論和轉載的舊文,希望對你有所啟發。

理想的程序員

我算是靠坑蒙拐騙進了程序員的門,然後一路狂奔。26歲之前幾乎沒有任何寫代碼的經驗,研究生畢業卻意外選擇了一家不可能提供培訓的初創公司,在每日擔憂公司倒閉、害怕被炒魷魚以及同事冷落白眼的三重壓力下逆流而上,一年半後離職,已是擁有500萬用戶產品的後臺主程。從前我對計算機技術心懷畏懼,認定技術高人一定有佛光籠罩,晝夜不息運鍵如飛日吐代碼上萬行。現在也算見過一些世面了,回首那段忐忑不安宛如初夜的過程,我卻不發覺有任何的勵志意味,而是視為一種理所當然。理想的程序員,和理想的建築師、理想的財務師、理想的按摩師沒有任何的差別,他們本質上都是一群手藝人。我相信理想的程序員人人皆可成為。

近三年總在互聯網圈廝混,我認識過一些程序員,共事過一些程序員,領導過一些程序員,又面試過一些程序員。他們學歷不同,有的來自北大,有的來自北大青鳥,有的是博士,有的是高中肄業;資歷也不同,有的來自BAT,有的來自某破產基金公司(還是一個銷售);年限也從0到15年不等。但我認為程序員只需分三類:天才的程序員、理想的程序員、平庸的程序員。天才的程序員我只敢說接觸過3個,這是天命。7分由你是顆精子的時候就已決定,擁有絕佳的數學天賦、冷靜緻密的邏輯、為解決難題寧願不眠不休而深以為樂的技術熱情;3分來自起步要早早早,恨不得同齡人玩泥巴的時候就得開始玩電腦,大學畢業前就突破一萬小時法則,後面的已是遊戲人生。

天才的程序員可遇不可求,更不能長有,我看到的90%仍是平庸的程序員。IT時代的膨脹,已讓程序員如同文藝復興時的印刷匠一樣的普通,多數投入祖師爺門下的人,僅是為了更大的飯碗,更高的待遇,更好的生計。平庸的程序員編寫腐爛的代碼,沒有規範和一致性,固守舊世界的語言,還好談論大的架構和性能,說的比做的漂亮。而毫無例外的,他們認定技術沒有出路,做產品、營銷和管理的是更高大上的手藝,而他們當中的99%,又會自然的流露出自己恰巧具備了那方面的天賦,至於進程為什麼會崩潰這樣的小問題是不屑於去了解的。

而我最喜歡和理想的程序員相處,恨不得與他們同吃同住,如果允許,我希望我的隊伍能插滿他們的旗幟。理想的程序員心眼兒不壞(他們從來都不是辦公室政治的寵兒,是一群單純明亮快樂的手藝人),有天真爛漫的好奇心(他們的眼睛裡經常閃著「哇,這個是怎麼做到的!」),永遠精益求精(他們的口頭禪是「我再研究一下」),還樂於分享(他們活躍於GitHub、各大問答社區和你的身邊,捨得將寶貴時間用於幫助新手)。是的,他們不需要被管理,只需要給一個大的方向,總能回報以意想不到的結果。

理想的程序員與平庸的程序員只有一牆之隔。兩者的差距只有6個一點點,而人與人的差距,正是在這日積月累的一點點中,被永遠拉開了。有意思的是,我發現這6個一點點都和意識有關,也就是程序員和其他一切新興產業的工種一樣,只需要意識加上時間的錘鍊,人人皆可達到理想的階段。理想的程序員必然也是一個優秀的problem-solver。

第1個一點點:專注眼下

見過太多心猿意馬的程序員,我不得不把「專注眼下」作為天字第一條。他們往往有各式各樣的小夢想,比如做個小茶農、做個小鵝販、做產品、做銷售、做投資,卻被程序員的高薪或是沒有轉行的魄力「耽誤」了,而因為不專注,他們不在意做好自己的本分,不在意錘鍊自己的技能,不在意學習新興的技術。不可否認,這世界上存在著偉大的產品(像喬老爺)、偉大的銷售(像埃裡森)、偉大的投資客(像彼得菲),而他們毫無例外都是程序員出身。可你聽說過巴菲特評價蓋茨的話麼,比爾蓋茨如果轉行去賣狗,那他一定是全世界最大的狗販。我堅信除了少數的天才外,冥冥眾生均可以在多個領域取得成功,只要保持足夠的專注。而哪怕你下一年就想賣狗去,程序員的經驗仍然能訓練你強大的邏輯、謹慎和耐心,放在哪個行業都是相當可觀的競爭力。

第2個一點點:思考力與推動力

我認為處理bug、崩潰、調優、入侵等突發事件比編程本身更能體現平庸程序員與理想程序員的差距。當面對一個未知的問題時,如何定位複雜條件下的核心問題、如何抽絲剝繭地分析問題的潛在原因、如何排除干擾還原一個最小的可驗證場景、如何抓住關鍵數據驗證自己的猜測與實驗,都是體現程序員思考力的最好場景。是的,在衡量理想程序員的標準上,思考力比經驗更加重要。

有時候小夥伴跑過來,問我「提交了一個任務被卡住了,怎麼辦」的時候,我總覺得他可以做得更好。比如,可以檢查試驗別的任務,以排除代碼自身的原因;可以通過Web UI檢查異常(如果沒有賬號,可以讓我提供);可以排查主機日誌或刪除緩存,再不濟,總應該提供任務ID和控制檯日誌給我。理想的程序員永遠不會等事情前進,他們會用盡一切方法讓事情前進。

第3個一點點:Never Say No

記得從前廠離職之前,找老闆談話,他說我最大的優點就是從來不和他說這個做不到。後來我發現在很多團隊裡,都存在一種技術和產品的對立,程序員往往以「技術上無法實現」來擋產品的需求,而產品也往往以「Facebook可以為什麼我們做不到」來奚落程序員。這兩句話應該屬於禁語,從根本上都不利於程序猿和產品狗的相親相愛。

一句「技術上無法實現」是容易出口,可有多少人在說出這句話的時候,心裡是100%肯定的?如果不肯定,為什麼不能回去谷歌一下再回答?原本我以為程序員是充滿想象力,在因為有想象力,才能誕生那麼多改變我們生活的軟件和互聯網產品。見識多了,才瞭解大部分程序員已經在與bug的對抗中變得保守而不願擔當風險,與此同時許多團隊也不願意寬容失敗。於是「Say No」變成一種習慣性的牴觸,還記得曾國藩為什麼解散湘軍麼?他說那支軍隊已「暮氣漸深」,不能打仗了。要做理想的程序員,就不能給自己滋生暮氣的機會,如果面對不合理的需求,可以把時間成本擺出來,把曲線救國方案亮出來,簡單粗暴「Say No」是不可取的。

第4個一點點:投資未來

程序員是一個非常殘忍的職業。你所學所用的語言、框架、模式,很可能在數年內就成昨日黃花了;你現在嘲笑的另一群程序員,可能馬上就能轉身來嘲笑你了。所以理想的程序員除了做好自己的本分,還要花費時間來投資未來。什麼是「投資」?投資就是你現在投入的時間,在未來會以更多的時間或者金錢(看看早幾年學習iOS的程序員現在的薪酬!)回報你。舉我自己的領域 -- 數據挖掘為例,08年左右Hadoop開始興起,一時「大數據」概念火熱,Hadoop工程師萬金難求,各互聯網公司紛紛把數據統計、數據分析和數據挖掘的業務切換到分佈式平臺上。這幾年眼看Hadoop還在不斷迭代,Spark又異軍突起,一舉刷新了Hadoop保持的排序記錄,以內存存儲中間數據帶來的性能優勢和豐富的數據結構讓人愛個不停,各種奇異的小bug和陡峭的學習曲線又讓人打退堂鼓。那麼,明眼人都知道Spark是未來的趨勢(內存會越來越便宜),在主業務放在Hadoop的條件下,就可以適當把一些小模塊切換到Spark上,同時留意Spark社區的發展。很快從Spark獲得的性能收益就能把之前投入的學習時間掙回來。

第5個一點點:善用工具

善用工具可以分為4個層面:

  • 搜索引擎
  • 不相信重複
  • 代碼片段
  • 自動化

我剛入行那會,一個計算機專業卻當了公務員的朋友問我,你一點都沒學過編程,平時怎麼寫代碼?我說,谷歌,於是遭到無情的恥笑,以至於我在哪裡的賬號都叫2shou,告誡自己是一個無恥的二手程序員。這是一個笑話,但如果現在問我,我還是要回答谷歌。程序員的成長就像膨脹的圓餅,外面是無邊無際的大海,圓餅越大,與大海接觸的面也越大,懂的越多,不懂的越多,而計算機科學又是一門更新換代異常迅速的學科,同時也是知識互聯網化最好的學科,很難利用傳統的科班式有教有學的方法,相反通過搜索引擎則很容易獲取到最新的知識。

不相信重複,大師的話叫DRY原則(Dont repeat yourself),代碼寫多了,會有人為的直覺判斷好的和爛的代碼,我的標準是簡潔和規範,簡潔並不是美感上的標準,重複越少,給自己出錯的機會也越少,後期維護的成本也越少。

如果你不幸丟了三週前的代碼,也許你能憑著過人的記憶力把腦子裡殘餘的片段複寫出來,但如果丟的是三個月前的代碼,恐怕就沒有那麼好的運氣了。理想的程序員會著力找尋有效的資料保存方式,把工作裡靈光閃現寫下的代碼、腳本、配置、經驗等短的片段保存起來,以便任何時候都能複查。

理想的程序員必須懶惰。對他們來說,重複的步驟和重複的代碼一樣醜陋,如果意識到一項工作有可能長期要重複,那麼自動化的時間總是越早越好。

第6個一點點:管理時間

之所以管理時間會對程序員這個行當特別重要,是因為在完成任務時你必須像荒野裡的狼一樣,「獨行」。沒有外界約束的情況下還能穩定控制自己,保證能高效率地工作和學習,那麼日積月累你肯定會變得比一般人厲害。

程序員乾的是高強度的腦力活,一般每天集中4-5個小時應對本職工作就足夠了,但工作之外,一定要安排時間用於學習。除了學習,留點時間放空自己也是必要的,利用泡茶或者喝咖啡的間隙,把彌足珍貴的時間留給自己,往前想往後想,事半功倍。

說了這麼多,想必有人會問,費勁心思成為一個理想的程序員,又有什麼用處?會有高薪嗎?不。能升職嗎?也不見得。迎娶白富美呢?不如去賣狗。 稻盛和夫曾經說過一個故事,明治時期的手藝人被天皇召見,雖然都是不讀書的鄉下人,但一輩子兢兢業業地做一件事情,自然有一股高貴的氣質。理想的程序員,應該就是循著這種高貴的氣質而去的吧。


極客思享



蘇聯著名的物理學家朗道提出了一種按照水平和貢獻劃分物理學家的方法,被稱為物理學家的等級:物理學家可以分為五個等級,第一級最高,第五級最低,每一級之間能力和貢獻相差十倍。

吳軍博士仿照朗道的理論,將工程師劃分為了五個等級:

第五級:能獨立解決問題,完成工程工作;第四級:能指導和帶領其他人一同完成更有影響力的工作;第三級:能獨立設計和實現產品,並且在市場上獲得成功;第二級:能設計和實現別人不能做出的產品,也就是說他的作用很難取代;第一級:開創一個產業。


下面我們就按照這個標準來看看各個級別的程序員之間有什麼差別:


一個合格的工程師至少是五級工程師,對於計算機專業的學生,畢業後經過一段時間的鍛鍊,能夠熟練應用代碼知識解決問題,獨立完成所分配的工作,而不需要他人指導,就算是一個合格的五級程序員了。


第四級的工程師需要有領導能力和在工程上把大問題化解為小問題的能力。他們能夠尋找出實現比較大的目標的道路,在現有的條件下考慮好和壞的解決方案。在軟件開發環節,第四級程序員需要考慮用戶需求的特點、平臺的選擇、不同方案的效率和人員投入等多種因素,並根據公司能提供的現實條件選擇最合適的方案。


第三級的工程師就應該能夠獨立帶領人做出一個為公司掙得利潤的產品了。第三級的工程師,本身也必須是一個非常好的產品經理。 第三級程序員除了要具備上述兩個等級的能力外,還必須具備對市場的判斷和營銷能力。除了要考慮一個產品最佳的實現方案,還必須能夠判斷這個產品是否被市場需要,是否能為公司帶來利潤。


第二級是能夠做出先前沒有的東西的人,世界因為他們多少有點不同。比如,Google雲計算的發明人迪恩(Jeff Dean),他和他的搭檔蓋莫沃特一起開創了雲計算時代。迪恩等人發明了GFS文件系統(Google File System),讓一個大文件能夠分佈地存儲到成百上千臺服務器中,解決了大量數據存儲效率低的問題。我們熟知的AlphaGo背後的Google深度學習算法也是迪恩發明的。


第一級是開創一個產業的人。眾所周知,計算機的出現大大促進了科學技術和社會生活的進步。馮·諾依曼對人類的最大貢獻就是對計算機科學、計算機技術和數值分析的開拓性工作。計算機的邏輯圖式,現代計算機中存儲、速度、基本指令的選取以及線路之間相互作用的設計都受到了馮諾依曼思想的影響;他還積極參與了推廣應用計算機的工作,對如何編制程序及搞數值計算都作出了傑出的貢獻。


按照這個等級劃分原則,吳軍博士將自己定位為2.5級,那麼2.5級是什麼樣的一個概念呢?吳軍曾任職於Google公司,和同事一同開創了搜索反作弊研究領域,成立了中、日、韓文產品部門,設計了Google中、日、韓文搜索算法,領導了Google自然語言分析器、自動問答等研究型項目。除此之外,他也是著名的學者,風險投資人,著有《數學之美》、《浪潮之巔》、《文明之光》等暢銷著作,並多次獲得包括文津獎、中國好書獎、中華優秀出版物在內的國家級圖書大獎。


各位程序員也可以分析一下自己目前正處在哪一個等級,離下一個等級還有多遠。有了清晰的努力方向,距離目標的實現也就不遠了。


分享到:


相關文章: