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

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

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

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