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

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

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

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