Java用來解決業(yè)務(wù)問題,實現(xiàn)商業(yè)價值。我們工作的過程,總會接觸并接受一些領(lǐng)域知識。領(lǐng)域知識往往很復(fù)雜,有時真要學(xué)好一門領(lǐng)域知識比駕馭一種編程語言要花更多精力。這就是為什么業(yè)務(wù)專家總是身價很高,掌握領(lǐng)域知識的門檻本來就不低。深刻理解領(lǐng)域知識有利于設(shè)計并實現(xiàn)程序。這個道理很簡單 —— 我們通過java抽象領(lǐng)域?qū)ο螅绻麤]有對領(lǐng)域的深刻理解,怎么能分得清應(yīng)該有哪些domain object,它們的behaviour應(yīng)該是什么?寫程序時盡量做簡單又靈活的設(shè)計。“簡單”和“靈活”本來就有一定程度的矛盾,不理解領(lǐng)域知識就沒法預(yù)見潛在的擴展點,容易設(shè)計不足; 處處盲目預(yù)留各種各樣的擴展點實際上就是過度設(shè)計。所以好的程序設(shè)計不光需要懂得分層, ooad,pattern, strategy, bo,vo,dto…還必然要基于對業(yè)務(wù)知識的深刻理解。Domain Driven Design的思想也非常強調(diào)程序員對領(lǐng)域知識的學(xué)習(xí)。一個不可回避的問題是,新學(xué)一門領(lǐng)域知識,很難一下把握清楚,1月份對某個概念有了一定理解,5月份時發(fā)現(xiàn)當(dāng)初自以為理解清楚了,其實有偏差,那么這四個月里寫的程序可能根本就基于錯誤的assumption, 很多設(shè)計和實現(xiàn)又要推倒重做。所以比較理想的情況是,程序員就專門深入研究某一個領(lǐng)域,從此就混跡這一個領(lǐng)域。表面上這樣限制了程序員混飯吃的門路,實際上只有這樣才有利于在技術(shù)上有更深層的修為。當(dāng)然一些技術(shù)天才走的是另一條路,Rod Johnson,Gavin King他們能做出來影響深遠的framework,萬人景仰,那靠的是純粹的對技術(shù)的深刻理解,還要耐得住性子strive for the goal把想法實現(xiàn)出來。有這種天賦的人去搞物理,生物,化學(xué)也能很成功,還能得諾貝爾獎呢。
那么接下來要要解決的問題是,怎么選擇一個好的方向去學(xué)習(xí)領(lǐng)域知識。gartner之類的時常搞一些這方面的調(diào)研,比如十大有前景IT技術(shù)之類的。他們預(yù)測的未必準,但是讀一讀這方面的資料你自己也能感受到什么方向至少能長期混口飯吃。我直到最近才開始投入學(xué)習(xí)領(lǐng)域知識,商業(yè)智能是個很合適的方向。
商業(yè)智能就是Business Intelligence, 簡稱BI,只是這個縮寫容易被當(dāng)作關(guān)鍵詞給過濾掉,所以這篇文字的標題仍然寫全稱。
信息爆炸會越來越嚴重,以后必然是數(shù)據(jù)的社會,BI可以從海量數(shù)據(jù)中獲取價值,這會是一個相對常青的行業(yè)。更現(xiàn)實的是,我正好在做BI的公司工作,可以很方便地接觸到相關(guān)軟件,身邊也有這方面的高手可以提供指導(dǎo)。看到人家如何分析問題,建立模型解決問題,就有種強烈的感覺:這才是能賺錢的本領(lǐng)。
BI的基礎(chǔ)是統(tǒng)計和數(shù)學(xué)分析,公司里不少人是學(xué)統(tǒng)計出身的,連CEO也是。咱程序員多數(shù)在學(xué)校里學(xué)的是計算機,這方面比不上統(tǒng)計專業(yè)的人, 算是先天不足。但是我簡單地算了一下帳,發(fā)現(xiàn)這種不足不難后天補齊。如果初級目標是趕上統(tǒng)計專業(yè)的本科生,據(jù)推斷,統(tǒng)計專業(yè)的人第一年不可能學(xué)上統(tǒng)計學(xué),因為高等數(shù)學(xué)是統(tǒng)計學(xué)的基礎(chǔ),統(tǒng)計學(xué)中講分布函數(shù)和分布密度需要用到微積分,極大似然函數(shù)也要用到微積分,所以計算機專業(yè)的和統(tǒng)計專業(yè)的第一年沒啥差距。而我們在學(xué)校也學(xué)過統(tǒng)計課,那么我們和統(tǒng)計專業(yè)的差距主要集中在大二下學(xué)期之后的時間,大四通常沒啥重要的課可以講,咱們跟統(tǒng)計專業(yè)的也就差一年多的學(xué)習(xí)課程,這里還包括很大一部分馬克思主義哲學(xué)之類無關(guān)的課,所以如果咱們勤奮一點,追齊統(tǒng)計專業(yè)的本科生只需要大約一年的時間,也許還可以更短。
大學(xué)學(xué)的微積分,線性代數(shù)和統(tǒng)計學(xué)早就還給老師了,首先要復(fù)習(xí)一下這方面的東西。前段時間剛復(fù)習(xí)完微積分,統(tǒng)計學(xué)和一半兒線性代數(shù)。分享一下資源:
微積分之倚天劍 屠龍刀: http://ishare.iask.sina.com.cn/f/6933932.html
線性代數(shù)和概率統(tǒng)計: http://202.113.29.3/~gdsxjxb/wlkj/windows/artsmath/main/index2.htm
統(tǒng)計: http://ishare.iask.sina.com.cn/f/5773491.html
接下來還要掌握data mining的過程和方法,這個可以沿著SAS的semma理論學(xué)習(xí),sample, explore, modify, model, assess。每個方面都大有學(xué)問。還需要學(xué)會使用相關(guān)的工具,比如enterprise miner. 正在學(xué)習(xí)SAS編程。最后要跟定某個金錢無數(shù)的行業(yè)繼續(xù)深入學(xué)習(xí),比如銀行業(yè)。
學(xué)這些不是為了轉(zhuǎn)行搶業(yè)務(wù)專家的飯碗,那太難了,畢竟沒有合適的環(huán)境。已經(jīng)在Java上投入很多精力和時間,好不容易積累一些技術(shù)實力,Java仍然是闖蕩江湖的一項資本,目標是做BI方面產(chǎn)品的架構(gòu)師,遇到合適的位置,就無可替代。與各位同行共勉!