📖 ZKIZ Archives


中國碼農拿下全球第一!圍觀國內的CTO們怎麽討論這事兒 | 黑馬薦文

來源: http://www.iheima.com/zixun/2016/0919/158809.shtml

中國碼農拿下全球第一!圍觀國內的CTO們怎麽討論這事兒 | 黑馬薦文
峰瑞資本 峰瑞資本

中國碼農拿下全球第一!圍觀國內的CTO們怎麽討論這事兒 | 黑馬薦文

“中國工程師技術能力世界第一”,對此創業公司 CEO 如何看待的?

推薦星級:★★★★★

閱讀時長:10分鐘

推薦理由:世界著名的編程競賽組織 HackerRank 剛剛發布報告:根據各國程序員在各項比賽中的表現,在總得分榜上,中國程序員獲得了第一名。對此創業公司 CEO 如何看待的?黑馬哥與你分享。本文由峰瑞資本(ID:freesvc)授權i黑馬發布,譯者王挺。

哪個國家能夠在編程奧林匹克競賽中獲勝?

哪個國家擁有世界上最好的程序員?

許多人會認為是美國。畢竟,美國是比爾•蓋茨,肯•湯普森(Ken Thompson),丹尼斯•里奇(Dennis Ritchie, 與 Ken Thompson 聯合發明了 C 語言和 Unix 系統) 和唐納德•克努斯(Donald Knuth,現代計算機科學的先驅人物,創造了算法分析學科)等諸多編程名人的故鄉。但話又說回來,印度擁有許多諸如印度理工學院等著名科技院校,而俄羅斯的黑客一向以 “高效率” 而著稱。

那麽,是否有一種方法可以來衡量哪個國家擁有最好的程序員呢?

通過分析來自 HackerRank(Priceonomics 的客戶之一)的數據,我們找到了答案。HackerRank 定期為程序員舉辦眾多的編碼挑戰,通過參與挑戰來提高程序員的編碼技能。成千上萬來自世界各地的程序員參加了各種編程語言以及知識領域的挑戰,諸如 Python 語言、算法、安全領域以及分布式系統等。HackerRank 根據程序員完成挑戰的準確性和速度,對他們進行評分和分級。

根據數據顯示,中國和俄羅斯擁有最具才華的程序員。中國程序員在數學、函數式編程以及數據結構領域的挑戰中擊敗了其他所有國家,而俄羅斯程序員在最受歡迎以及最具競爭的算法領域具有統治地位。盡管美國和印度有眾多程序員參與了 HackerRank 的挑戰,但在排名方面,他們僅獲得了第 28 和第 31 名。

在開始進一步分析之前,我們先來觀察一下參加比賽的程序員最熱衷參與的挑戰類型。在 HackerRank 比賽中,程序員可以選擇參與 15 個不同領域的挑戰。有一些領域要比另一些更受歡迎。下表顯示了各領域完成挑戰的參與度比例。

1

▲ 這張表格展示了 HackerRank 上最多人完成的項目。前三名分別是算法、Java、數據結構

最受歡迎的是算法領域,有接近 40% 的程序員參與其中。這個領域的挑戰包括數據排序、動態規劃、關鍵詞檢索以及一些其它基於邏輯的任務。而作為算法領域的挑戰者,程序員可以使用任何編程語言,這也部分解釋了為什麽該領域如此受歡迎。(算法也是程序員面試過程中的一個關鍵內容。)

與算法相比,參與度第二的 Java 領域和第三的數據結構領域就相差很遠了,這兩個領域分別有接近 10% 的開發人員參與挑戰。而分布式系統領域和安全領域是參與度最低的挑戰領域。

那麽,基於這些挑戰,哪一個國家的程序員得分最高呢?

為了找到答案,我們分析了每個國家在各領域中的平均分。在取平均分之前,我們首先對每一個領域的得分進行了標準化處理(將每一個獨立得分減去平均值後再除以標準差,即 z-score)。這樣處理後,我們就能夠在不同領域之間進行平等的分數對比。接下來,為了方便理解,我們將得到的 z-score 換算成 1-100 的分值度量。

我們選取了 50 個國家的數據。來自這些國家的程序員在 HackerRank 比賽中參加了數以千計的比賽(最少的也參加了 2000 多個)。下面是我們的發現:

