原作者 : Alan Skorkin
翻 譯:Xguru ,bearice
我方才開始關(guān)于數(shù)學(xué)的思考。如你所知,我已經(jīng)寫了好幾年的軟件了,從實(shí)說(shuō)來(lái)。我還沒有找到在工作中有關(guān)數(shù)學(xué)方面的需求。有大量的新東西我必須得學(xué)習(xí)/熟練,比如語(yǔ)言、框架、工具、流程、交流技巧和在庫(kù)上建立的庫(kù)做你想到的任何東西。數(shù)學(xué)沒有對(duì)其中任何一個(gè)起作用。當(dāng)然這并不奇怪,這絕大多數(shù)我都是在一個(gè)又一個(gè)的模版上做建立,閱讀,更新,刪除(CRUD)的工作,這也是在我們這個(gè)互聯(lián)網(wǎng)時(shí)代,多數(shù)的開發(fā)者在做的絕大多數(shù)的工作。你做的是專職顧問——你一般都在做網(wǎng)站,你在大公司內(nèi)工作——一般都在做網(wǎng)站,你是自由職業(yè)者——你一般都在做網(wǎng)站,我深刻的意識(shí)到我逐漸精于此道,但是請(qǐng)忍一忍我,我跑題了。
最后你對(duì)此有點(diǎn)厭倦,像我一樣。不要誤解我的意思,這可以是有趣和富有挑戰(zhàn)性的工作,能提供機(jī)會(huì)去解決問題,能與有趣的人們互動(dòng)。但是在我私人時(shí)間里建立更多的網(wǎng)站的念頭已經(jīng)有點(diǎn)失去其光澤了--你開始尋找一些有趣的/酷的/好玩的事來(lái)做,呃--又一次 --像我一樣。
比如視覺反饋技術(shù)就十分誘人。但我不是其中之一(和別人一樣,我也喜歡優(yōu)秀的前端技術(shù),但是它真的不能使我興奮),這就是為什么,當(dāng)面對(duì)一些涉及探索的問題
時(shí),我決定更加深入的去挖掘的原因。這把我?guī)Щ剡@個(gè)故事的開始,因?yàn)楫?dāng)我抓住這第一把充滿探索、像隱喻般的鏟子時(shí),當(dāng)我恰好需要用到數(shù)學(xué)時(shí),我方才真切地 了解到我的技能有了多大的退化。數(shù)學(xué)不像在騎單車那樣 --你很久不用自然就會(huì)把它給忘了(然而我這幾年沒有騎車了,所以也許你也忘記了吧?)
開拓眼界Broadening Horizons
學(xué)著多去探索一點(diǎn),讓我接觸到各種有趣的軟件和計(jì)算機(jī)科學(xué)相關(guān)的事物和問題(機(jī)器學(xué)習(xí),自然語(yǔ)言處理,算法分析等),現(xiàn)在在任何方面當(dāng)我正視數(shù)學(xué)時(shí),我就更加深切地感受到技能的缺乏。我意識(shí)到如果你想用計(jì)算機(jī)做一些酷和有趣的事的話,你需要達(dá)到令人滿意的數(shù)學(xué)技能層級(jí)。
除了我剛已經(jīng)提到的,這里還有很多--比如密碼學(xué)、游戲AI、壓縮算法、遺傳算法、3D圖形算法等等。如果你想要寫剛才我講這類程序庫(kù)或工具的話,你需要用到數(shù)學(xué)去理解這些供你所應(yīng)用的領(lǐng)域背后的原理—而不僅僅只是使用它們(成為一個(gè)生產(chǎn)者而非消費(fèi)者—借用一個(gè)操作系統(tǒng)中的隱喻)。即使你不想編寫任何庫(kù),使用那些你理解其運(yùn)作原理的事物去構(gòu)建軟件將帶來(lái)更多滿足感,而非只是把他們堆砌起來(lái)然后祈禱它們能正常工作。
大多數(shù)開發(fā)者告訴你,他們?cè)诠ぷ髦?span lang="EN-US">從來(lái)不需要數(shù)學(xué)(就像我前面說(shuō)的?),但是經(jīng)過短暫的沉思之后,我靈光一現(xiàn):這里就是逆Maslow錘子理論的體現(xiàn)。你知道這個(gè)吧—當(dāng)
你有個(gè)一個(gè)錘子,任何事看來(lái)都是釘子。這是一個(gè)隱喻:我們總是使用喜愛的工具,即使這工具對(duì)于手中的工作而言,它也許不是最適合的。數(shù)學(xué)就是我們的一個(gè)截
然相反的錘子。我們知道這個(gè)錘子的存在,但是不太知道如何使用它,所以,甚至當(dāng)我們遇見一個(gè)問題,而且我們的錘子可作為解決該問題的完美工具時(shí),我們卻從
未認(rèn)真考慮過它。螺絲刀對(duì)于我爺爺來(lái)說(shuō)足夠用了,對(duì)于我老爹來(lái)說(shuō)、對(duì)于我來(lái)說(shuō),這也足夠用了。誰(shuí)需要錘子啊?數(shù)學(xué)的把戲在于 -- 人們怕他 -- 甚至大多數(shù)程序員也是。你認(rèn)為我們不會(huì),但是我們的確是這樣的。因此,我們把我們的話轉(zhuǎn)變成自我應(yīng)驗(yàn)預(yù)言。并非我在工作中不需要數(shù)學(xué),即使我需要了我也真的不清楚,我不懂如何去運(yùn)用它。所以我設(shè)法不用它,當(dāng)你足夠長(zhǎng)時(shí)間湊合著不用它的時(shí)候,不久你就更察覺不到它的消逝,從而對(duì)它的需求更加變少 -- 這就是自我應(yīng)驗(yàn)預(yù)言。
這是讓我們靠近我們內(nèi)心去思考的精神食糧——學(xué)習(xí)新的技術(shù)。作為一個(gè)協(xié)作世界的開發(fā)者,你力求成為一個(gè)通才型專家(如果你不知道我在說(shuō)什么,就來(lái)看看這本書).你試著成為體面地處理大多數(shù)事情,能非常好地處理其中一些事情。但是你所精通的是什么呢?一般人選擇優(yōu)秀的、值得的一兩個(gè)框架或著一門編程語(yǔ)言,并且與其相伴。但是請(qǐng)考慮這個(gè)事實(shí),框架和較小范圍的語(yǔ)言也有限定的保質(zhì)期。如果你打算把職業(yè)生涯建立在成為一個(gè)Hibernate、 Rails、Struts專家的基礎(chǔ)上的話(Struts迷們現(xiàn)在真應(yīng)該擔(dān)心一下了?),當(dāng)有新框架取代當(dāng)前特性時(shí),你將不得不在短期幾年內(nèi)將一切沖洗和重復(fù)。所以,這應(yīng)該是你真正最好的投資
--也許吧,但是也有可能不是。另一方面數(shù)學(xué)它不會(huì)很快消逝。我們領(lǐng)域中的所有東西都是建立在堅(jiān)固的數(shù)學(xué)基礎(chǔ)之上(算法和數(shù)據(jù)結(jié)構(gòu)可以作為其中一個(gè)例子)。所以你在數(shù)學(xué)上花的時(shí)間可以說(shuō)是從未白費(fèi)的。再重復(fù)一次,結(jié)論就是
:與其死記硬背的使用某事,不如真正地去理解它 -- 當(dāng)涉及到計(jì)算機(jī)時(shí),數(shù)學(xué)能幫助你更深入地了解你做的任何事。事實(shí)上,Steve
Yegge說(shuō)過,我們作為程序員的所做為的很像在做數(shù)學(xué),我們甚至都不了解它。
怎樣/誰(shuí) 與眾不同?What/Who Makes A Difference

