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