2

▲ 參加 HackerRank 比賽的國家得分。前三名分別為中國、俄羅斯、波蘭

中國得分最高,因此中國程序員獲得了 100 的分值,名列第一。然而和第二名相比,中國只是以十分微小的優勢取勝——俄羅斯的得分是 99.9 分。波蘭和瑞士則得到了接近 98 分的好成績,分列第三和第四位。在名單中,巴基斯坦以 57.4 分墊底。

印度和美國雖然貢獻了最多數量的程序員,但甚至沒有進入到榜單的前半部分。印度得到了 76 分,名列 31 位;美國得到了 78 分,名列 28 位。

雖然中國在平均分上戰勝了其他所有國家,但這並不意味著它在每個領域都能排名第一。那麽,在某一特定的技能領域方面,哪個國家貢獻了最優秀的程序員呢?讓我們再看看在每個領域方面名列前茅的國家。

3

▲ 各領域不同國家的得分情況。中國在數據結構、數學、函數程式語言中拔得頭籌

不出所料,中國在很多領域的表現都相當優秀。來自該國的程序員在數據結構,數學和函數式編程領域擊敗了對手,排名第一。

另一方面,俄羅斯在最受歡迎的算法領域拔得頭籌。在該領域波蘭和中國分別排名第二和第三。

那麽,如何解釋不同國家在不同領域中的表現差異呢?一個可能的解釋是俄羅斯的程序員更熱衷於參與算法領域的挑戰,並從中獲得了更多的鍛煉機會。而中國程序員更熱衷於參與數據結構領域的挑戰。

我們還比較了各國程序員,在不同挑戰類型中所花費的時間,並將其與參加該項挑戰的 HackerRank 用戶的平均數據進行對比。經過這樣的分析後,我們發現了在各個領域中,哪些國家的程序員更願意接受挑戰。

4

▲ 在同一領域中,最有可能參與和最不可能參與該項競爭的國家。中國程序員較少選擇的項目包括 Java、SQL、數據庫、Ruby

正如上表所示,中國程序員在數學領域的參與度遠高於該領域的統計平均值。這也許可以幫助解釋為什麽在該領域中國程序員能夠占據榜首。同樣,捷克程序員在 Shell 領域展現出了很高的參與度,而在該領域捷克排名第一。

但除了這兩個例子以外,其他國家的數據並沒有顯示出這樣的相關性。一個國家的程序員更願意參加某項領域的比賽,並不代表他們在該領域的得分排名就能更高。

我們也想知道不同國家是否對編程語言具有特殊偏好。印度程序員是否更鐘情於 C++?墨西哥人會使用 Ruby 編程嗎?

下圖列出了不同國家程序員參與不同編程語言挑戰的比例。

515797834248723121

▲  各國程序員所使用的編程語言情況

總的來說,各國程序員對 Java 挑戰的參與度要高於任何其他編程語言挑戰(也有少數例外,例如馬來西亞和巴基斯坦的程序員更喜歡參與 C++ 挑戰,而在臺灣,Python 挑戰最受歡迎)。斯里蘭卡對 Java 挑戰的偏愛度排名第一。而為 HackerRank 貢獻了大量程序員用戶的印度位列第八。

巴基斯坦、斯里蘭卡和尼日利亞在榜單中墊底,這些國家的程序員可以向瑞士程序員學習他們的堅韌不拔的精神。當一名程序員在 HackerRank 進行挑戰時,如果在挑戰開始就放棄,那他/她只能得到零分。而在所有國家中,瑞士程序員的零分比例最低,這也使瑞士程序員成為當之無愧的 “全世界最頑強的程序員”。

6

▲  各國程序員參加比賽的放棄率

每一天,世界上的程序員都在相互競爭,希望能夠成為下一個比爾•蓋茨或唐納德•克努斯。

如果我們現在舉辦一場編程奧林匹克競賽,數據顯示中國將獲得金牌,俄羅斯將帶著銀牌回家,而波蘭將取得銅牌。盡管美國和印度在科技展示推廣方面做出的努力值得稱贊,但他們連排名的前25位都進不了。

CTO 們怎麽說?

朱瑞清

百場匯 CTO,前藝龍副總裁,原亞馬遜(美國)技術總監。

強迫技術人員從事管理崗,對個人、公司都是一種傷害

