寫(xiě)程序,好好玩,缺失。
本文摘自Access中國(guó)網(wǎng)站版主李嘯林的轉(zhuǎn)帖與補(bǔ)充:
這一陣子,軟件、網(wǎng)絡(luò)大紅,許多人對(duì)程序設(shè)計(jì)開(kāi)始感興趣,我收到好一些 Sleepless in Java專(zhuān)欄讀者的來(lái)信,不少讀者共同的問(wèn)題是:如何進(jìn)入程序設(shè)計(jì)的領(lǐng)域?所以我選這 個(gè)主題當(dāng)作 Sleepless in Java 專(zhuān)欄「復(fù)刊」的第一篇文章。
寫(xiě)程序是很有趣的事,可以把自己的想法付諸實(shí)行。寫(xiě)程序的工具很簡(jiǎn)單,只要有一部PC,適當(dāng)?shù)拈_(kāi)發(fā)環(huán)境,就可以上工了。這樣有限的工具卻可以創(chuàng)造無(wú)限的可能,這也正是程序設(shè)計(jì)迷人的地方。只要你能力夠,你可以將你腦海中的創(chuàng)意寫(xiě)成程序,變成一套軟件。
培養(yǎng)程序能力,不是一蹴可及的,下面提供我的一些建議,希望對(duì)有志進(jìn)入程序設(shè)計(jì)領(lǐng)域的你有所幫助。
培養(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)作賺錢(qián)的工作,學(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)單,好用,書(shū)籍多。
REBOL:使用上非常簡(jiǎn)單自然,各個(gè)平臺(tái)都支持,然后尚未流行,可以到www.rebol.com 上下載,也可以在此處找一些學(xué)習(xí)資料。
Java:比VB稍難,比C/C++簡(jiǎn)單,書(shū)籍多,用途非常廣,相當(dāng)有前途。可以當(dāng)作學(xué)習(xí)C++的跳板。
Python:簡(jiǎn)單,好用,各個(gè)平臺(tái)都支持(包括Windows,Linux,MacOS,BeOS,...)。國(guó)外很紅,國(guó)內(nèi)較少人用。原文書(shū)不少,但中文書(shū)目前只有一本(歐萊禮出版)。我預(yù)期 Python 會(huì)是下一個(gè)熱門(mén)的程序語(yǔ)言。
www.python.org
這三個(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)稱(chēng)會(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ǔ)言都很快。
使用適當(dāng)?shù)拈_(kāi)發(fā)工具
現(xiàn)在RAD工具軟件盛行,Visual Basic、Delphi、JBuilder、VisualAge、VisualCafe都是。有了RAD工具,只要「拉一拉,選一選」程序就完成一半了。許多硬底子的程序員頗不以為然,認(rèn)為初學(xué)者使用RAD工具不是好習(xí)慣,不過(guò)我倒不這么認(rèn)為。我認(rèn)為RAD工具可以降低初學(xué)者學(xué)習(xí)的門(mén)檻,提高興趣。只是,在你學(xué)會(huì)「拉一拉,選一選」的簡(jiǎn)單步驟之后,應(yīng)該要找機(jī)會(huì)精進(jìn)自己,弄懂內(nèi)部的機(jī)制,不然不僅會(huì)有一種不踏實(shí)的感覺(jué),甚至有許多程序會(huì)寫(xiě)不出來(lái)。我再?gòu)?qiáng)調(diào)一次:RAD可以當(dāng)初學(xué)者入門(mén)的工具,但小心不要使它變成讓你停滯不前的借口。
另外也要學(xué)會(huì)使用開(kāi)發(fā)工具所附的諸多功能(特別是除錯(cuò)功能)。許多人買(mǎi)了昂貴的 Enterprise 版開(kāi)發(fā)工具,卻只用到copy-paste功能,那么這套開(kāi)發(fā)工具和 Windows 所附的 記事本就沒(méi)有兩樣了。建議您開(kāi)始使用一套新的開(kāi)發(fā)工具前先花些時(shí)間把 User Guide 翻一翻。
現(xiàn)在許多開(kāi)發(fā)工具都有免費(fèi)版本可以下載,初學(xué)者不妨多多利用。
多讀好書(shū),少上課
大量閱讀好書(shū),是精進(jìn)自己的不二法門(mén)。在這種快餐時(shí)代,許多人沒(méi)耐心讀書(shū),反而喜歡到處上課,所以現(xiàn)在到處都是計(jì)算機(jī)班。如果遇到厲害的好老師,當(dāng)然上過(guò)他(或她)的課會(huì)收獲很大,只是目前好老師的比例實(shí)在不高(雖然我自己也在開(kāi) Java/Enterprise Java/Java Swing 的課,但我還是得這么說(shuō))。我曾在網(wǎng)絡(luò)上看到有人說(shuō):「沒(méi)聽(tīng)過(guò)補(bǔ)習(xí)班教出什么程序高手」,這倒也有幾分真實(shí)性。不過(guò)一方面要?dú)w咎老師之外,一方面也要?dú)w咎學(xué)生,因?yàn)槲野l(fā)現(xiàn)通常上課的學(xué)生會(huì)在家里讀書(shū)和寫(xiě)程序練習(xí)的比例不高。
相較于上課動(dòng)輒花費(fèi)上萬(wàn)元的高代價(jià),買(mǎi)書(shū)只需要區(qū)區(qū)幾百上千,劃算多了,更何況書(shū)上的內(nèi)容又比上課來(lái)得多且詳細(xì)。不過(guò)「買(mǎi)書(shū)容易,看書(shū)難」。怕自己偷懶的話(huà),找志同道合的朋友組織「讀書(shū)會(huì)」,彼此加油打氣,還可以互相切磋。最好是像我前面提到的:把它變成興趣。
加強(qiáng)英文閱讀能力
加強(qiáng)英文和崇洋無(wú)關(guān),而是有它實(shí)際的價(jià)值。許多信息都是要直接看英文的資料,因?yàn)闆](méi)有中文版可看。
「可是我的英文很爛!」
這不是理由。沒(méi)人生下來(lái)就能閱讀英文,都是一點(diǎn)一點(diǎn)累積起閱讀能力的。給自己一個(gè)機(jī)會(huì),找一本單字文法都比較簡(jiǎn)單、且頁(yè)數(shù)又少的書(shū)籍下手,很快地,你會(huì)發(fā)現(xiàn)技術(shù)書(shū)籍的單字就是哪幾個(gè)在重復(fù)出現(xiàn),閱讀這樣的書(shū)一點(diǎn)都不難。
請(qǐng)注意:原文書(shū)的寫(xiě)作風(fēng)格也有相當(dāng)大的差異,有的書(shū)的確是不好讀。所以,如果你剛開(kāi)始要嘗試閱讀原文書(shū),不要挑到像 Bjarne Stroustrup 所寫(xiě)的 The C++ Programming Language 這類(lèi)難懂的書(shū)……盡管它是經(jīng)典。
問(wèn)人之前,先問(wèn)自己
遇到問(wèn)題,可以到國(guó)內(nèi)外的程序設(shè)計(jì)相關(guān)討論區(qū)去請(qǐng)教別人,如果態(tài)度謙遜,且問(wèn)題敘述清楚,相信許多有經(jīng)驗(yàn)的前輩會(huì)很樂(lè)于參與討論。不過(guò),凡是遇到問(wèn)題就發(fā)問(wèn),這不是好事,因?yàn)槟銜?huì)因此越來(lái)越依賴(lài)別人,而失去了自我解決問(wèn)題的能力。自己應(yīng)該嘗試著查書(shū)、寫(xiě)程序測(cè)試、甚至閱讀原始碼,來(lái)找出答案。如此一來(lái),真的沒(méi)辦法而請(qǐng)教別人時(shí),也才能 比較深入地討論。
多寫(xiě)程序
學(xué)程序設(shè)計(jì)不可以只看書(shū),將隨書(shū)光盤(pán)的程序執(zhí)行一次,就認(rèn)為自己已經(jīng)學(xué)會(huì)了。應(yīng)該開(kāi)始寫(xiě)一些程序,且由小到大,由簡(jiǎn)單到復(fù)雜。找一些有趣的題目(比方說(shuō):計(jì)算器,踩地雷,小畫(huà)家,俄羅斯方塊),可以提升寫(xiě)程序的動(dòng)力。
我看到許多學(xué)生大一的程序作業(yè)都是copy同學(xué)的,失去了練習(xí)的機(jī)會(huì)。等到二年級(jí)之后,想開(kāi)始寫(xiě)程序,卻寫(xiě)不出來(lái)了。初學(xué)程序設(shè)計(jì)的階段,應(yīng)該給自己多一些機(jī)會(huì)寫(xiě)程序。
向上延伸,向下延伸,向旁延伸
當(dāng)你發(fā)現(xiàn)你已經(jīng)可以掌握此程序語(yǔ)言之后,你可以選擇:
向上延伸:學(xué)習(xí)對(duì)象導(dǎo)向分析設(shè)計(jì)、Design Patterns、以及軟件工程。讓自己具有做大型計(jì)劃的能力。
向下深入:深入了解內(nèi)部底層的機(jī)制,例如操作系統(tǒng)(甚至硬件)內(nèi)部。
向旁延伸:學(xué)習(xí)不同的API,例如:多媒體、數(shù)據(jù)庫(kù)、企業(yè)運(yùn)算…。
另外,數(shù)據(jù)結(jié)構(gòu)、算法等基礎(chǔ)也很重要。
結(jié)論
一分耕耘,一分收獲,用對(duì)方法,持之以恒。每半年檢閱自己這段期間以來(lái)的進(jìn)步,相信你也會(huì)很高興地說(shuō)「我做到了」!
--------------------------------------------------------------------------------------------
李嘯林的補(bǔ)充:
??
蔡先生是位編程高手。他寫(xiě)的這篇文章我已經(jīng)看過(guò)許多遍。每一次都有新的啟發(fā)。在這里我有一點(diǎn)補(bǔ)充,就是關(guān)于英語(yǔ),也許在十年前學(xué)計(jì)算機(jī)不學(xué)英語(yǔ)是不可思議的事情,但是現(xiàn)在不同了,隨著中國(guó)計(jì)算機(jī)書(shū)籍市場(chǎng)的不斷擴(kuò)大,幾乎所有著名的計(jì)算機(jī)書(shū)都有了中譯本,而且同步的速度也在不斷加快。除非你想成為和蔡先生一樣的頂尖高手(這是一定要會(huì)英語(yǔ)),一般的編程應(yīng)用可以不用學(xué)英語(yǔ)。與其把大量時(shí)間花費(fèi)在拗口難懂的英語(yǔ)學(xué)習(xí)上,還不如踏踏實(shí)實(shí)的編幾個(gè)程序(當(dāng)然,如果你喜歡英語(yǔ),又當(dāng)別論)。我這里說(shuō)點(diǎn)題外話(huà),其實(shí)搞普及性,全民英語(yǔ)教育,是中國(guó)教育最大失誤之一。