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