我個人感覺,僅僅通過 HackerRank 的數據,就說明中國工程師已經排名世界第一,缺少說服力。中國的程序員由於成長背景,對於考試制度擁有較強的積累。用測試的方法,來判斷哪個國家的程序員最優秀,這個方法本身是有片面性的。

拋開本文內容不提,從我個人在中美工作十幾年的經驗來看,我也確實認為中國工程師的技術總體還不能說到了非常高的水平。

舉幾個例子。首先,世界上最著名的技術公司,Facebook、Google、微軟、亞馬遜、LinkedIn,它們會有比較高階的職位,比如 Research Fellow,Distinguished Engineer,Senior Staff。而中國人取得這些職位的比例,要排在美國人、印度人,以及南亞出生的工程師後面。而各個團隊的中流砥柱,常常是中國、美國、印度、歐洲背景的工程師進行 “四國大戰” 的局面。

其次,出生在中國的工程師,基本功非常紮實,數學和邏輯的平均水平要高出其他背景的工程師。但對於整個系統的基礎理解,以及系統集成、系統應用的經驗和理念,往往比不上他的同事。

最後,大型公司對於工程師的考驗絕不只有一個人的基礎技術那麽簡單。他的領導、協同、說服他人的能力也很重要。這一點並不是中國工程師的強項。

造成以上情況的原因,主要有兩點。一,中國背景的工程師,在數理邏輯的訓練和積累上,比其他國家的工程師要好很多。但與此同時帶來的負面效果,就是大家花費了過多時間在數理邏輯上,缺乏探索性技能的訓練。

除此之外,中國工程師比較註重單兵作戰。一個人或者很小的團隊,都可以完成很難的任務,而且完成地很好。但如果和一個大型的團隊協同,合作順暢程度並不取決於個人技術能力,還包括如何說服他人接受自己的觀點,把大的項目分解成很多子項目,帶領幾十人或者幾百人去完成項目。在這一方面,中國工程師在學生時代、職業早期,就缺乏這樣的鍛煉的機會。另外對於開源軟件項目的貢獻上,算法,也比較少見到中國工程師的貢獻。

第二個問題,作為 CTO 看中哪些技能。這和公司本身所處的行業、工程團隊所面臨的挑戰是強相關的。

百場匯本質上是電子商務與共享經濟交匯的細分市場。所以我在挑選工程師的時候,就會首先看中算法和數據結構,這在根本上決定了工程師發展的潛力。第二是編程語言的熟悉程度,表示他在編程方面的積累是否深厚。

這兩點可以在面試中考察出來,比如回答試題、討論技術細節。讓候選人在白板上做一些問答。對於編程能力,可以通過堆棧、語言上算法的細節,比如集成、指針,準確地衡量出他們的能力。

中美技術圈對技術人員的定義、成長模式、看中的技能其實有比較大的不同。第一是對於技術人員的重視。在 Facebook、Amazon、Microsoft,一個非常大的項目可能完全由技術人員主導。這些巨頭更加看重技術在公司成功、形成壁壘的作用。

中國的公司,相對來說由於時間、商業環境的原因,很多並沒有達到這樣的認識。所以在這樣的中國公司中,他們對於技術的認知,僅僅是把一個產品、市場、銷售的理念實現的工具性人才。對這些工程師的領導能力,就不會那麽看重。

除了對技術人員的重視程度之外,中美公司另一個不同之處 “技術領導力”。在美國公司中,你會看到五、六十歲的技術人員,他們本身可能編程能力未必比二、三十歲的程序員更強,但是他們對於行業理解、公司系統架構有更深刻的理解,同時也有數十次產品發布的經驗。

這些在 Research Fellow、Distinguished Engineer 崗位上的技術人員,會給公司的技術方展、框架設計提供經驗上的指導、商業上的輔助。

據我觀察,在中國科技公司中,扮演這樣職務的人是非常少的。在中國公司,往往一個技術人員做到三十歲,會因為薪水上的提升、影響力上的提升,而一定要去做管理崗。對於他本人、公司,其實都是一種傷害。對於非常優秀的技術人員,他可能並不適合擔任管理崗位。而對於公司來說,讓一個技術上非常優秀的人員,脫離第一線編程的工作,可能幾年後他對於技術上敏銳的感知度也會下降很多。

