今天,,讓我們抽出時間看看我們一直鉆研的信息學(xué),在實(shí)際工作中到底能帶給我們什么好處吧,。 魏小亮是Facebook的移動技術(shù)總監(jiān),,曾在中學(xué)里面參加NOI,在大學(xué)參加ACM/ICPC,、TopCoder 等編程競賽,,有不少的朋友問過他一個問題:參加編程競賽最后對實(shí)際工作究竟有多少用處?他在本文中總結(jié)了他的幾點(diǎn): 有不少的朋友問過這個問題:在中學(xué)里面參加NOI,,在大學(xué)參加ACM/ICPC,,TopCoder,最后對實(shí)際工作究竟有多少用處,?我把自己的一些理解總結(jié)了一下跟大家討論。 我是在94~96年參加NOI和集訓(xùn)隊(duì),,99~2000年參加ACM/ICPC,,2002左右玩了半年TopCoder,后來就很少關(guān)注編程競賽 了,,所以可能對近幾年競賽模式的變化不了解,。另外我目前主要在工業(yè)界工作,所以“實(shí)際工作”主要指的是在IT工業(yè)界的技術(shù)型工作,。 我想競賽培養(yǎng)的能力可以分成幾個類型: 1,、基本技術(shù)技能。 我想?yún)⒓痈傎惗页煽儾诲e的朋友,,基本上都有三個非常出色而且難得的基本技術(shù)能力: 算法設(shè)計,、快速編程和自我調(diào)試。這是所有比賽都必須的: 給定一個問題,,需要很快地設(shè)計出算法,,很快地編寫出程序,并且在整個算法設(shè)計和編程過程中不斷拷問自己的設(shè)計和程序,,盡早發(fā)現(xiàn)漏洞,、完善設(shè)計,最后在提交 結(jié)果之前通過一系列的測試盡量提高程序通過競賽評委測試的概率,。 這三項(xiàng)基本能力是工作里面非常有用的,。 大部分公司的技術(shù)面試也集中在這三項(xiàng)基本技能里面。競賽經(jīng)驗(yàn)的確讓優(yōu)秀的參賽者在實(shí)際工作中獲得先發(fā)優(yōu)勢,一般IOI/ICPC/TopCoder的優(yōu)秀 參賽者都很容易獲得公司錄取,,并且在起始級別的工程師崗位上作得非常出色,。 2、獨(dú)立學(xué)習(xí)的能力和自信心,。 我想大部分的NOI參賽者都是中學(xué)就開始學(xué)習(xí)中學(xué)課程里面不函括的內(nèi)容:面向?qū)ο蟪绦蛟O(shè)計,、數(shù)據(jù)結(jié)構(gòu)、圖論和網(wǎng)絡(luò)流理論,、算法理論,、離散數(shù)學(xué)等等。如果一個參賽者是通過自己獨(dú)立學(xué)習(xí)這些課外知識而在競賽里面脫穎而出的,,她一定有獨(dú)立學(xué)習(xí)的能力和自信心,,同時相信自己能夠很快的學(xué)會各種新知識。這個能力和自信在工作中非常重要: 計算機(jī)語言日新月異,,從Pascal/C到C++/Java到Python/PHP/Javascript/Objective-C??一個人不可能從一 開始就懂得所有的知識,,但只要自信自己能學(xué)會任何新的語言和概念(并且的確可以學(xué)會),那他就可以敢于面對未知的挑戰(zhàn),。在工作中,,這些“敢吃螃蟹第一人”往往會得到更多機(jī)會去開發(fā)新項(xiàng)目、創(chuàng)建新公司,。 3,、表達(dá)能力。 這一點(diǎn)我本人在吳文虎老師指導(dǎo)的NOI冬令營里面獲益匪淺,。當(dāng)時吳老師要求每位冬令營選手挑選一 個復(fù)雜的競賽問題深入研究解法,,最后寫成論文,并且在冬令營里面做報告,。吳老師親自把關(guān),,指導(dǎo)論文里面寫不清楚或者報告里面說不清楚的地方。這是我第一次學(xué)會如何把一個技術(shù)問題寫清楚,、說清楚,。這樣的訓(xùn)練雖然跟競賽成績本身沒有直接的關(guān)系,但能夠讓競賽選手的表達(dá)能力上了一個臺階,。表達(dá)能力對實(shí)際工作有非常重要的意義:現(xiàn)代的大型軟件系統(tǒng)開發(fā)不是一個英雄人物就能完成的,,如果一個子系統(tǒng)的算法和程序不能清晰地被理解,那這個子系統(tǒng)和它的作者就成為單一故障點(diǎn)(Single Point Of Failure) —— 只要作者一度假,,就沒有人能維護(hù)或者擴(kuò)展這部分,。基于這種風(fēng)險,,大家寧愿用一個更慢更費(fèi)內(nèi)存但能被其他人看懂的解決方案,。在這兩年的招聘過程中,,我看到不少這樣的可惜例子:不少ACM/ICPC的選手能在15分鐘之內(nèi)寫出一個很巧妙的算法,在機(jī)器上編譯,、測試?yán)佣纪ㄟ^,。 但在黑板上或程序注釋里面,他們花20分鐘也沒能說清楚這個算法為什么是對的,,為什么要用這個算法,。 4、合作能力: NOI/IOI/TopCoder更多的是單槍匹馬,,而ACM/ICPC對合作能力的培養(yǎng)更有幫助,。三個編程高手共用一臺機(jī)器,緊缺資源誰先用誰后用,,如何分工,,這些問題在實(shí)際工作中每天都會遇到,如果一個選手在ICPC里面學(xué)會如何跟隊(duì)友協(xié)調(diào),、如何培養(yǎng)信任,,那她在實(shí)際工作里面就很容易融入一個團(tuán)隊(duì),在團(tuán)隊(duì)里面找到自己的發(fā)力點(diǎn) ,,很快為團(tuán)隊(duì)作出貢獻(xiàn),。 5、志同道合的朋友圈: 一般來說,,愿意花額外時間參加競賽的學(xué)生都是喜歡寫程序的,,因?yàn)橄矚g,他們往往更容易在 這方面越做越好,。我10年前在競賽過程中認(rèn)識的老對手,,現(xiàn)在還有很多是好朋友,,不時能聯(lián)系一下,,得到他們的指導(dǎo)、交換最新的行業(yè)信息和趨勢,。這一點(diǎn)雖然對 實(shí)際工作沒有直接幫助,,但我覺得是參加競賽獲得的最寶貴的東西。 這些大概是我在比賽里面學(xué)到的最有用的一些東西,。下次有時間的時候打算整理一下實(shí)際工作里面有哪些是競賽里面學(xué)不到的,。 |
|