你如何看待Peter Norvig所說的,超過某個閾值以後,編程競賽和工作表現呈負相關?

鏈接:

Being good at programming competitions correlates negatively with being good on the job

Programming competitions correlate negatively with being good on the job


首先默認「超過某個閾值以後,編程競賽和工作表現呈負相關」這個現象確實存在,那我大概分析一下背後可能的原因。一己之見,很可能有誤,歡迎拍磚。

(1)閾值之上的競賽選手,很可能對演算法競賽本身的興趣遠超過工作以及實際問題的興趣。

下面是對一位ACM世界級選手 SnapDragon的採訪。 SnapDragon是著名的演算法競賽選手,拿過ACM世界總決賽金牌,topcoder上的target,在Google工作。

採訪鏈接見TopCoder Feature Articles

截取其中的兩段

Q: What do you love about coding?

A: Coding competitions. The satisfaction of getting a tough problem, thinking through the theory, implementing a program, and then learning you"ve solved it perfectly is fantastic. challenges isolate the essence of what"s fun in coding.

Q: What do you hate about coding?

A: "Software engineering". Most real-world programming doesn"t involve any new algorithm, doesn"t require any cleverness; it merely involves implementing some known solution and making sure it"s robustly commented and tested. It requires self-discipline simply because it"s so boring!

大概翻譯一下

問:你喜歡編程的哪些方面?

答:編程競賽。遇到一個難題,徹底地想清楚理論,然後實現一個程序完美地解決這個問題,這種滿足感是非常美妙的。

問:你討厭編程的哪些方面?

答:「軟體工程」。大多數現實世界中的編程並沒有涉及到任何新演算法,並不需要一點聰明。這些程序僅僅是實現已經有的解決方法,並確保可靠的注釋和測試。這僅僅需要自律,因為這是如此地無聊!

從這段採訪可以看出,競賽中的絕世高手更喜歡演算法競賽本身的樂趣,並不喜歡工程問題。我相信這種現象並不僅僅存在於SnapDragon身上,很多頂級選手似乎工作之後都捨不得脫離演算法競賽這個圈子。比如petr,快三十歲了,每年還雷打不動地參加TCO, facebook黑客杯,每年的ACM總決賽他都會在場外做模擬。

所以我覺得演算法競賽對於這個層次的選手,更多是一種遊戲和興趣,而且他們對這種遊戲是上癮的。這並沒有什麼不好,但是這註定了他們對工程方面投入的時間和熱情遠不如其他非競賽出身的大牛。

而非競賽黨的大牛,他們同樣也痴迷於編程。但是他們不花時間在競賽和刷題上,業餘的時間更多的是去github折騰,去造自己喜歡的輪子,去開發軟體。這可能對工作中的表現更有幫助。

觀點:負相關並不是因為能力,而在於興趣和熱情不同。競賽黨痴迷編程可能更熱衷於解決難題的快感,非競賽黨痴迷編程可能是更熱衷於創造的快感。

(2)編程競賽對實際工作的幫助有邊際遞減效應。

從零基礎到ACM區域賽金牌,編程能力、調試能力會有很大的提升,並且能夠熟悉數據結構和演算法,同時也對思維能力有很大的鍛煉。這些對於工作也是非常有幫助的,這些素質也是成為一個優秀程序員的核心素質。

但是再往上面提升,就不是基本功的提升,更多的是奇技淫巧。在這個階段,提升能力會更艱難,而且對實際工作的幫助也遠不如上一個階段明顯。

或者用3xian的話來說,「ACM玩得好甚至不需要去刻意學什麼演算法。雖然我們偶爾見到一些題目需要一些成熟的經典的演算法,那些題目是我喜歡的題目,但是那些題目屬於最垃圾的ACM題目。另一角度來說,很多人覺得自己ACM出成績了就代表自己演算法不錯了,這是一種錯誤觀念,當你深入任何一個方向的演算法領域的時候,你會發現ACM那點東西太小兒科了,太不入流了。說白了,ACM是打著演算法的幌子來讓大家比腦子。」

(3)題外話

儘管ACM競賽具有邊際遞減效應,但是能把這個競賽做到頂級的人是非常值得尊重和敬畏的。

能在ACM/ IOI/ IMO / 普特南這些競賽中做到全球前幾名的人,我覺得都是天才。這些人的潛力是非常驚人的,他們的上限是普通人難以企及的。事實上,確實有很多ACM世界級大神後來也成為了業界傳說。例子很多,這裡就不具體舉例了。

但即使是對於那些後來發展沒到預期的天才,我覺得我們也應該採取包容的態度,別用凡俗的眼光去衡量天才。

比如曾經有人問,像ACRush,Petr這樣的天才,為什麼要在Google當普通員工,而不是去創業?為什麼要在退役多年之後還堅持參加競賽,而不是去做更有意義的事情?那些競賽的大獎對於他們來說早已經沒有什麼意義了。