中國技術圈的趨勢,讓我個人比較擔心的是技術創新的氛圍和文化的建立。中國比較少可以看到真正以技術創新為核心競爭力的公司。大多數公司還是停留在商業邏輯、實現上的創新。真正以科技改變一個行業的公司還是比較少。

我們展望一下未來五到十年,科技上真正有趨勢性、paradigm shift(模式轉變)的公司在哪里,我個人認為還是在矽谷。因為他們還是在做一些技術上的研究。不管你認為下一次的技術變革,來自 VR、AR、智能學習、機器人,我們看到在矽谷、國外的研究圈,已經很多公司在這里已經深耕了五年到十年。如果這些技術未來真正可以改變人類生活的時候,肯定是這些公司容易抓住機會。

在中國,相對來說大家還是比較重視眼前的利益。等到風口真正刮起來的時候,留給中國技術圈的機會就不會很多了。

劉靜思

贊賞社交出版聯合創始人、CTO。

行業湧入缺乏鉆研熱情的新人,讓我有些不安

中國程序員排名第一,是因為統計的誤差吧。HackerRank 更加註重算法、邏輯性的考察,在這一方面,中國程序員是比較有優勢的。但是業界對程序員的要求不僅僅是有算法、數據結構的考察。架構的能力、設計的能力、整體設計的能力,這些都是很重要的。

在 HackerRank 中的比賽中,我會看中算法、數據結構、設計模式這一些考察。具體到設計模式方面。因為算法強弱,並不能很本質地決定當下互聯網企業的核心競爭力(大數據類的企業對算法要求很高)。但對於更多的互聯網企業來說,設計模式會決定整體結構的設計、和同事的合作情況。

唯一需要擔心的是整體的技術水平能力,沒有遵循技術發展階段同步提高。一個值得關註的趨勢是:大學畢業生覺得寫程序比較吃香,以至於這個行業湧入大量缺乏深入鉆研熱情的新人。這讓我有些不安。

許丞

心橙互聯 CEO,工程師出身,擁有谷歌 10 年工作經驗

傳統文化讓人更願意跟從而非領導,容易幹很多臟活累活

中國程序員在世界上的各種競賽上取得好成績已經不是新聞。我之前在谷歌帶的實習生就有 IOI、ACM 金牌,還有 Topcoder 有史以來奪得最多次設計冠軍的中國人。但是要說目前中國程序員已經是世界第一的話,我認為還差很遠。

在谷歌和 Facebook,優秀的程序員還是歐洲、美國以及印度的居多。中國的程序員很勤奮也很聰明,但主要還是在別人的框架下勤勤懇懇的填代碼,缺少開創性的框架、系統。在這一點上,國人還需努力。

對於 HackerRank 這些考察的技能中,我個人最看重的是算法,其次是數據結構。實際上,我一直不把算法和數據結構當作一種技能,更多的是一種思想,一種科學的思考方法。

算法和數據結構是一種基礎知識,也可以看成是武俠小說里面的內力。而程序設計語言、計算機安全等等更像是不同的招式和招數。內力所到之處,尋常招式也能發揮巨大威力。就像張三豐使出一招武當長拳,那威力就不可跟熟悉各派招式的趙敏所能匹敵的一樣。

我們在評估算法和數據結構的時候,除了看基礎知識掌握程度以外,也要看是否有創造性的思維和靈活應用的能力。通常而言,我們會把一些實操問題,抽象成為一些算法和數據結構的問題,然後跟他一起去解這個問題。在一起討論的時候,就能看到對方能不能聽懂問題重點,分析問題是否到位,解題思路是否創新,能不能互相激發起靈感等等。有點像武俠里面的高手拆招或者圍棋對弈一樣:最高的境界盡在不言中。比劃武功,豁然開朗。

美國的技術圈更看重的是領導能力(leadership)。孩子從童子軍的時代開始,就一直被灌輸的是:要在最關鍵的時候能挺身而出,解救世界。你看《美國隊長》、《鋼鐵俠》這些大片無一不是在傳遞這樣的思想。我認為這就叫領導力。