你不相信我?那請(qǐng)想想看:大部分在我們領(lǐng)域受到人人尊崇的卓越的程序員同樣也是卓越的數(shù)學(xué)家。我是在說(shuō)像Donald Knuth (大牛不解釋),Edsger
W. Dijkstra(大牛不解釋), Noam Chomsky(MIT教授,理論語(yǔ)言學(xué)大牛), Peter Norvig(Google研究主任,Jscheme創(chuàng)始人)這類人。但是這些家伙并非真正的開發(fā)者,他們是計(jì)算機(jī)科學(xué)家,這難道能真正的算數(shù)么?我又一次覺得,也許在我們寫出的純代碼行數(shù)能達(dá)到這些人所寫的十分之一之前,我們不應(yīng)該再去討論這些問題了。當(dāng)然,你不必成為一個(gè)科學(xué)家也能獲得成功和名譽(yù),每個(gè)人都聽過Gavin King(Hibernate創(chuàng)始人) 、DHH(Ruby on Rails創(chuàng)始人),這還挺實(shí)際的(盡管在其他圈子有沒有很多人聽說(shuō)過Gavin
和DHH這也是值得辯論的觀點(diǎn)),但是聽說(shuō)過和受到人人尊崇這是兩碼事,就如創(chuàng)建一個(gè)框架和為全人類的認(rèn)知作出深遠(yuǎn)推進(jìn)的差別一樣(不要誤解我,我尊重Gavin 和David,他們比我做了多得多的事,但是這不能影響我所說(shuō)的事實(shí))。所有的這些有意義么?我不知道,可能沒有,但是在反省以后我想無(wú)論如何要把它先扔掉。
這個(gè)世界正在被數(shù)據(jù)充滿,而且它將日益增長(zhǎng),而在此之前,我們可以享受地為相對(duì)少量的數(shù)據(jù)工作,但目前我們寫的軟件必須對(duì)巨量的數(shù)據(jù)集進(jìn)行高效地操作。甚至這在協(xié)作世界也是的確在增長(zhǎng)的。
其含義就是你可能將越來(lái)越少的能夠使事物停止運(yùn)轉(zhuǎn),去了解其如何運(yùn)作,除非你足夠聰明,你將處理的數(shù)據(jù)量會(huì)慢慢停下來(lái)。我的預(yù)測(cè)就是:算法分析將對(duì)于底層程序員越來(lái)越重要,這不僅僅在以前,更是在以后也如此。如果要成為一個(gè)體面的算法師你需要什么? -- 你猜到了,一些數(shù)學(xué)技能。
那么,我又該如何呢?好吧,我決定逐步地建立/喚醒我的數(shù)學(xué)能力,這里仍然有豐富的書籍需要閱讀、大量代碼需要編寫,但我會(huì)試著時(shí)常地投入一些自己的時(shí)間,因?yàn)榫拖皴憻捯粯樱瑫r(shí)常的一點(diǎn)練習(xí)聊勝于無(wú)。(再次引用Steve Yegge,墻內(nèi)看這里)。當(dāng)然談到數(shù)學(xué),我有一張袖中的王牌,對(duì)我而言很好,但很幸運(yùn)的是,也許通過這個(gè)博客我們都會(huì)受益(我知道你會(huì)好奇,我將馬上告訴你?)
接下來(lái)5年內(nèi)你的人生規(guī)劃Where Do You See Yourself In 5
Years