事實上,他們並不欠這個世界什麼,他們選擇他們喜歡的生活方式,無可厚非。我們不能把莫名其妙的道德束縛加在這些人身上,強制要求他們做出多大的貢獻。每個人都有權利按照自己的意願度過這一生,對於天才也是一樣。


Overfitting害死人


說明舉重冠軍不是好的搬磚工


坦白說……對絕大多數人而言……這個閾值還遠著呢……

搞到閾值以上的,我能想到的也就是Petr(好吧我承認我老了)那種……

去個WF就閾值以上?想多了。


我想到了啤酒和紙尿布的故事。

ps: @劉江 那條微博基本屬於沒讀懂原文的意思

@劉江總編 編程競賽優勝者在實際工作中表現不行?O網頁鏈接@極客頭條 Peter Norvig最近一次演講中捎帶講了一段,說Google的招聘機器學習系統發現,員工中編程競賽與實際工作表現負相關,引起大家熱議。


我覺得沒啥毛病,但有這麼個事:打競賽,代表著你以後想做碼農,還是做一名學術研究者,還是只是鍛煉思維能力。

競賽打好了,至少你在寫程序演算法這一方面不會有很多問題了。剩下的事,比如寫文檔、用戶友好,可以說是眼見之功,除了累點煩點並不難。


看了一下原視頻。整個問題的出處在哪?

1. 「閾值」在哪裡提到了?難道是說被google招聘的人?(補充:而且問題模稜兩可,是什麼的閾值?演算法水平的閾值還是工作表現的閾值?)

2. 負相關的也不完全是編程競賽的」表現「啊?

原文:"being a winner of one of these programming contest was actually a negative factor for performing well on the job"

剛剛Peter Norvig回復我了,他說他覺得是指所有在簡歷裡面提到了跟編程比賽有關的信息的人。並且比賽也不局限於那幾個比賽,所有比賽都算在內。

所以我看到的關鍵詞是: winner。我不知道他具體指代了什麼,待我去問問他再來補充。不過有兩種可能性:獲獎的人都算winner,或者第一名才算winner。

如果是獲獎的人都算winner,不用說,我個人感覺這個集合的質量和google校招的質量比較,應該差別不大,何況如果和google招聘的所有人,包括社招比較,那麼應該顯然是不如的。(根據我的經驗社招的人更少可能有編程競賽經歷,因為競賽還是最近幾年慢慢火起來的)

&

如果是第一名才算winner,這個集合有多小大家應該心裡有數……如果只算ACM ICPC / Codejam / Hacker Cup 這幾個少數大規模的比賽,那麼就是那幾個大家都知道的人,感覺他們的表現似乎比平均水平還是要好不少的。如果考慮了各種旮旯的比賽的話,那麼這個集合的不靠譜程度應該比某種創新比賽還大。

&


那視頻的意思我理解是:

1、考100分的人不一定比考99分的人學的明白,可是考90分以上的大部分比考80分的人學的明白。。

2、搞競賽的太追求短平快了,但是很多事情可以慢下來做,細緻點做。

個人感覺。。本質上。。。其實。。。就是一群學神之間的互黑。。如果沒到那個級別,還是別當真了。


這話本身沒毛病。

編程在工作上的應用有一個夠用的閾值,超出這個閾值的一切都是無用功(或者是低效作用),如果還在裡面投入了多餘的精力,就是負相關了。

有一個常態的說法:優化是無極限的,但實際上優化就是有極限的,因為你不應該用99%的精力去解決最後1%的效率問題。

而編程更不僅僅是優化,其他方面這個問題體現的更充分

當然狹義的講,演算法在工作中占的比例很低,如果你對演算法感興趣導致你對其他的「編程」不感興趣,就會造成那部分工作效率的降低,自然就是負相關了


http://codeforces.com/blog/entry/17302


我覺得演算法競賽對我的profit是,我在邏輯上能梳理得很清楚,寫出來的代碼大部分至少能通過自己的邏輯鏈,而且在面試中可以有很出色的發揮。

而在工作中,我目前體會到的是工作中的代碼不只是要寫得快,更重要的是要寫得清楚,可讀性好,遵守Coding Conventions。

而且,寫代碼也只是工作中的一小部分罷了。


搞競賽的屬於頂級智力是無疑的 但這種比賽選拔的是快速解決特定問題 做工程是另一回事 首先不可能刷題集訓來得到結果 其次需要綜合知識運用能力 這一類更多需要深思熟慮和平衡能力 快糙猛的聰明有時是禍害


看@程序猴子 提供的回答。

關鍵詞難道不是「機器學習系統「么?

23333333333333333333333333333


參考一下知乎大神們對Go語言群起而噴之的態度,你就明白了。


推薦閱讀:

大型互聯網公司有社招么?
windows系統里出現程序未響應的原因是什麼?
客觀而言,論程序員的收入水平,是編寫靠近底層的程序員收入高還是高級語言程序員收入高?
芝加哥和西雅圖,哪個更適合工作生活?
30歲轉行,騎驢找馬爭分奪秒自學前端,如何規劃學習和求職路線?

TAG:程序員 | ACM競賽 |