程式設計師必須走向專業化
上週六(2月23日),IEEE-CS力推的CSDP認證培訓第三期班在中關村創新研修學院開班。這次的開班儀式很有特色,主辦方特別舉辦了一個軟體工程研討會。我趕到會場的時候正趕上中軟通用產品研發中心總經理陳尚義先生的演講,主題是軟體工程師的專業性問題。陳先生在美國矽谷工作多年,現在中軟集團擔任高層管理工作,又在CSDP培訓中擔任講師,對中美軟體產業都有切身體驗,對這個問題理解很深。我一落座就被陳先生的話題吸引。在演講中,陳先生提出自己的一個觀察:矽谷軟體工程師的平均效率(或說生產率)比北京的軟體工程師高得多,其差距之大,可能達到10倍之多。
剛聽到這一論斷,我還是有些震驚的,因為以我從事媒體工作五年的所見所聞,中國軟體工程師的“外部形象”還是不錯的,很多老外都一再表示對中國工程師的天才和勤奮表示驚訝,即使我再三追問不足和建議,他們通常也就是從牙縫裡擠出“經驗不足”幾個字。像陳先生這種直言不諱,我是第一次聽到。不過轉念一想,又有些懷疑,老外素以坦率著稱,當真有這麼大的差距,沒有必要在我面前言不由衷。況且,矽谷的軟體工程師中,華人亦不佔少數,說中國人效率低?我有點不服。
接著往下聽就明白了,陳先生指出,這種差距不是“中國人”與“美國人”的差距,而是“非專業”與“專業”的差距。無論在哪裡,非專業軟體工程師與專業軟體工程師在效率上差距十倍甚至十幾倍,這並不是什麼誇大的數字。至於表現出來的北京與矽谷的差距,其原因在於中國的專業工程師數量太少,非專業工程師佔主流。而矽谷地區南郭先生比較難以濫竽充數,專業程式設計師佔主流,體現在平均生產率上,自然會有那麼大的差別。陳先生並且指出,從某種角度看,中美之間軟體工程師的薪酬差距之大,是兩地平均生產率差距的體現,他說:“如果你是一名真正專業的軟體工程師,你在哪裡都應該能達到相似的收入水平,因為軟體工業是真正全球化的產業。”
這是一個讓我非常感興趣的話題。我們都知道,在《沒有銀彈》中,軟體工程的老前輩Fred Brooks提出的“唯一”能成數量級提升軟體生產率的辦法,就是僱用天才的程式設計師,所以“天才”與“普通”之間十倍甚至幾十倍的效率差距,這是大家都知道的事情。但是按照一直以來的理解,天才程式設計師是那種腦瓜子特靈光,演算法功底紮實,寫程式又快又好的人精,是可望而不可求的,也沒有什麼有效的訓練手段來成批量地產生。可是“專業軟體工程師”就不一樣了,這裡所謂專業,是指具有規範化的價值觀和知識體系,規範化的工作習慣和職業紀律,職業化的工作作風和流程,當然也具有相應的技能和經驗。很顯然,這樣的人才,不但是每一個普通程式設計師都完全能夠達到的,而且也是能夠大規模系統化培養的。如果這種觀點正確,中國的程式設計師們就不應該整天琢磨著要趕哪個新,逐什麼潮,一會兒面向這個,一會又面向那個,左一個語言右一個框架地折騰著,而是應該踏踏實實在專業性上下功夫。
這讓我想起了敏捷技術大師Kent Beck的一句名言:“我不是個優秀的程式設計師,我只是一個有著優秀習慣的普通程式設計師。”這裡所謂的“優秀習慣”,應該就是“專業化”的一個重要體現。Kent Beck的這句話,實際上還暗示了傳統觀念中“優秀程式設計師”與現在所需的真正有價值的軟體工程師之間的顯著不同。也就是說,你不能因為程式寫的好,就想當然地認為自己是合格的軟體工程師,沒有專業素養,你就不算是專業人。
之後的這幾天裡,我分別就這個問題與好幾個人討論過。他們中間有美國軟體企業的技術負責人,有在國內奮鬥多年的軟體企業管理者,又在某些領域積累多年的專業人士,也有正在創業中激烈拼搏的程式設計師兼老闆,有大公司的,有小公司的,有中國人,有美國人,有去過美國的中國人,也有來到中國的美國人。他們的意見,可以說是異口同聲地同意陳尚義先生的觀點,並且表達了對中國程式設計師職業性水平不足的不滿。相比之下,我們中國人自己對這個問題的態度都比較激烈,倒是老外們反而比較客氣,有一個人謹慎地說:“也許沒有十倍那麼大,但是肯定比五倍要多。”我苦笑道:“七八倍也受不了啊,長遠來講,中國人就必須一點不差才行。”
從這些討論中,我得到的結論是,儘管他們也非常希望獲得“天才程式設計師”,但是實質上是把對程式設計師專業化的要求放在天才前面的,也就是說,寧要專業的工程師,不要不專業的“牛人”,當然,專業化的大牛是最好不過了,但是現實地說,這種人確實很難遇到,既然如此,就要強調專業性在前。他們認為,專業性保證了一個程式設計師的技能和工作能夠為組織帶來效益,而他們只會為這種效益付酬,不會出於對“大牛”的敬仰之情而主動上繳貢銀。而且,他們也相信,只要一個人專業化程度足夠,技術和經驗上的不足是容易在實踐中彌補的。
由此看來,所謂“十倍差距說”,成立的可能性是很大的。而整個軟體界對於程式設計師專業性的呼喚,也是實實在在的。這讓我想起差不多兩年前,我採訪群碩軟體創始人劉英武先生的時候,這位1960年代的普林斯頓電腦科學博士,前IBM的高階副總裁,SQL語言的創造者就曾經強有力地表達過類似的看法。他搬著指頭對我說:“技術是最容易解決的問題。你說那個.NET,給你多長時間你能掌握?半年夠不夠?一年夠不夠?J2EE怎麼樣,一年可以嗎?一年半?就算是最複雜的C++,三年下來,你還搞不定嗎?可是建立一個世界一流的、商業上成功的軟體團隊需要多長時間?十五年,二十年!而且一點都不能鬆懈。我不明白,為什麼有那麼多人為自己的技術沾沾自喜?我在IBM的時候,手下全是來自美國一流名校的博士,但不管他們技術多好,如果不能遵守discipline,不能給組織帶來效益,那就一點價值都沒有!在中國,很有一些程式設計師,以為自己技術高,就應該拿高薪,就應該牛,就可以不要紀律。他們很少問自己,究竟給團隊帶來什麼價值,究竟給企業帶來什麼價值,究竟給客戶帶來什麼價值?在我看來,這就是不專業,不合格。我相信,這種情況遲早會過去的,對於軟體工程師的評價,很快會迴歸價值。也只有到了那個時候,中國的軟體才會有實實在在的快速發展。”
兩年前我們覺得這段話“太刺激”,沒有發表。現在看來,當年劉先生的觀點已經成為共識。毫無疑問,這意味著中國程式設計師孤芳自賞的時代即將結束,我們應當開始高度重視組織的利益和價值,並且通過“專業化”修煉來實現從個體戶到企業人的轉變。
剛聽到這一論斷,我還是有些震驚的,因為以我從事媒體工作五年的所見所聞,中國軟體工程師的“外部形象”還是不錯的,很多老外都一再表示對中國工程師的天才和勤奮表示驚訝,即使我再三追問不足和建議,他們通常也就是從牙縫裡擠出“經驗不足”幾個字。像陳先生這種直言不諱,我是第一次聽到。不過轉念一想,又有些懷疑,老外素以坦率著稱,當真有這麼大的差距,沒有必要在我面前言不由衷。況且,矽谷的軟體工程師中,華人亦不佔少數,說中國人效率低?我有點不服。
接著往下聽就明白了,陳先生指出,這種差距不是“中國人”與“美國人”的差距,而是“非專業”與“專業”的差距。無論在哪裡,非專業軟體工程師與專業軟體工程師在效率上差距十倍甚至十幾倍,這並不是什麼誇大的數字。至於表現出來的北京與矽谷的差距,其原因在於中國的專業工程師數量太少,非專業工程師佔主流。而矽谷地區南郭先生比較難以濫竽充數,專業程式設計師佔主流,體現在平均生產率上,自然會有那麼大的差別。陳先生並且指出,從某種角度看,中美之間軟體工程師的薪酬差距之大,是兩地平均生產率差距的體現,他說:“如果你是一名真正專業的軟體工程師,你在哪裡都應該能達到相似的收入水平,因為軟體工業是真正全球化的產業。”
這是一個讓我非常感興趣的話題。我們都知道,在《沒有銀彈》中,軟體工程的老前輩Fred Brooks提出的“唯一”能成數量級提升軟體生產率的辦法,就是僱用天才的程式設計師,所以“天才”與“普通”之間十倍甚至幾十倍的效率差距,這是大家都知道的事情。但是按照一直以來的理解,天才程式設計師是那種腦瓜子特靈光,演算法功底紮實,寫程式又快又好的人精,是可望而不可求的,也沒有什麼有效的訓練手段來成批量地產生。可是“專業軟體工程師”就不一樣了,這裡所謂專業,是指具有規範化的價值觀和知識體系,規範化的工作習慣和職業紀律,職業化的工作作風和流程,當然也具有相應的技能和經驗。很顯然,這樣的人才,不但是每一個普通程式設計師都完全能夠達到的,而且也是能夠大規模系統化培養的。如果這種觀點正確,中國的程式設計師們就不應該整天琢磨著要趕哪個新,逐什麼潮,一會兒面向這個,一會又面向那個,左一個語言右一個框架地折騰著,而是應該踏踏實實在專業性上下功夫。
這讓我想起了敏捷技術大師Kent Beck的一句名言:“我不是個優秀的程式設計師,我只是一個有著優秀習慣的普通程式設計師。”這裡所謂的“優秀習慣”,應該就是“專業化”的一個重要體現。Kent Beck的這句話,實際上還暗示了傳統觀念中“優秀程式設計師”與現在所需的真正有價值的軟體工程師之間的顯著不同。也就是說,你不能因為程式寫的好,就想當然地認為自己是合格的軟體工程師,沒有專業素養,你就不算是專業人。
之後的這幾天裡,我分別就這個問題與好幾個人討論過。他們中間有美國軟體企業的技術負責人,有在國內奮鬥多年的軟體企業管理者,又在某些領域積累多年的專業人士,也有正在創業中激烈拼搏的程式設計師兼老闆,有大公司的,有小公司的,有中國人,有美國人,有去過美國的中國人,也有來到中國的美國人。他們的意見,可以說是異口同聲地同意陳尚義先生的觀點,並且表達了對中國程式設計師職業性水平不足的不滿。相比之下,我們中國人自己對這個問題的態度都比較激烈,倒是老外們反而比較客氣,有一個人謹慎地說:“也許沒有十倍那麼大,但是肯定比五倍要多。”我苦笑道:“七八倍也受不了啊,長遠來講,中國人就必須一點不差才行。”
從這些討論中,我得到的結論是,儘管他們也非常希望獲得“天才程式設計師”,但是實質上是把對程式設計師專業化的要求放在天才前面的,也就是說,寧要專業的工程師,不要不專業的“牛人”,當然,專業化的大牛是最好不過了,但是現實地說,這種人確實很難遇到,既然如此,就要強調專業性在前。他們認為,專業性保證了一個程式設計師的技能和工作能夠為組織帶來效益,而他們只會為這種效益付酬,不會出於對“大牛”的敬仰之情而主動上繳貢銀。而且,他們也相信,只要一個人專業化程度足夠,技術和經驗上的不足是容易在實踐中彌補的。
由此看來,所謂“十倍差距說”,成立的可能性是很大的。而整個軟體界對於程式設計師專業性的呼喚,也是實實在在的。這讓我想起差不多兩年前,我採訪群碩軟體創始人劉英武先生的時候,這位1960年代的普林斯頓電腦科學博士,前IBM的高階副總裁,SQL語言的創造者就曾經強有力地表達過類似的看法。他搬著指頭對我說:“技術是最容易解決的問題。你說那個.NET,給你多長時間你能掌握?半年夠不夠?一年夠不夠?J2EE怎麼樣,一年可以嗎?一年半?就算是最複雜的C++,三年下來,你還搞不定嗎?可是建立一個世界一流的、商業上成功的軟體團隊需要多長時間?十五年,二十年!而且一點都不能鬆懈。我不明白,為什麼有那麼多人為自己的技術沾沾自喜?我在IBM的時候,手下全是來自美國一流名校的博士,但不管他們技術多好,如果不能遵守discipline,不能給組織帶來效益,那就一點價值都沒有!在中國,很有一些程式設計師,以為自己技術高,就應該拿高薪,就應該牛,就可以不要紀律。他們很少問自己,究竟給團隊帶來什麼價值,究竟給企業帶來什麼價值,究竟給客戶帶來什麼價值?在我看來,這就是不專業,不合格。我相信,這種情況遲早會過去的,對於軟體工程師的評價,很快會迴歸價值。也只有到了那個時候,中國的軟體才會有實實在在的快速發展。”
兩年前我們覺得這段話“太刺激”,沒有發表。現在看來,當年劉先生的觀點已經成為共識。毫無疑問,這意味著中國程式設計師孤芳自賞的時代即將結束,我們應當開始高度重視組織的利益和價值,並且通過“專業化”修煉來實現從個體戶到企業人的轉變。
相關文章
- @程式設計師,安全問題必須重視!程式設計師
- 程式設計師必須要了解的web安全程式設計師Web
- iOS 程式設計師必須收藏的資源大全iOS程式設計師
- 程式設計師必須掌握的資料結構 2程式設計師資料結構
- Java程式設計師必須掌握的5個註解!Java程式設計師
- PHP程式設計師必須知道的兩種日誌PHP程式設計師
- 程式設計師必須掌握的資料結構 1程式設計師資料結構
- 走向架構師——1~3年java程式設計師面試必備的技能架構Java程式設計師面試
- 為什麼說 Java 程式設計師必須掌握 Spring Boot ?Java程式設計師Spring Boot
- Java程式設計師必須掌握的Spring依賴管理原理Java程式設計師Spring
- 程式設計師必須掌握的核心演算法有哪些?程式設計師演算法
- 7個Web前端程式設計師必須會用CSS技巧Web前端程式設計師CSS
- 程式設計師成為大佬必須學的演算法程式設計師演算法
- 程式設計師生存指南:你必須要掌握的兩點!程式設計師
- 聊聊程式設計師面試時,那些必須注意的事情程式設計師面試
- 前端工程師必須掌握的設計模式前端工程師設計模式
- 成為更好的程式設計師必須學習的 4 種程式設計結構程式設計師
- 創業者,程式設計師必備神器創業程式設計師
- 【Linux常用命令①】程式設計師必須掌握的Linux命令Linux程式設計師
- Java程式設計師必須掌握的7個Java效能指標!Java程式設計師指標
- 牛逼程式設計師必須要掌握金字塔思維程式設計師
- 如何從一個程式設計師走向成功?程式設計師
- 為什麼Linux運維工程師必須學習Shell程式設計?Linux運維工程師程式設計
- 作為程式設計師,這些實用工具你必須要知道!程式設計師
- 列舉幾個Java程式設計師通用的、必須掌握的框架Java程式設計師框架
- Java程式設計師在2021年必須學習的幾項技能。Java程式設計師
- 程式設計師到高階架構師,必須經歷的三個階段!程式設計師架構
- 二三線城市的程式設計師如何走向高薪?程式設計師高薪
- 設計師升職加薪必須知道的10個設計網站網站
- JAVA程式設計師“黃金5年”必須要掌握的知識技能Java程式設計師
- 強烈推薦:程式設計師必須懂的資料庫知識程式設計師資料庫
- 程式設計師必須知道的字符集與字元編碼詳解程式設計師字元
- Javascript程式設計師必須安裝幾個常用VS Code外掛 - klamserJavaScript程式設計師
- Java程式設計師必須要掌握這10種工具,缺一不可!Java程式設計師
- 面試阿里P6,Java程式設計師必須掌握的技術面試阿里Java程式設計師
- shell程式設計必須要掌握的命令-xargs程式設計
- 程式設計師跳槽必備神器程式設計師
- Java程式設計師必備技能Java程式設計師