領導力就是勇於承擔責任,在關鍵的時候往往能發揮意想不到的能力。而中國的程序員們在教育上普遍接受儒家謙遜的思想熏陶,往往喜歡做 Follower(跟隨者)而不是 Leader(領導者) 。因此,能力很強的人,往往也都不敢或者不願想在某個方面挺身而出。久而久之,就被當作幹臟活累活的不二人選了。

中國互聯網技術圈總體的形勢是非常好的。世界越來越平。中國程序員在掌握世界最新技術方面的時間間隔越來越少。現在中國程序員的普遍水平在越來越高。由於語言水平的提高,走出去的中國程序員也得到了越來越多的國際認可。這些都是很好的趨勢。

然而國內互聯網公司,即使是 BAT 為首的互聯網大鱷,都喜歡把技術當作是一個可有可無的東西,並不認為公司的核心價值在於技術。這樣使得公司更願意投資容易獲得短期利益的項目,而不願意去在更深更黑更難的技術上做投資。拿我們在做的視頻通信技術舉例,就很難在國內看到願意在這個艱難的技術領域里面深耕的公司,和我們一起默默地啃下這些艱難的技術。

李諾

洋蔥數學 CTO,希望能用技術改變中國教育一點點。

比賽本身不重要,更看重願意參與的勇氣和毅力

排名第一這事最多只能說明中國人擁有紮實的應試能力和多年豐富的臨場考試經驗。針對性訓練的競賽者和每天對加班習以為常的程序猿來說,無論是人群比例,還是對最後產出的評判標準,都是截然不同的,這跟奧運獎牌連續前三但國民體質持續降低是一個道理。大學里計算機相關學科的教學內容與現實的嚴重脫節,軟件、互聯網公司對於程序猿的過度使用以及長期培養計劃的缺乏,才是罪魁禍首。

作為 CTO,在 HackerRank 所舉辦的比賽中,你最看重員工的哪一項技能?其實我最看重的是他參加 HackerRank 這件事情,看重的是他背後可能的潛質:有勇氣,有毅力,願意嘗試,期望證明自己的價值。如果硬要挑一個的話肯定是算法。其他的都會因為程序猿角色不同而有不同的側重,而算法則是對編碼實踐的經驗總結和抽象。Codereview 依舊是最原始但最有效的衡量方式。另外打個軟廣,算法離不開數學,如果數學基礎不好,歡迎從洋蔥數學學起:)

從 Hackernews 和 TED 上了解,個人認為相對來說美帝會更看重一個人解決問題的能力和效率,以及一個人對於整個團隊的技術貢獻。當然,中國在這點上也在改善,但是相差還是很遠。

作為一個技術型人才,你需要理解公司商業模式,借助第三方服務和開源代碼快速驗證產品假設,需要設計穩定的架構保證服務的高可靠性,用數據驅動公司產品服務的改善和升級,學習新技術為公司帶來更多有意思的創意,一個只想寫好程序的程序猿一定不是一個好程序猿。

工程師文化不是一句口號,而是需要我們更多在價值觀上的理解,認同和執行。

祁寧

一個熱愛編程的開發者,開發者社區 SegmentFault 創始人 CTO。

更看重算法和數據結構,基礎決定高度

我覺得這個比賽不能完全反應真實水平。HackerRank 也只是眾多編程比賽中的一個。中國程序員在世界範圍內,從他們創造出來的產品、國際影響力來看,排在第一梯隊沒有什麽問題。但是具體排名不是太重要。

針對員工技能這一塊,我覺得最基礎的是算法和數據結構。基礎決定了他的高度。至於考核的方法,主要在日常工作中看他的編程習慣、思想,都能看出他對基礎知識的掌握。

中美技術圈之間,技術本身的差異不是很大,更多是文化上的差異。這和我們從小所受的教育有很大的關系。美國文化提倡自己的東西要 show 出來,讓別人知道,主動去溝通。中國人受儒家思想、中庸之道的影響,更喜歡藏拙。很多技術大牛不一定善於演講,把自己的思想布道給別人。

我雖然沒有在美國工作過,但是根據一些朋友的說法,美國程序員更看重和其他同事溝通,中國程序員更看重實幹、寫代碼的能力。但這種情況也在慢慢改善。

程序 技術創新 人才
贊(...)
文章評論
匿名用戶
發布
PermaLink: https://articles.zkiz.com/?id=215543

Next Page

ZKIZ Archives @ 2019