學(xué)習(xí)編程的有效途徑是什么?很明顯,僅僅坐在教室里聽課是遠(yuǎn)遠(yuǎn)達(dá)不到的。閱讀一些編程理論的書籍可能會(huì)有所助益,但無法與通過有效閱讀并思考其他人的源代碼直至理解所獲得的實(shí)踐技巧相比。真的沒有什么方法比喜歡自己動(dòng)手寫程序更能積累編程經(jīng)驗(yàn)。閱讀一點(diǎn)只能學(xué)到一點(diǎn),而動(dòng)手編程則能收獲很多。
不幸的是,搞清楚什么能做有時(shí)會(huì)是編程學(xué)習(xí)中最困難的地方?;趥€(gè)人的經(jīng)驗(yàn),答案似乎是你可以一躇而就,而不是七上八下的事情,并能通過頓悟來找到通過編寫程序來解決問題的方法。
需要做的最重要的事情是要找到一種方法來激勵(lì)自己編寫代碼。下面是一些建議,告訴你如何采取行動(dòng)開始編程學(xué)習(xí)。
1、數(shù)據(jù)庫管理系統(tǒng)(DBMSes)
諸如PostgreSQL、 Oracle、Microsoft SQL Server,以及Informix這種專業(yè)、耐用的數(shù)據(jù)庫管理系統(tǒng)通過存儲(chǔ)過程或存儲(chǔ)函數(shù)提供了腳本功能。最受廣泛認(rèn)可的語言選項(xiàng)也許是Microsoft SQL Server和Sybase所使用的TransactSQL,以及Oracle所使用的PL/SQL。 PostgreSQL提供了一個(gè)名為PL/pgSQL的類PL/SQL的程序擴(kuò)展到SQL里,但它也提供了包括PL/Perl、PL/Python、PL/Ruby和 PL/Tcl在內(nèi)的其他語言的選擇范圍。
這種編程機(jī)會(huì)雖然限定于一組特定的問題領(lǐng)域,但如果你是一名DBA(數(shù)據(jù)庫管理員)或你的工作涉及數(shù)據(jù)庫開發(fā)報(bào)告,將會(huì)親身體驗(yàn)到這是非常有用的。
2、實(shí)踐問題
您可以嘗試解決代碼任務(wù)中的通用清單所提供的問題,代碼任務(wù)是特別為了給程序員提供實(shí)習(xí)機(jī)會(huì)而專業(yè)設(shè)計(jì)的。歐拉(Project Euler)是一個(gè)比較流行的、不論編程語言的項(xiàng)目,包括“一系列具有挑戰(zhàn)性的數(shù)學(xué)/計(jì)算機(jī)編程問題”。歐拉項(xiàng)目收集了上百個(gè)問題,這些問題一般從易到難,足以讓你忙碌很長(zhǎng)一段時(shí)間。
*PurpleEndurer注:關(guān)于歐拉項(xiàng)目,可訪問:http://projecteuler.net
其他例子包括RubyQuiz,它多年來一直在ruby-talk的郵件列表中廣受歡迎。另外還有CodeKata,它是Dave Thomas的一個(gè)規(guī)模較小、壽命較短的項(xiàng)目。Dave Thomas是《The Pragmatic Programmer(程序員修煉之道)》一書的合著者之一。
*PurpleEndurer注:關(guān)于CodeKata可訪問http://codekata.pragprog.com/
這些選項(xiàng)不適合用作自我激勵(lì)型探索性學(xué)習(xí)的任務(wù),因?yàn)樗鼈儠?huì)讓人撓破頭皮,但如果發(fā)現(xiàn)其中的樂趣,它們可以和其它方法一樣用于編程實(shí)踐教育。
3、插件
許多新的電腦游戲提供了編寫和加載插件的功能。例如,“魔獸世界(World of Warcraft)”提供了一個(gè)使用Lua腳本語言的插件系統(tǒng)。隨著Firefox聲名鵲起和廣泛使用,現(xiàn)代網(wǎng)頁瀏覽器往往也提供靈活的插件系統(tǒng);在最簡(jiǎn)單的情況下,F(xiàn)irefox的插件都是用JavaScript編寫的。開放源碼的瀏覽器在插件開發(fā)方面往往比封閉源代碼的瀏覽器更具吸引力,并且Chromium瀏覽器的插件系統(tǒng),很可能成為插件開發(fā)者們的第二大目標(biāo),這是因?yàn)楣雀鐲hrome瀏覽器高調(diào)的營銷策略以及不設(shè)限的許可證(permissive licensing)政策。
*PurpleEndurer注:Lua程序設(shè)計(jì)語言 是一個(gè)簡(jiǎn)潔、輕量、可擴(kuò)展的腳本語言。Lua讀作/'lua/(嚕啊),是葡萄牙語中"Luna"(月亮)的意思。詳見:
http://zh.wikipedia.org/zh-cn/Lua
其他許多應(yīng)用程序具有插件和擴(kuò)展系統(tǒng),可以提供充分的機(jī)會(huì)來培養(yǎng)這些迅速發(fā)展的編碼技能,甚至包括一些終端仿真器(terminal emulators)和基于控制臺(tái)的文本編輯器,如Vim。(透露一點(diǎn)好消息:我貢獻(xiàn)了一點(diǎn)代碼到urlpicker項(xiàng)目。)
4、智能手機(jī)(Smartphones)
應(yīng)用程序開發(fā)行業(yè)中最大的新熱潮是智能手機(jī)的應(yīng)用程序。這種裝置通常需要開發(fā)人員使用一種可將裝置的功能發(fā)揮到極至的特定語言作為應(yīng)用平臺(tái),至少要以官方認(rèn)可的方式進(jìn)行。
智能手機(jī)開發(fā)體系的一個(gè)新興產(chǎn)業(yè)正在崛起,即允許開發(fā)人員用非智能手機(jī)平臺(tái)原生的其它語言編寫自己的代碼,然后轉(zhuǎn)化為原生語言的應(yīng)用程序。 因?yàn)椴恍枰獙W(xué)習(xí)任何特定的智能手機(jī)平臺(tái)的官方應(yīng)用程序開發(fā)語言,Web應(yīng)用程序也沾了光,成為智能手機(jī)應(yīng)用程序開發(fā)的一種方法。選擇語言甚于平臺(tái)的另一個(gè)方案是使用像諾基亞的N900這樣的設(shè)備,它運(yùn)行Debian發(fā)行的Linux系統(tǒng),可以運(yùn)行的軟件范圍很寬——包括很多不是為智能手機(jī)設(shè)計(jì)的軟件。
側(cè)重于多種方法開發(fā)智能手機(jī)應(yīng)用程序的書籍和在線教程紛紛出現(xiàn),特別是Android和iPhone的設(shè)備。一些第三方框架將可以從HTML + JavaScript 到 Ruby 或 Python編寫的代碼“編譯”為多種平臺(tái)的“本地”應(yīng)用程序,有時(shí)不僅包括智能電話平臺(tái),而且包括桌面系統(tǒng)。對(duì)這種情況也許最令人興奮的是,這些框架和相關(guān)的IDE不傾向于試圖解決所有的編程問題,這與同樣出色的編程方式的主要框架,如Visual Studio和.NET框架有所不同。這使得人們有可能通過縮小選項(xiàng)至一個(gè)易于管理的問題領(lǐng)域來顯著地簡(jiǎn)