隨筆 - 44  文章 - 78  trackbacks - 0
          <2009年2月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          1234567

           Happy 牛 Year
          一、一周至少寫一篇博文;
          二、每天至少學(xué)習(xí)半個(gè)小時(shí)。
          三、奔向小牛!

          常用鏈接

          留言簿(6)

          我參與的團(tuán)隊(duì)

          隨筆分類

          隨筆檔案

          文章檔案

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          題記:最近看了《 java 夜未眠》這本書,感覺(jué)很不錯(cuò),里面將當(dāng)時(shí)(包括現(xiàn)在)的一些現(xiàn)狀,以及一些知識(shí)點(diǎn)分析的很清楚、很透徹,而且淺顯易懂,寫作風(fēng)格幽默風(fēng)趣,讀起來(lái)也不費(fèi)力;雖然有些地方比較偏激,但那是不可否認(rèn)的事實(shí),確實(shí)感同身受啊,如果大家沒(méi)有看過(guò),推薦大家有時(shí)間也看一下;下面是書中一些不錯(cuò)的片段,當(dāng)然,整本書都是不錯(cuò)的,這些只不過(guò)是我更感興趣的。

          ?

          培養(yǎng)興趣
          把程序設(shè)計(jì)當(dāng)成興趣可以讓你學(xué)得更快樂(lè),學(xué)習(xí)效果自然會(huì)更好。在我到一個(gè)單位面試時(shí),主管看了我的履歷之后問(wèn)我:「你怎么有這么多時(shí)間學(xué)會(huì)這么多東西、做這么多事?」 我的回答是:「把工作、學(xué)習(xí)、和娛樂(lè)結(jié)合在一起,時(shí)間就會(huì)是別人的三倍。」
          ???
          我承認(rèn)我很幸運(yùn),可以把程序設(shè)計(jì)當(dāng)作賺錢的工作,學(xué)習(xí)的題材,以及茶余飯后的休閑活動(dòng)。不是每個(gè)人都像我這般幸運(yùn),但是我相信至少大家都可以把它當(dāng)成興趣。相信我, 調(diào)整你的心境,把它當(dāng)成是興趣,而非苦差事,你非發(fā)現(xiàn)你的「程序功力」與日俱增。

          慎選程序語(yǔ)言
          ???
          慎選程序語(yǔ)言很重要,一開(kāi)始就學(xué)太難的程序語(yǔ)言很容易讓你遭遇到挫折而放棄。你可以挑比較容易且有趣的語(yǔ)言下手,建議您可以從下面的語(yǔ)言中擇一:
          ??? VB
          :簡(jiǎn)單,好用,書籍多。
          ??? Java
          :比 VB 稍難,比 C/C++ 簡(jiǎn)單,書籍多,用途非常廣,相當(dāng)有前途。可以當(dāng)作學(xué)習(xí) C++ 的跳板。
          ??? Python
          :簡(jiǎn)單,好用,各個(gè)平臺(tái)都支持(包括 Windows Linux MacOS BeOS ... )。國(guó)外很紅,國(guó)內(nèi)較少人用。原文書不少, 但中文書目前只有一本(歐萊禮出版)。我預(yù)期 Python 會(huì)是下一個(gè)熱門的程序語(yǔ)言。
          ???
          這三個(gè)語(yǔ)言只是我給各位的建議,你也可以多聽(tīng)聽(tīng)別人的意見(jiàn)。在選定一個(gè)程序語(yǔ)言之后,就要執(zhí)著,不可以很快放棄,又改學(xué)另一個(gè)程序語(yǔ)言,否則永遠(yuǎn)都只懂皮毛。有句諺語(yǔ)是 這么說(shuō)的:「 A jack of all trades is master of none 」。如果你號(hào)稱會(huì) C++ Java 等十種程序語(yǔ)言,只不過(guò)每種程序語(yǔ)言都停留在 Say Hello 的階段,相信面談主管很快就會(huì) 對(duì)你 Say Goodbye
          ???
          當(dāng)你學(xué)精某程序語(yǔ)言,然后想再學(xué)另一個(gè)程序語(yǔ)言,你會(huì)發(fā)現(xiàn)有了前一個(gè)程序語(yǔ)言札實(shí)的根基,學(xué)任何新的程序語(yǔ)言都很快。

          ?

          程序與香雞排片段

          在臺(tái)灣的軟件公司內(nèi)部,有許多非科班出身的程序員,他們的薪資低廉,通常又很努力。軟件公司就算聘到了這種便宜又努力的程序員,也不要太高興,因?yàn)檫@樣的程序員,通常都只是把目前的公司當(dāng)一個(gè)學(xué)習(xí)的過(guò)渡階段,等到學(xué)得差不多,拍拍屁股就走人了,才沒(méi)打算一輩子接受這樣的低薪。但可悲的是,大部分的公司都沒(méi)有良好的程序員生涯規(guī)劃制度,反正大家互相利用。所以這些程序員很可能在做計(jì)畫的過(guò)程中,學(xué)不到東西又磨得身心俱疲。 所以,何苦來(lái)哉!不如我們通通去賣香雞排吧!但是你們只能到通化街夜市和士林夜市賣,不可以到我屬意的饒河街夜市和我搶生意(我打聽(tīng)過(guò),饒河街的攤位租金是三者中最便宜的)。我的攤位名稱要取做什么呢? ... 嗯!就叫做 “Java 雞排 好了,以紀(jì)念我曾有過(guò)的 Java 程序員身份。我打算把雞排分成三種大小,最大到最小分別叫做 J2EE J2SE 以及 J2ME 。哪天你到饒河街夜市,發(fā)現(xiàn)了一個(gè)乾乾瘦瘦、看起來(lái)營(yíng)養(yǎng)不良的少年頭家用著生硬的臺(tái)語(yǔ)在吆喝著: 來(lái)呦!來(lái)呦!好呷的香雞排, J2EE 一塊 50 J2SE 一塊 40 J2ME 一塊 30......” 請(qǐng)你也來(lái)光顧一下吧! ... 看在 Java 的份上。

          ?

          關(guān)于職業(yè)生涯

          生涯規(guī)劃會(huì)隨著年紀(jì)增長(zhǎng)和生活經(jīng)驗(yàn)的累積,以及人生觀的改變而有階段性的差異,所以生涯規(guī)劃不宜過(guò)于長(zhǎng)期。生涯規(guī)劃應(yīng)該以漸進(jìn)的、多樣的方式來(lái)進(jìn)行。漸進(jìn)的,才不會(huì)好高鶩遠(yuǎn);多樣的,才可以分散風(fēng)險(xiǎn)。而且,生涯規(guī)劃要及早,因?yàn)橛性匠浞值臅r(shí)間準(zhǔn)備,越有可能實(shí)現(xiàn)。即使你想瀟灑地背著吉他到異鄉(xiāng)旅行彈唱,你也得好好地練吉他吧!

          把握時(shí)間朝著你所規(guī)劃的生涯邁進(jìn)!時(shí)間過(guò)得很快的,浪費(fèi)不得。你不會(huì)希望有一天你在床上醒來(lái),睜開(kāi)眼后盯著天花板,你發(fā)現(xiàn)你已經(jīng)五十歲了,昨晚五十大壽 birthday party 的宿醉使得你現(xiàn)在頭痛欲裂。你發(fā)現(xiàn)這些年來(lái)你依舊是渾渾噩噩的度過(guò),生涯規(guī)劃依舊只是「規(guī)劃」,沒(méi)一個(gè)實(shí)現(xiàn)。你在床上抱頭痛哭,就在你五十歲生日當(dāng)天。

          信息應(yīng)用領(lǐng)域變動(dòng)快速,許多軟件人員欠缺判斷能力,不能及早學(xué)習(xí)妥相關(guān)的技術(shù)以為因應(yīng)。特別是在這幾年的光景,許多新應(yīng)用領(lǐng)域的竄起,相當(dāng)程度地撼動(dòng)了原有的軟件霸主,以往那些唯唯諾諾、以微軟技術(shù)馬首是瞻的人難得壓錯(cuò)了寶,這次也算是讓他們學(xué)到了教訓(xùn),這何嘗不是一種領(lǐng)悟。啊!多么痛的領(lǐng)悟,你(微軟)曾是我的全部。

          許多軟件人員缺乏自我學(xué)習(xí)的能力。軟件人員應(yīng)該問(wèn)問(wèn)自己:這半年來(lái)技術(shù)能力精進(jìn)了多少?技術(shù)飛快地在進(jìn)步,如果你沒(méi)跟著進(jìn)步,在相對(duì)坐標(biāo)看來(lái)就是退步。我以前很變態(tài),只要一天沒(méi)看技術(shù)書籍就會(huì)覺(jué)得今天真是白活了,然后有一股沖動(dòng)想要「做傻事」;現(xiàn)在我雖然比較沒(méi)這么逼迫自己了,但看書還是看得很勤快。

          軟件人才培養(yǎng)不易,折損率高。一些我認(rèn)識(shí)的優(yōu)秀軟件人才,最近常 forward 一些「過(guò)勞死」、「人生的意義」之類的文章給我,顯示了他們工作上的厭倦感。他們?cè)陔娫捴懈嬖V我,他們忙得沒(méi)時(shí)間接觸新技術(shù),技術(shù)已經(jīng)跟不上別人了。這廂大嘆人才難尋,那廂努力折損人才。

          ?

          關(guān)于知識(shí)的等級(jí)

          專業(yè)知識(shí)是一種無(wú)形的資產(chǎn),不容易評(píng)估其價(jià)值。但是大致上,專業(yè)知識(shí)可以分成四個(gè)層次,價(jià)值由低而高分述如下。

          Know-What

          受過(guò)訓(xùn)練,通過(guò)認(rèn)證,而精通某領(lǐng)域的基本知識(shí),這類的知識(shí)就稱為 know-what ,也稱為認(rèn)知性的知識(shí)( cognitive knowledge )。 know-what 是一切知識(shí)的根基,但是有了 know-what ,并不表示有能力可以活用這些知識(shí)。許多軟件人員在通過(guò)專業(yè)認(rèn)證之后,就開(kāi)始學(xué)會(huì)獅子大開(kāi)口了,其實(shí)他們的知識(shí)可能還停留在 know-what 的階段,而 know-what 階段的知識(shí)對(duì)公司來(lái)說(shuō)是沒(méi)有太多生產(chǎn)力的。此階段的軟件人員應(yīng)該努力地提升自己,以進(jìn)入下一個(gè)階段,也就是 know-how

          Know-How

          know-how 階段的知識(shí)也稱為進(jìn)階技能( advanced skills ),指的是可以活用書本上學(xué)來(lái)的知識(shí)、理論,以解決實(shí)際的問(wèn)題。 know-what 的知識(shí)或許可以透過(guò)「填鴨」方式生硬地吞下去,但是 know-how 的培養(yǎng)一定要透過(guò)實(shí)務(wù)經(jīng)驗(yàn)的累積與體會(huì)。如果有一個(gè)好老師或 leader 的引導(dǎo), know-what 可以很快地提升成 know-how ,靠自我的培養(yǎng)則通常會(huì)比較辛苦。不過(guò),當(dāng)我要引導(dǎo)學(xué)生由 know-what know-how 時(shí),往往會(huì)有許多「不識(shí)貨」的學(xué)生嫌我啰唆。

          Know-Why

          know-why 階段的知識(shí)指的是對(duì)整個(gè)系統(tǒng)的掌握度( system understanding ),也就是了解各種知識(shí)背后復(fù)雜交錯(cuò)的因果關(guān)系。有了 know-why 的知識(shí),軟件人員除了能順利地進(jìn)行軟件計(jì)劃之外,還能進(jìn)一步解決更大、更復(fù)雜的問(wèn)題,因?yàn)橐磺械闹R(shí)都是有條理的。具有 know-why 的軟件人員對(duì)整個(gè)計(jì)劃具有強(qiáng)烈的「第六感」,可以直覺(jué)地做出正確的判斷,預(yù)先知道可能會(huì)遇到的問(wèn)題。計(jì)劃的 leader 必須具備 know-why ,才能全盤掌握計(jì)劃。

          Care-Why

          care-why 指的是自發(fā)性的創(chuàng)意( self-motivated creativity )。有了源源不絕的創(chuàng)意,才能保持高度的競(jìng)爭(zhēng)力。軟件產(chǎn)品相當(dāng)需要?jiǎng)?chuàng)意和洞燭先機(jī)的能力,在大家一窩蜂搶做某軟件或某服務(wù)之前,就已經(jīng)先完成深度的耕耘,技術(shù)自然比別人來(lái)得扎實(shí),也能迅速地迎合市場(chǎng)需求,為公司創(chuàng)造最大的利益。

          ?

          關(guān)于買書讀書

          如果你最近是個(gè)大忙人,有一堆事情要做,就先別急著買計(jì)算機(jī)書籍。計(jì)算機(jī)書籍更新的速度很快,可不比四書五經(jīng),可以祖?zhèn)鞲浮⒏競(jìng)髯樱?/span> 代代受用不盡。以前我也常沖動(dòng)之下買了好書回家,然后忙得沒(méi)空讀它,等到空閑下來(lái)時(shí),新版本也已經(jīng)出現(xiàn)了,懊悔不已!如果不急著用的書, 千萬(wàn)別急著買,不然可能還沒(méi)來(lái)得及看這本書,新版本又出來(lái)了,信息界不流行考古的。

          ?

          Java 學(xué)習(xí)之道

          認(rèn)識(shí) Java 的原理
          *
          學(xué)會(huì) Java 語(yǔ)言
          *
          對(duì)象導(dǎo)向的思維
          * API
          *
          開(kāi)發(fā)工具的用法

          下面分別就這幾點(diǎn)詳細(xì)闡述。
          學(xué)習(xí) Java 的原理
          了解 Java 的原理,才有可能真正體會(huì) Java 的一切,學(xué)習(xí)任何事情,只要能掌握原理,就會(huì)比較順利。我發(fā)現(xiàn)許多人使用 Java 已經(jīng)逾年,卻連 Java 最基本的特質(zhì)都不清楚。

          一般來(lái)說(shuō),信息系畢業(yè)的學(xué)生,對(duì)于信息的新事物學(xué)習(xí)的速度,會(huì)比其它科系來(lái)得快,就是因?yàn)樗哪甑慕逃秊樗麄兊於藢W(xué)習(xí)新事物的基礎(chǔ),這也是信息系課程的價(jià)值所在。

          除非你受過(guò)的基礎(chǔ)訓(xùn)練夠扎實(shí),否則在學(xué)習(xí)或使用 Java 的過(guò)程中,你一定會(huì)需要參考到這些信息系學(xué)科的知識(shí)。我建議各位可以在閑暇之余,把信息系課本的書拿來(lái)讀一讀。這是治本之道,絕非立竿見(jiàn)影的特效藥,必須要有耐心。

          學(xué)習(xí) Java 語(yǔ)言
          學(xué)習(xí) Java 語(yǔ)言很簡(jiǎn)單,畢竟 Java 語(yǔ)言也只包含五十多個(gè)關(guān)鍵詞( keyword )與幾十個(gè)算符( operator ),再加上 Java 語(yǔ)法( syntax )也很簡(jiǎn)單,所以一般人可以很快就學(xué)會(huì) Java 語(yǔ)言。危險(xiǎn)的是,很多人認(rèn)為已經(jīng)完全掌控 Java 語(yǔ)言,但其實(shí)對(duì)于內(nèi)部的運(yùn)作機(jī)制仍不能掌握,這些盲點(diǎn)有時(shí)候會(huì)讓你無(wú)法完全掌控 Java 語(yǔ)言。克服這些盲點(diǎn)的方式是看「 The Java Language Specification, 2nd Ed. 」(沒(méi)有中文版)來(lái)徹底弄懂 Java 程序語(yǔ)言,并看「 Inside the Java Virtual Machine, 2nd Ed. 」(有中文版,但翻譯得@#%$)來(lái)徹底掌握 Java 虛擬機(jī)器的運(yùn)作方式。

          學(xué)習(xí)對(duì)象導(dǎo)向的思維
          學(xué)會(huì)了語(yǔ)言,并不代表就可以設(shè)計(jì)出好的對(duì)象導(dǎo)向系統(tǒng)架構(gòu)。想要成為對(duì)象導(dǎo)向的專家,往往需要:

          *
          多看相關(guān)的書,特別是 Design Pattern Refactoring 的書。
          *
          多觀摩別人的程序(例如 Java API design implementation
          *
          多寫程序

          學(xué)習(xí) API
          學(xué)會(huì) Java 語(yǔ)言之后,還需要學(xué)會(huì)一些 API 才能寫出有用的程序。 Java API 非常多,必須規(guī)劃好一個(gè)學(xué)習(xí)路徑,才不會(huì)在浩瀚的 API 大海中迷失。必備的 API 包括了: IO New IO Collection Framework Network RMI JAXP... 等。至于其它的 API ,就看你的需求而定,大致上分成:

          * GUI
          類: JavaBean -> Swing -> JavaHelp -> Java2D -> Image IO -> JAI -> Java 3D ...
          * Enterprise
          類: JDBC -> JDO -> Servlet -> JSP -> EJB -> JMS -> JTA/JTS...
          * J2ME
          類(這一類不是我的專長(zhǎng),無(wú)法提供學(xué)習(xí)順序建議)

          學(xué)習(xí)開(kāi)發(fā)工具的用法
          只用 JDK ,是很難寫出大型程序的,所以通常程序員會(huì)使用 JBuilder/VisualAge/ VisualCafe 等工具,這些軟件賣這么貴,一定有它的價(jià)值,值得花一些時(shí)間好好學(xué)習(xí)這些開(kāi)發(fā)工具的使用方式,你將會(huì)發(fā)現(xiàn)開(kāi)發(fā)工具所提供的許多功能,可以讓你在開(kāi)發(fā)過(guò)程中生產(chǎn)力大增。

          ?

          Static 的意義與實(shí)作方式

          ?

          Class(static) field :共用一塊記憶體
          class(static) method
          :共用一塊記憶體
          instance(
          static) field :隨著每個(gè) instance 各有一塊記憶體
          instance (
          static) method :共用一塊記憶體
          ??? instance method
          為什么不是隨著每個(gè) instance 占有一塊記憶體,反倒是共用一塊記憶體?其實(shí),讓每個(gè) instance method 如同 instance field 一樣,隨著每個(gè) instance 占有一塊記憶體,這么做當(dāng)然是可以的,只是 Java 編譯器和 JVM 都不這么做,因?yàn)樘速M(fèi)記憶體空間了。一個(gè) field 少則占用一個(gè) byte ,多則占用數(shù)百 Byte ,但是 method 少則數(shù)個(gè) byte ,多則數(shù)百 Kilo Byte Mehtod 耗費(fèi)的記憶體是 field 的數(shù)百倍,甚至數(shù)千倍,當(dāng)然是能共用就盡量共用,比較不會(huì)消耗記憶體。既然 JVM 讓一個(gè) class 的所有 instance 共用相同的 instance method ,下面兩行程式碼在 instanceMethod() 內(nèi)部時(shí),如何區(qū)分是 instance1 instance2
          instance1.instanceMethod();
          instance2.instanceMethod();
          因?yàn)榫幾g器會(huì)幫我們?cè)诎?/span> instance1 instance2 個(gè)別傳入 instanceMethod() 中當(dāng)作第一個(gè)參數(shù)。也就是說(shuō),任何 instance method 參數(shù)的實(shí)際個(gè)數(shù)都會(huì)比表面上多一個(gè),這個(gè)多出來(lái)的參數(shù)是由 Java 編譯器幫我們加上去的,用來(lái)代表對(duì)應(yīng)的 instance 。此參數(shù)的變數(shù)名稱為 this ,也是 Java 的一個(gè)關(guān)鍵字( keyword )。
          ???
          當(dāng)調(diào)用某個(gè) instance method 或使用某個(gè) instance field 時(shí),你必須在前面加上該 instance 的名稱,如果該 instance method/field 相關(guān)的 instance 和當(dāng)時(shí)程式碼所在的 instance method instance 指的是同一個(gè) instance 時(shí),該 instance 的名稱就是 this ,這種情況下,你也可以選擇不在前面加上「 this. 」。
          ???
          然而,在某些狀況下,非得在前面加上「 this. 」不可。例如,當(dāng) method 中的參數(shù)或區(qū)域變數(shù)和 instance field 名稱完全相同時(shí),如果不在前面冠上「 this. 」,那么指的是參數(shù)或區(qū)域變數(shù);如果在前面冠上「 this. 」,那么指的才是 instance field

          posted on 2009-02-06 15:29 Tiger1102 閱讀(5242) 評(píng)論(4)  編輯  收藏 所屬分類: 每日進(jìn)階

          FeedBack:
          # re: 關(guān)于蔡學(xué)鏞前輩《Java夜未眠》的一些摘要 2009-02-06 16:03 徐堯
          不錯(cuò),很好  回復(fù)  更多評(píng)論
            
          # re: 關(guān)于蔡學(xué)鏞前輩《Java夜未眠》的一些摘要 2009-02-17 18:47 belltoy
          程序語(yǔ)言建議從C學(xué)起(同時(shí)了解匯編,以及其它基礎(chǔ)知識(shí))
          編程工具從純文本編輯器開(kāi)始,不要一開(kāi)始就用IDE
          《程序員修煉之道》值得一看  回復(fù)  更多評(píng)論
            
          # re: 關(guān)于蔡學(xué)鏞前輩《Java夜未眠》的一些摘要 2011-02-06 00:24 朱少軍
          如果倒過(guò)來(lái),先學(xué)C++,再學(xué)JAVA,是不是可以這么說(shuō),如果C++吃透了,JAVA一看就會(huì)?  回復(fù)  更多評(píng)論
            
          # re: 關(guān)于蔡學(xué)鏞前輩《Java夜未眠》的一些摘要 2014-06-19 17:39 古今
          @朱少軍
          @朱少軍
          我是一名大四通信工程畢業(yè)生,跟著學(xué)校課程學(xué)習(xí)了C和C++的基礎(chǔ)部分,然后自己寒假去看了JAVA語(yǔ)言(JDK的基礎(chǔ)),至少我感覺(jué)要看懂很容易。但是到了提高和運(yùn)用部分,光是看書不夠,程序語(yǔ)言還是需要大量的項(xiàng)目經(jīng)驗(yàn)來(lái)促進(jìn)自己邊用邊學(xué),而不是學(xué)完了去用。但在打基礎(chǔ)階段還是建議從C和C++入手(開(kāi)發(fā)工具推薦VS2012)  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 明水县| 建瓯市| 灯塔市| 鸡东县| 于田县| 汤原县| 宁都县| 金寨县| 呼玛县| 新绛县| 东至县| 唐海县| 杂多县| 耒阳市| 赣州市| 晋州市| 凭祥市| 泰宁县| 盐津县| 广饶县| 盈江县| 杨浦区| 泸西县| 蒙阴县| 澳门| 水富县| 衡山县| 托克逊县| 北海市| 鄯善县| 手游| 普陀区| 偃师市| 平武县| 澄江县| 疏勒县| 尼勒克县| 镇原县| 兰州市| 鹤山市| 上高县|