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