然后,所有這些所學(xué)對(duì)任何事都有益么?事先很難說(shuō)。我十分高興我當(dāng)前的處境,你應(yīng)該也一樣,但是一切皆有可能。到最后,如果你是一個(gè)協(xié)作世界里的開發(fā)者,你真的不需要任何數(shù)學(xué)。如果你樂意也可以這樣安排你的整個(gè)生涯:在工作時(shí)間做企業(yè)CRUD應(yīng)用程序,在業(yè)余時(shí)間搞搞滑翔飛行或者花樣滑水(或者當(dāng)前任何時(shí)髦的geek群體所著迷運(yùn)動(dòng)),然后當(dāng)然可以投入較多的時(shí)間在Spring 、
Hibernate、Visual Studio或者其它東西上面。其實(shí)做這種特定的工作并沒有真正限制你的潛力:你也能變得極有價(jià)值--甚至可以往更深入去嘗試。但是如果你為多樣化的職業(yè)生涯而奮斗,而且想有能試手于任何牽涉到代碼的事情的能力,從信息檢索到Linux內(nèi)核hacking。簡(jiǎn)而言之,如果你想成為一個(gè)由開發(fā)者、程序員和計(jì)算機(jī)科學(xué)家完美融合的人的話,你必須保證你的數(shù)學(xué)技能情況良好(該死,如果你真的喜歡的話,你還是能繼續(xù)搞滑翔飛行或者花樣滑水),長(zhǎng)話短說(shuō),如果你神入地體驗(yàn)過數(shù)學(xué),那么軟件開發(fā)領(lǐng)域所有大門都會(huì)向你敞開,如果你沒有如此體驗(yàn)過數(shù)學(xué)的話 –- 那么你所做一切都將是CRUD的工作(雙關(guān)語(yǔ),CRUD也有污垢、雜質(zhì)之意)。

by XGuru
is licensed under a Creative Commons 署名-非商業(yè)性使用-相同方式共享 2.5 中國(guó)大陸 License. 原文請(qǐng)看這里[You Don’t Need Math Skills To Be A Good Developer But You Do Need Them To
Be A Great One]