“碼農”和計算機工程師其實并沒有明確的界限,他們每天都在和計算機代碼打 交道。只不過前者多少帶點兒貶義,畢竟今天能寫幾行代碼的人隨處可見。計算機工 程師在某種程度上是自己往自己臉上貼金,在外人眼里他們再普通不過了。
但是, 同樣是計算機工程師, 不同人的水平、貢獻和影響力可謂有天壤之別。有 些讀者讀過我之前寫的一些書,知道我喜歡用朗道的方法,將計算機工程師分為五 級。一級工程師的貢獻是二級的 10 倍,二級是三級的 10 倍,以此類推。當然,他 們的貢獻和收入常常存在指數(shù)上的差別。
五級: 能夠獨立解決問題,完成工程工作。一個能夠獨立工作、很好完成任務的 工程師,屬于五級工程師,google、微軟和 Facebook 里面一半左右的工程師屬于這 一級。部分 IT 企業(yè)里寫代碼的人,很多還達不到五級工程師的要求,因此被稱為“碼農”也不算太過分。
四級:能夠用已知的最優(yōu)方法(state of the art )解決問題,并指導和帶領其他人 一同完成更有影響力的工作。很多公司里所謂的技術專家、技術大拿,大致就是這個 水平。
三級:能夠解決前人未解決的問題,并且能獨立設計和實現(xiàn)產(chǎn)品,在市場上獲得 成功。目前普遍的情況是,在大部分 IT 企業(yè)中能夠達到這個水平的人非常少,他們 通常是企業(yè)里的總工程師或者總架構師。這個級別的工程師在 Google 或者微軟里卻 不少見。
二級:能夠提出重要的計算機理論和實踐中的新問題,并解決它們,還能設計和 實現(xiàn)別人做不出的產(chǎn)品,也就是說這一級的人的作用很難取代。
一級:能夠開創(chuàng)一個產(chǎn)業(yè),或者奠定一個學科的基礎。
每一級在各個維度差出 10 倍。
關于五級工程師的理論,我多年前就在很多場合講過,在這個行業(yè)里很多人都知 道。很多人毫不謙虛地把自己定在了四級或者三級,這其實是高估了自己,或許是因 為過去給出的計算機工程師最低的一級是五級。一些剛畢業(yè)進入大計算機公司的人和 我講,我現(xiàn)在是五級,爭取兩年內達到四級的水平。我說,“不,你現(xiàn)在最多算是六 級,先要達到五級的水平”,于是我在五級的下面又加入了兩級。
六級:能在他人指導下完成計算機工程師的工作。那些水平還不錯的大學的計算 機專業(yè)碩士畢業(yè)生,或者在一流計算機公司里工作過半年、過了見習期的新人,大約 就是這個水平。
七級:本科畢業(yè)自水平不錯的大學的計算機專業(yè),但沒有參加過六個月以上實習 的學生。也就是說課程的內容都學過了,就能達到這個水平。當然,從小就接觸編程 的計算機天才,他們可能在高中就達到了這個水平。
以上內容摘自吳軍博士的《計算之魂》中的前言部分。
對計算機科學的掌握程度,決定了一個計算機行業(yè)從業(yè)者能走多遠。在本書中,作者將人文歷史與計算機科學相結合,通過一些具體的例題,分10個主題系統(tǒng)地講解了計算機科學的精髓。這些例題是作者面試求職者時用到的考題,或是頭部計算機公司和金融企業(yè)的面試題。
作者在書中結合自己對計算機工程師的五級分級標準,詳細講解了每類題目不同層次的解決方法、不同水平的人大約能思考到什么樣的深度,深度闡述題目背后的計算機科學精髓。通過對比優(yōu)化解題思路,讀者不僅可以衡量自己的水平,在職業(yè)的發(fā)展道路上走得更快,更可以深刻理解并掌握計算機科學和計算思維,逐漸把握計算機科學這門藝術,獲得重復性成功。
對于所有有志于了解或學習科技,特別是計算機科學的人來講,本書不僅有助于了解計算機科學,更有助于了解 IT 產(chǎn)業(yè)的技術特點、培養(yǎng)一些特殊的思維方式、掌握信息時代特殊的做事方法,通過具體的例子,從“術”的層面獲得“道”的層面的提升。
異步君此時剛好打開了《善工利器:程序員管理范式》的第一章,感覺也有必要分享一下,對這個問答也是有參考意義的。
程序員里的領袖人物認為,把程序員 比喻為“工匠”更為合適。工匠并非與生俱來的高手,他們需要經(jīng)歷多年學徒生 涯的磨煉,在證明了自己的技能水平并且取得成績之后才能贏得高手的稱號。用 知識、經(jīng)驗和過往的成功案例來認證程序員比較切合實際,而所謂的“認證計劃” 則難以令人信服。所以,我們認為“工匠”這個比喻比其他稱謂更適合用來稱呼 我們所說的那種“卓越的程序員”。
卓越的程序員從何而來?他們僅僅具備程序設計方面的天賦是遠遠不夠的。卓越的程序員都是大師級的人物,做事有條不紊、嚴于律己。他們能夠僅憑直覺就組 織好代碼和程序結構,能夠使自己總是在編寫代碼之前先設計好,能夠在較短的時 間內編寫出清晰、簡潔、實用、高質量的代碼并獲得預期的結果,他們通常還會編 寫測試用例以確保代碼能夠正常運行。換言之,卓越的程序員都是大師級的匠人。
如果程序員的內驅力主要來自時間計劃表、管理層壓力或者報酬,那么他 就不能成為一名卓越的程序員。事實上,對于大多數(shù)卓越的程序員而言,他們 的內驅力來源于更高層次的目標:做出對人們生活切實有用的程序,做出改變 世界的杰出產(chǎn)品。卓越的程序員希望為具有世界影響力的項目工作,這也是他 們的自我價值實現(xiàn)的需要,他們希望能夠體會到自己的工作是有意義的,即使 只是在某個很小的方面。卓越的程序員偏愛能夠滿足他們提出的更高要求的公 司和項目,他們非常在意自己所做的事情,常常為了得到期待已久的結果而付 出超乎尋常的努力。
卓越的程序員的工作效率往往比普通程序員的工作效率高一個數(shù)量級(即 10 倍以上)。
然而,現(xiàn)實中卓越的程序員實在太少了,不可能每個項目團隊都擁有。而且, 多數(shù)團隊也只能“容忍”隊伍中擁有一兩名卓越的程序員。我們發(fā)現(xiàn),大多數(shù)程序或項目主要依靠的還是普通的程序員。普通的程序員通常也是稱職、能干的, 擁有很高的職業(yè)素養(yǎng),然而他們往往只會把程序設計視為一項工作。
于是,我們面臨的挑戰(zhàn)就是,即便大部分甚至所有程序員僅能稱得上稱職, 也要努力思考如何組織一支訓練有素的程序員隊伍,如何激勵并培養(yǎng)其中一部分 人成為卓越的程序員,如何管理好其他程序員以達成圓滿的結果,以及如何持續(xù)提高團隊績效。
大多數(shù)程序員憑直覺就能判斷出同行之間的身手高低,并不需要借助那些花 里胡哨的排名或者頭銜。但是,如果能夠把程序員的類型與等級正式記錄下來, 并且對每一種類型與等級的職位要求與能力需求做一個簡單描述(類似表 2-1 那 樣),那么管理者的工作將會輕松許多。這份列表能夠幫助團隊和項目經(jīng)理輕而易 舉地找到匹配各種任務和項目的最佳人選,還能幫助高層管理者建立起對組織結 構更為深刻的洞察力。
表 2-2 展示了對前面討論過的不同類型的程序員應該如何定義程序設計能力等級。
制定一套能夠與程序員的成長相適應的、梯級要求的程序員能力等級評估標準非常重要。表2-3給出了針對前端程序員的等級評判標準。
《善工利器:程序員管理范式》的內容就分享到這里。
關于《善工利器:程序員管理范式》的這本書
程序設計經(jīng)理、IT項目管理者的團隊管理手冊!2位作者集80余年編程和管理實踐經(jīng)驗教訓,總結300余條千錘百煉的經(jīng)驗法則與至理名言,破解管理難題,打造高效團隊!
這是一本系統(tǒng)闡述在面對容易失控的軟件開發(fā)團隊時,如何管理、建設和賦能團隊,以及成功交付開發(fā)成果的書。本書總結了兩位作者多年的軟件開發(fā)實踐經(jīng)驗和軟件團隊管理經(jīng)驗,通過深刻的觀察和分析,圍繞軟件開發(fā)管理的核心問題——人的管理,講解如何真正理解程序員、如何找到合適的程序員、如何與程序員順暢地溝通等困擾大家已久的問題,進而擴展到如何以人為本地建設團隊、管理人員、管理項目。相較于第1 版(《告別失控:軟件開發(fā)團隊管理必讀》),第2 版(本書)增加了如何招聘和培養(yǎng)程序員,并搭建卓有成效的團隊的相關內容。