要成為JAVA程序員,用三個月的時間.
要成為J2EE高手,用一年的時間.
要成為JAVA技術應用專家,用三年的時間,其中兩年去學習C/C++
現在我再次想說這樣的話,如果你從來沒有學過C/C++,那么我說一個JAVA技術,你可能永遠也不可能真正的理解它的真正的意義:
方法參數中JAVA的對象是如何傳遞的?
真實的情況是傳遞"引用的值",如果你不了解C/C++,你是無法理解這句話的.你只能看別人的書上說什么你就記得什么,而實際如何,你根本不懂.
這就是為什么要理解底層架構,協議.不了解你可能在一個公司混得很好,一個學習三個月JSP的人混一個工作是完全可以的,整天做一些ctrl+c,ctrl+v的工作,可以滿足一般的"開發",但你永遠不會成為了一軟件架構師,你無法知道100萬用戶和30用戶的應用之間如何設計不同的架構,你會以為在你的PC機上寫出一個BBS DEMO就可以拿去支持100萬用戶的應用.
記得有一句話叫"把一件事做到極致",從一個JAVA程序員,到現在寫作業系統引導程序和驅動程序,我并不會做和個方面的開發工作,但我覺得這是必須的.只有了解每個bit的產生源泉,你才能對你的應用有100%的把握.
一個真正的軟件人,不在于你掌握了什么技術,而在于你對軟件的認識,和認識過程.
我把認識過程作為軟件認識或者叫軟件知識的一部份.是以我的經驗來說,認識過程是一個非常重要的部分,或許它比軟件知識更重要.一個軟件人對軟件認識的過程,主要反映在兩個方面:
認識軟件知識體系的方法.
認識軟件知識體系的態度.
方法因人而異,合適你的方法就是最好的方法.而我有我自己的學習方法.書(15%)+狗哥(35%)+運行(50%),以我現在的水平,看一本專業的技術書,我仍然會把書中的內容在機器上運行以得到驗證.并以此加深記憶,而不是象很多高手那樣一周或十幾天就能看完<<thinking in java>>那樣厚的書(這里只是用它來比較厚度,不是為了推薦它).說實話我沒有這種能力.而且,任何技術方面的書中如果有光盤,我首先會扔了它(當然以后可能會從某一地方找到),因為我需要從鍵盤上輸入我想要驗證的內容.
而"運行"并不是把書籍提供給你的例程運行一次,那需要對所能考慮到的所以情況反復測試,比如一個API,不同參數,不同環境,以及不同運行次數的性能,在多線程中的安全性和可并發性等等.
我的學習方法很笨,就是大量的上機實踐.
對于學習的態度,這一點猶其重要.好學不叫學習態度,為了很多理由,我們都需要學習,誰都能做到.但是如何學習,學什么,真正能反映一個人的學習態度.
按你的計劃,根據你的需要而學習,而不是流行什么就學習什么.這一點說起來輕松,可很少人做到.
我是完全從面象對象開始接觸程序的.當我還不知道什么叫程序的時候,我聽到有一種東西叫JAVA,然后我認識了它.當我用它寫出一個還算可以的應用時,我認識到我需要深入到它的底層,我要了解JVM,然后我知道我的知識需要向底層遞歸,然后我從最最基礎開始,數邏,作業系統,數據結構,編譯原理,匯編,C/C++等這些看似無關的知識把我對JAVA的理解推向了一個超越的層次.今天,我仍然說我是一個JAVA程序員,我以它入門,又以它最擅長.但我更要說,沒有匯編,C/C++這些基礎,我不會成為一個真正的JAVA程序員.也不會讓我輕松地成為一個C#程序員.所以基礎的東西還是很重要的。
學習態度的另一個方面是敢于求真的勇氣,在意別人不屑的東西.這一點以后再詳說.
我相信你有興趣看這個欄目,就應該有能力判斷,什么是永恒的,什么是瞬夕的.當然你也不會因為我的幾句話而改變你.我甚至不愿意對你有什么影響,即使我的觀點是唯一正確的,我也無法證明它是正確的,何況它并不一定就是正確的!因為我的思想也在發展.