大約就是在去年的這個(gè)時(shí)候吧,Java這個(gè)字眼就開始占據(jù)了我學(xué)習(xí)計(jì)劃中的重要席位,從那時(shí)候那杯冒熱氣的咖啡一直陪伴我到今天。也不知道當(dāng)時(shí)為什么要學(xué)習(xí)Java,又是為什么選擇了Java。因?yàn)槲矣浀卯?dāng)時(shí)的我,心中所想和現(xiàn)在可謂是大相徑庭!那時(shí)我曾天真的想著,我將來學(xué)管理,你們這些學(xué)計(jì)算機(jī)的人出來也難逃給管理界人士做下屬的命運(yùn),現(xiàn)在想來,那時(shí)是多么的無知和幼稚,我怕現(xiàn)在的很多大學(xué)生,更確切的說很多像我們專業(yè)——信息管理與信息系統(tǒng)的同學(xué)都還抱著這樣的想法(當(dāng)然也不排除很多立志學(xué)習(xí)金融以及管理的同學(xué)^_^)! 其實(shí)在蔡學(xué)鏞先生的Sleepless in Java中也就說過,他在上大學(xué)的時(shí)候,有兩類同學(xué)錯(cuò)誤的認(rèn)識,第一種就是瞧不起基礎(chǔ)課,覺得學(xué)的什么Data Structure,Operating System,Database Concepts沒用,以為會VC,VB,SQL Server的就真的能成為眾人羨慕的IT白領(lǐng)了;第二種也就是我剛才所說自己犯的錯(cuò)誤,真以為那些寫程序的人將來入了社會會被那些學(xué)管理的人踩在腳下!第一種是短視進(jìn)利,第二種呢就是好高騖遠(yuǎn)!在犯了第二種錯(cuò)誤后,值得慶幸的是,我對第一種錯(cuò)誤總是避而遠(yuǎn)之! 記得我在網(wǎng)上搜索了很多資料,最后終于鎖定兩本書作為我的入門教材的入選書籍,一本是《Core Java》,另一本就是《Thinking in Java》了。但是因?yàn)楫?dāng)時(shí)網(wǎng)上說《TIJ》中文版翻譯的不盡如人意,于是我就選擇了《Core Java》,現(xiàn)在真覺得當(dāng)時(shí)選擇是對的,就我那會的基礎(chǔ)根本看不懂TIJ,而《Core Java》是屬于教科書風(fēng)格的書,于當(dāng)時(shí)的我比較適合。隨著我翻開《Core Java》的第一頁,我就正式踏上了Java之路! 當(dāng)初我在剛學(xué)習(xí)Java的時(shí)候,我無論對Java還是程序設(shè)計(jì)都是不折不扣的門外漢,我看《Core Java》第一章的時(shí)候完全是如履薄冰,一大堆技術(shù)名詞搞得我暈頭轉(zhuǎn)向的,什么分布式,多線程,GC…,雖然現(xiàn)在看來是非常自然而順暢的,但在當(dāng)時(shí)可以說是我前面的一座高山,其實(shí),那些技術(shù)名詞根本不用看,慢慢的學(xué),學(xué)的那兒自然就不言而喻了!現(xiàn)在看CSDN上初學(xué)者恨不得一開始就把所有的名詞全部搞懂,從J2EE,J2ME,EJB,JMS,CORBA,JXTA…..就我覺得,這些都是圖增煩惱,而且根本對真正的初學(xué)者即使你知道你也無法理解。緊接著,喜馬拉雅到了,設(shè)置環(huán)境變量,classpath的設(shè)置是我當(dāng)時(shí)最感郁悶的東西,相信現(xiàn)在的初學(xué)者對于此道還是一樣的,確實(shí)還是Microsoft的東西比較好用^_^,門檻很低,不至于嚇退初學(xué)者!你要知道,一個(gè)沒有path概念也沒有UNIX背景的初學(xué)者要設(shè)置以及弄明白為什么這么設(shè)置真不是一件容易的事,而且主要是書上說的很模糊,而且當(dāng)初我學(xué)習(xí)的時(shí)候環(huán)境并不好,因?yàn)槲抑車耐瑢W(xué)并沒有學(xué)習(xí)Java的,我無處可問,慘啊……!我雖注冊了一個(gè)CSDN的賬號,可是很少上論壇,現(xiàn)在想來,如果當(dāng)時(shí)能夠好好利用CSDN的資源,也不用走這么多彎路了!也不知道當(dāng)時(shí)在什么地方找到這個(gè)配置方法,終于解了我的燃眉之急。隨后又聽說JCreator是比較好用的IDE,下載了一個(gè)2.5版的,用了過后發(fā)現(xiàn)果然不錯(cuò),至少不用每次都用console來編譯運(yùn)行,翻過這個(gè)classpath這個(gè)攔路虎過后,此后的平原就比較開闊了,但當(dāng)時(shí)只是感覺上好像自己學(xué)習(xí)的比較輕松,其實(shí)有很多東西沒有學(xué)扎實(shí),以為自己懂了!打個(gè)比方吧,我直到快學(xué)完《Core Java》第一本書的時(shí)候我才在《Java in a nutshell》上面知道什么是class method,什么是instance method! 因?yàn)槲覜]有什么C++基礎(chǔ)也更談不上什么Lisp,Smalltalk背景,所以《CoreJava》的tips或者要求C++程序員注意的一些pitfalls,我都跳過沒讀,不過就我現(xiàn)在的C++水平來看那本書,如果利用這些annotate對于一個(gè)從CPP轉(zhuǎn)到Java陣營的Programmer來說是非常有幫助的。 2003年的寒假《Core Java》的第一本就伴隨我度過了一個(gè)懵懂的春節(jié),當(dāng)然這段時(shí)間《程序員合訂本》對我的幫助是很大的,不僅在技術(shù)上教會了我許多東西而且也使我得知識面拓寬了不少!在寒假的時(shí)候我在網(wǎng)上固定的生活方式就形成,每天一打開Browser,首先打開CSDN然后打開Sina,CSDN的論壇也成了我經(jīng)常光顧的地方,當(dāng)時(shí)看著CSDN Java板塊的那些牛人紅星閃爍的,覺得特別羨慕!于是我也開始回答問題以掙取專家分,不過就那會我的知識實(shí)在太過匱乏,混了整整一個(gè)寒假,也就到了三個(gè)褲衩^_^,不過也在CSDN學(xué)到了很多東西!那段時(shí)間雖然進(jìn)步不大,不過卻是很值得懷念的!在假期中我還學(xué)過一點(diǎn)的JSP/Servlet,不過,沒有深入的學(xué)習(xí),而且對web application的理解也很浮淺,所以學(xué)了等于沒學(xué)!給我印象最深的就是Tomcat運(yùn)行Servlet的配置了,那個(gè)其實(shí)就很簡單的web.xml文件,真不明白當(dāng)時(shí)怎么搞了差不多一天才出來,急的在CSDN上面連連發(fā)帖子問… 看完《程序員合訂本》,我基本對Java領(lǐng)域的好書有了一些了解,隨后我知道了china-pub,知道以后買書之前要上那兒去轉(zhuǎn)轉(zhuǎn),看看書評。再回學(xué)校之前,我列出了要買的一些書的清單,費(fèi)用差不多到500RMB了。從家里一回學(xué)校,那500元也就眾望所歸的換成了N斤的質(zhì)量良莠不齊的紙張了,這些紙張還真不能對等成知識!我記得那次書籍大采購中有用的書就只有這幾本《Java in a nutshell》,《Effective Java》,《Thinking in Java》(E),《Java與模式》(在我看《Design Pattern》以前:)),《A breif introdution to Data Structure and Algorithm Java Edition》,《Core Java:VolumnII:Advanced Feature》!其他的么,唉,可惜啊…… 隨著大三上學(xué)期的開始,也就開始了DS的學(xué)習(xí),我使用的教材就是上面提到的那本書,對基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)和算法的學(xué)習(xí)讓我也慢慢重新開始認(rèn)識程序設(shè)計(jì)認(rèn)識Java,我記得夢魘先生在合訂本中給《The STL Annotated Source》寫推薦的時(shí)候說過:作為一個(gè)程序員,如果你是做數(shù)據(jù)庫編程的,大可以不懂匯編語言,如果你是寫驅(qū)動程序的,大可以不必通曉人工智能,寫編譯器的可以不用懂什么計(jì)算機(jī)圖形學(xué),操作系統(tǒng)內(nèi)核高手的不用精通網(wǎng)站架設(shè),然而,如果你不懂?dāng)?shù)據(jù)結(jié)構(gòu)與算法的基礎(chǔ)知識,不具備數(shù)據(jù)結(jié)構(gòu)與算法的基本技能,那就完全喪失稱為一個(gè)程序員的資格!這就足以說明DS的重要性! 看著CSDN上面蔡學(xué)鏞老師的專欄,也在一期一期的程序員中看著他的文章,特別是有一篇叫做《我所知到的O’Reilly》,慢慢我對O’Reilly的書籍的感情與日俱增,O’Reilly的網(wǎng)站也成了我經(jīng)常出沒的地方了,那段時(shí)間我買了不少O’Reilly的書,因?yàn)镺’Reilly俱樂部有會員的活動,好像是積分多少可以免費(fèi)送一本50或者60以下的書,主要是這幾個(gè)價(jià)格是O’Reilly的中文本比較喜歡訂的價(jià)格,49,59,69,75,85….當(dāng)時(shí)我好像一共買了6本,關(guān)于Java方面我覺得比較好的就是一本同樣是David Flanagan寫的《Java Example in a NutShell》,另一本就是《Java Cookbook》!隨后有資格獲得一本60元以下的書籍,后來我千調(diào)萬選選了一本《DNS與BIND》(3E)(其實(shí)我拿這些書根本就沒用:)) 59元,O’Reilly的工作人員非常熱心,首先告訴我則本書已經(jīng)出到第四版了,但我告訴他我贈書的上限只能到60而則本書要69的時(shí)候,他告訴我一樣可以贈給我,當(dāng)時(shí)可把我感動死了!^_^隨著我看的O’Reilly的書籍不斷增多,我看O’Reilly的書也形成了一個(gè)獨(dú)特的看法,沒拿著一本O’Reilly的書籍,我一般是看封底的介紹,介紹則本書的內(nèi)容以及一些權(quán)威人士對這本書的評價(jià),大家都知道,O’Reilly的書籍封面都是一只動物, Java系列的代言人是Tiger,而且Java系列的書都是紫色的!隨后我會翻到最后幾頁看封面的動物是什么,然后看作者的介紹,最后才開始進(jìn)入正文!那段時(shí)間也就形成了一種特殊的O’Reilly情節(jié)! 大家都知道,O’Reilly的In a nutshell series一向是品質(zhì)的代名詞,剛開始看的時(shí)候我實(shí)在困惑為什么O’Reilly要用XXX in a Nutshell命名,后來有一個(gè)躺床上午休的時(shí)候突然想起以前高中的時(shí)候看過Steven Hawkings的一本書叫做《Universe in a nutshell》(果殼中的宇宙),就連Universe都in a Nutshell更何況其他東西呢,所以技術(shù)手冊包涵范圍之廣,知識之全,可以說是可見一斑! 上半年剛開學(xué)的時(shí)候,我就以為自己對于《Core Java:VolumnI》已經(jīng)理解透徹了,然后就開始看VolumnII了,而且在同時(shí)還在看《Thinking in Java》(E)為了進(jìn)一步鞏固基礎(chǔ),不過在此之前我大致看了一下《Java in a NutShell》,也從前面的介紹中學(xué)到了很多我漏網(wǎng)的知識,就像上面所說的class method和instance method,還有對Java這個(gè)paltform也有了一些理解。不過開始讀VolumnII的時(shí)候,第一章就把我絆倒了,線程?什么東西,因?yàn)楫?dāng)時(shí)沒有學(xué)習(xí)OS,所以要理解線程的概念以及理解線程同步太過困難了,而且其中夾雜了一些AWT和Swing的一些應(yīng)用,因?yàn)槲以趯W(xué)習(xí)VolumnI的時(shí)候?qū)τ贕UI就不太重視,覺得GUI既浪費(fèi)時(shí)間而且也學(xué)不到太多東西,而且還比較麻煩,對于GUI的觀點(diǎn)我一直持續(xù)到現(xiàn)在,唯一不同的只是現(xiàn)在認(rèn)為Java的Swing是學(xué)習(xí)Design Pattern的很好的例子! 慢慢在學(xué)習(xí)VolumnII過程中,我愈發(fā)的感覺到基礎(chǔ)的薄弱,于是我又拿起VolumnI,復(fù)習(xí)了一遍,發(fā)現(xiàn)又有新的收獲,我學(xué)習(xí)就這樣,我只要學(xué)習(xí)偶有所得便喜不自禁的^_^,如今我同樣不定期的復(fù)習(xí)以前看過的書籍,以尋求新的收獲。同時(shí)我也開始了《Thinking in Java》的學(xué)習(xí),我以為,我已經(jīng)看過《Core Java》的VolumnI了,按道理讀《TIJ》應(yīng)該是輕車熟路,應(yīng)該沒什么問題,但當(dāng)我開始翻開第一章開始看的時(shí)候,又給了我當(dāng)頭一棒,看不懂,特別是后面那些關(guān)于Software Engineering的東西,不過到現(xiàn)在我還不怎么了解后面的東西:) 所以我覺得初學(xué)者讀這本書的時(shí)候第一章根本就應(yīng)該跳過,不然就是給自己找罪受,我依然記得看不懂書那郁悶的心情,不僅這個(gè)心情影響你其他的學(xué)習(xí),還打擊你學(xué)習(xí)Java的積極性!而且由于我看的是E文的,有些意思還是把握的不太準(zhǔn)確,所以我就借了一本同學(xué)的中文版的《TIJ》,(他是在我的鼓動下買的這本書:)),而我那本E文的也就沒怎么看了!這本書就是候捷老師翻譯的了,說著候老師翻譯的書籍,我又不得不發(fā)一些牢騷了,現(xiàn)在我看技術(shù)書籍,慢慢的就習(xí)慣了網(wǎng)上所謂的候捷風(fēng)格,不過這種風(fēng)格我甚是喜歡。 第一,字體排版都讓人看著很舒服,而且行與行之間的間隔,還有正文與書邊的間隔都是恰到好處,很多書排版的滿滿的,看似節(jié)約紙張,但是給學(xué)習(xí)帶來了很大的不便,“為智者所不取”^_^,比如我現(xiàn)在正在看的那本《Inside JVM》的間距就非常小,寫個(gè)旁批都寫不下。第二,就是翻譯了,翻譯的學(xué)問就大了,國內(nèi)很多的技術(shù)書籍都翻譯的還是中規(guī)中具的,并沒有從語言上潤什么色,這種書即使內(nèi)容很吸引你,但是不算是你能夠品味的好書,對于這種書,你只有從原著中找到樂趣拉!比如前段時(shí)間我看的那本《Mastering EJB》的中文版….,候老師的書的語言功底我是非常認(rèn)可的。然后就是翻譯到個(gè)什么度最好,又很多技術(shù)書的譯者恨不得把每一個(gè)詞都翻譯的滴水不漏,我個(gè)人認(rèn)為是過猶不及,保留原有的技術(shù)名詞無論對你以后閱讀英文書刊,閱讀Specification,還是理解原書的意思都是非常有幫助的!我認(rèn)為就應(yīng)該像候老師的書中所保留的那些比如stack,heap,interface,polymorphism,inheritance,reference,primitive這些東西一看你就知道是什么東西,大腦中也就不需要進(jìn)行第二次的轉(zhuǎn)換,無疑使你接受信息的速度變快了!這種例子在國內(nèi)的翻譯書籍中很普遍,比如在我年底開始學(xué)習(xí)C++所買的第一本書《The C++ Programming Language》這本書是北大的裘宗燕老師翻譯的,當(dāng)然這本書翻譯的是沒有什么問題的,不過正如我前面所說的,這本書翻譯的過多了,比如剛開始我看到界面這個(gè)詞,我一愣,隨后才反應(yīng)過來,原來說得是interface,再比如后面我看到在線函數(shù),我又是一陣迷惑后才知道原來說得就是inline function!在《Inside JVM》中也是如此,第一次看到內(nèi)嵌函數(shù),直到后面解釋才知道還是剛才說得那個(gè)冬冬! 關(guān)于書的牢騷發(fā)完了,又回到TIJ吧,從第二章開始學(xué)習(xí)的TIJ教會了我很多東西,特別是第四章的Initialization and Clean up,補(bǔ)了很多我在學(xué)習(xí)《Core Java》中留下的漏洞!所以說這本書是Java領(lǐng)域的一本圣經(jīng)級的著作一點(diǎn)都不過分!這一學(xué)期伴隨著SARS,伴隨著《TIJ》,《Core Java》,《A breif introdution to Data Structure and Algorithm Java Edition》,我的大三上學(xué)期就度過了,其實(shí)上學(xué)期主要就是加深J2SE基礎(chǔ)的學(xué)習(xí),而且主要的精力放在DS上面,當(dāng)然還伴隨的一期一期的《Programmer》:),其實(shí)在其中我還穿插著一些JSP的學(xué)習(xí),我選的當(dāng)然也是O’Reilly的《Java Server Pages》,其實(shí)這本書有些年代久遠(yuǎn)了,不過講原理性的東西還是不錯(cuò),但是我還是覺得當(dāng)時(shí)用這本書根本沒有學(xué)到些什么東西。因?yàn)闊o論要學(xué)習(xí)JSP還是了解初步的J2EE構(gòu)架,還是得把J2SE牢固,把io,net,util弄的非常熟悉,然后再Servlet,JSP的一步一步的學(xué)上去! 在放暑假之前,我又去買了好幾本書,《Java Network Programming》(看過Bruce Eckel的推薦過后^_^),《Java Servlet》,《Java夜未眠》還有《Borland傳奇》隨后把這個(gè)暑假的學(xué)習(xí)定了一個(gè)計(jì)劃:繼續(xù)學(xué)習(xí)《Core Java》VolumnII,學(xué)習(xí)《Java Network Programming》,《Java Servlet》,《Java CookBook》以及再次復(fù)習(xí)《Thinking in Java》(E)。學(xué)習(xí)《Core Java》VolumnII是為了學(xué)習(xí)一些高級應(yīng)用,不過這本書的學(xué)習(xí)再次止步于高級AWT和高級Swing那兒,我對GUI的確沒什么興趣。學(xué)習(xí)《Java Network Programming》是為了學(xué)習(xí)Java中最為重點(diǎn)的網(wǎng)絡(luò)編程,并且為J2EE打基礎(chǔ),學(xué)習(xí)《Java Servlet》就更不用說了,也是為了跨向J2EE平臺做準(zhǔn)備;學(xué)習(xí)《Java Cookbook》的目的很簡單,就多看實(shí)例,知道處理一些常見問題的方法;復(fù)習(xí)《TIJ》就是為了進(jìn)一步的鞏固基礎(chǔ)!經(jīng)過那個(gè)學(xué)期我就形成了一種觀點(diǎn),基礎(chǔ)永遠(yuǎn)是最重要的,只要把基礎(chǔ)學(xué)習(xí)扎實(shí)了,什么東西很快就能學(xué)會,觸類旁通!所以花更多時(shí)間在學(xué)習(xí)高級的一些應(yīng)用上面還不如花在基礎(chǔ)上面更劃算呢!你見過程序設(shè)計(jì)都沒有學(xué)好的同學(xué)想通過學(xué)習(xí)《人月神話》,《Peopleware》這些書來達(dá)到高手的境界的么?還有些同學(xué)光關(guān)注程序語言的學(xué)習(xí),關(guān)注practical的學(xué)習(xí),對其中本質(zhì)的東西確不聞不問!在這里我又想引用候老師的一段話,個(gè)中味道自己去品位吧:程式語言是程式員最基礎(chǔ)的功夫,必須熟練它掌握它。但若只是如此,編寫不出好程式、大程式、專業(yè)程式。大家都會說中文,獨(dú)獨(dú)有人旁徵博引,左右逢源,字字珠璣,文思雋永,這是為什麼?功夫在語言之外! 語言是首要條件,但不是決勝條件。功夫在語言之外,決勝在語言之外!
|