每個(gè)計(jì)算機(jī)系畢業(yè)的人,大都學(xué)過(guò)不少數(shù)學(xué)課,而且不少學(xué)校的計(jì)算機(jī)系的數(shù)學(xué)課,通常比一般的其他工科專業(yè)的數(shù)學(xué)要難一些,比如不上高等數(shù)學(xué),而是學(xué)數(shù)學(xué)分析,不上線性代數(shù)而去上高等代數(shù)。但是,大部分畢業(yè)了后去做程序員的人,即使是所謂的名校計(jì)算機(jī)系畢業(yè)的,大都工作中也基本完全用不上學(xué)的那些數(shù)學(xué),基本上,一半時(shí)間在CRUD,另一半時(shí)間在處理各類字符串、鏈表、Hash表,知道在面試中回答各種排序的時(shí)間復(fù)雜度是他們需要的數(shù)學(xué)的上線了。
而在念書(shū)的時(shí)候,雖然上大學(xué)之前,有不少內(nèi)行的外行的,年老的年輕的人告訴你,數(shù)學(xué)很重要啊。但是,通常來(lái)說(shuō),各個(gè)學(xué)校的計(jì)算機(jī)系的同學(xué)么,愛(ài)好學(xué)習(xí)的,可能重視的也是Thinking in Java,C++ Primer之類的語(yǔ)言書(shū),或者設(shè)計(jì)模式之類的架構(gòu)書(shū),抑或是算法與數(shù)據(jù)結(jié)構(gòu)這些玩意兒;而像我這樣天天偷懶放羊的,也不會(huì)把數(shù)學(xué)當(dāng)作是什么重要的課程好好學(xué)習(xí)。所以,“數(shù)學(xué)真重要”,這句話,似乎對(duì)于大家來(lái)說(shuō),始終只是飄在天上的一句話,隨風(fēng)飄逝了。
于是,五年過(guò)去了,程序員們都有了不少的工作經(jīng)驗(yàn)了,如果不是對(duì)工作毫無(wú)追求混吃等死的程序員的話,對(duì)于天天干活的語(yǔ)言,不論是Java還是C++應(yīng)該都熟能生巧了,所謂的設(shè)計(jì)模式、重構(gòu)、自動(dòng)化測(cè)試等等也手到擒來(lái)了,大部分人的title上都加上了Senior了,牛一點(diǎn)的后面大概還跟上了一個(gè)Manager,然而,大家都開(kāi)始考慮一個(gè)新的問(wèn)題——“30歲以后怎么半?”,于是,轉(zhuǎn)PM的轉(zhuǎn)PM,考公務(wù)員的考公務(wù)員,像我這樣仍然抱定——“你看人家美國(guó)Rohit都50了還不是天天寫(xiě)程序,別人想請(qǐng)還請(qǐng)不到的”的單純想法的人越來(lái)越少了。然后,就算這些人,時(shí)不時(shí)也會(huì)覺(jué)得,自己天天干的超越CRUD的,所謂寫(xiě)點(diǎn)OO的框架,不也是很無(wú)聊的體力活么,寫(xiě)程序的人干兩年誰(shuí)都會(huì)干。于是,又有不少人下海創(chuàng)業(yè)了,多年以后,這些人中的大部分都會(huì)和我一樣悲催的沒(méi)有掙到前繼續(xù)回來(lái)給大大小小的公司寫(xiě)程序。
其實(shí),杯具往往發(fā)生在一開(kāi)始,其實(shí),要是咱們當(dāng)年好好學(xué)習(xí),才會(huì)發(fā)現(xiàn),也許數(shù)學(xué)對(duì)于你當(dāng)個(gè)不錯(cuò)的程序員來(lái)說(shuō),沒(méi)那么重要,但是要再往上走一步,有一點(diǎn)點(diǎn)技術(shù)上的創(chuàng)新,就都是數(shù)學(xué)的事兒了。兩年前,我在T公司,用Configurator處理某個(gè)程序的時(shí)候,開(kāi)始有點(diǎn)兒意識(shí)到這一點(diǎn)了,于是,那陣子還花了不少時(shí)間重新翻了翻數(shù)理邏輯。今年,換了新工作后為了工作看點(diǎn)兒機(jī)器學(xué)習(xí)的東西的時(shí)候,終于發(fā)現(xiàn),這全都是數(shù)學(xué)啊。當(dāng)你要超越CRUD,做任何一點(diǎn)點(diǎn)有創(chuàng)新性的技術(shù)的時(shí)候(不說(shuō)產(chǎn)品),最有機(jī)會(huì)遇到的問(wèn)題,其實(shí)是數(shù)學(xué)問(wèn)題。雖然從Spring到Hibernate到Rails之類的框架,或者Hadoop,HBase之類的分布式計(jì)算框架,也都是技術(shù)上的重大革新,但是這些框架類的程序,完善都是階段性的,一旦出現(xiàn)后,很快都會(huì)有相應(yīng)的Best Practice,又會(huì)成為熟練工種的活。而真正針對(duì)問(wèn)題域的解答,反是每天都可以有些新鮮的想法、思路和方案的,這些,往往有個(gè)數(shù)學(xué)的門檻。所以如果你真是挺喜歡寫(xiě)程序的,而且希望自己一直能寫(xiě)更好玩更難的程序,總有一天,你要過(guò)了這一道坎兒。
所以我很是同意不知道是誰(shuí)說(shuō)得,如果你只想當(dāng)個(gè)good programmer,那么數(shù)學(xué)不重要。但是如果你想當(dāng)個(gè)great programmer,那么數(shù)學(xué)很重要。在你手里只有錘子的時(shí)候,你看什么東西都會(huì)是個(gè)釘子,想想你如果沒(méi)有學(xué)過(guò)算法和數(shù)據(jù)結(jié)構(gòu),可能你的大部分程序需要自己寫(xiě)排序的話,都會(huì)是傻傻地冒泡吧,反正對(duì)于大部分程序來(lái)說(shuō),在現(xiàn)在這么快的PC下,這點(diǎn)時(shí)間差別,大部分情況下,也就是讓你等程序執(zhí)行測(cè)試的時(shí)候,多個(gè)倒杯水的時(shí)間。但是很多新鮮,好玩,有挑戰(zhàn)的問(wèn)題,很多數(shù)學(xué)的概念沒(méi)有的話,恐怕不是多等個(gè)倒水的時(shí)間了。而如果你過(guò)了這個(gè)門檻,你又會(huì)發(fā)現(xiàn),一個(gè)嶄新的世界,又到了你的面前。
回過(guò)頭來(lái),我說(shuō)數(shù)學(xué)重要的話,那么重要的是哪些呢?大家常說(shuō)的通常是離散數(shù)學(xué),不過(guò)最近比較熱門的機(jī)器學(xué)習(xí)這個(gè)方向,我目前看到的相關(guān)資料都大量依賴于線性代數(shù)和概率論,以及一點(diǎn)點(diǎn)微積分。所以,如果你和我一樣,希望做點(diǎn)有追求的技術(shù)工作的話,開(kāi)始花點(diǎn)時(shí)間學(xué)習(xí)數(shù)學(xué)吧。其實(shí)萬(wàn)事開(kāi)頭難,也許你和我一樣,對(duì)著一堆公式符號(hào),感到頭暈眼花,但是如果真得按下心來(lái),看上一個(gè)小時(shí),這么堅(jiān)持個(gè)一周,其實(shí)就會(huì)發(fā)現(xiàn),這沒(méi)啥難的,就當(dāng)學(xué)門新的編程語(yǔ)言得了。
posted on 2011-03-13 08:40
鵬凌 閱讀(444)
評(píng)論(1) 編輯 收藏 所屬分類:
java