北京北大青鳥提供:編程學(xué)習(xí)的七大攻略

北京北大青鳥通州校區(qū)老師表示:對(duì)大多數(shù)學(xué)員來說,只坐在教室里聽課并非學(xué)習(xí)編程的唯一途徑。輔以閱讀介紹編程概念的書籍可能會(huì)有所助益。但是,真的沒有什么方法比喜歡自己動(dòng)手寫程序更能積累編程技巧。閱讀一點(diǎn)只能學(xué)到一點(diǎn),而動(dòng)手編程則能收獲很多。北京北大青鳥的課程研發(fā)正是抓住了這一點(diǎn),理論加上機(jī)實(shí)踐,更有助于學(xué)員掌握。找到你想簡(jiǎn)化的事情,并編寫一些程序代碼來通過自動(dòng)化使它們更容易處理。

  不幸的是,搞清楚什么能做有時(shí)會(huì)是編程學(xué)習(xí)中最困難的地方;趥(gè)人的經(jīng)驗(yàn),答案似乎是你可以一躇而就,而不是七上八下的事情,并能通過頓悟來找到通過編寫程序來解決問題的方法。

  在尋求這種頓悟時(shí),由于剛開始編程的人知識(shí)通常都非常有限,繪制流程圖有助于以你喜歡的方式來事先準(zhǔn)備。請(qǐng)這樣來做,至少在開始時(shí),包括搞清楚你每天使用電腦的流程,把其中使用最多的部分簡(jiǎn)化繪制出來。一旦你整理出來,就把在那些情況下特別有用的編程技能作為早期學(xué)習(xí)的重點(diǎn)。這樣的機(jī)會(huì)在一定程度上是稀缺的,你可能要改變計(jì)算環(huán)境來提供這樣的機(jī)會(huì)。

  需要做的最重要的事情是要找到一種方法來激勵(lì)自己編寫代碼。下面是北京北大青鳥老師們對(duì)關(guān)于如何采取行動(dòng)學(xué)習(xí)編程的建議。

  1、數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMSes)
  諸如PostgreSQL、 Oracle、Microsoft SQL Server,以及Informix這種專業(yè)、耐用的數(shù)據(jù)庫(kù)管理系統(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ù)庫(kù)管理員)或你的工作涉及數(shù)據(jù)庫(kù)開發(fā)報(bào)告,將會(huì)親身體驗(yàn)到這是非常有用的。

  2、插件
  許多新的電腦游戲提供了編寫和加載插件的功能。例如,“魔獸世界(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)的營(yíng)銷策略以及不設(shè)限的許可證(permissive licensing)政策。
其他許多應(yīng)用程序具有插件和擴(kuò)展系統(tǒng),可以提供充分的機(jī)會(huì)來培養(yǎng)這些迅速發(fā)展的編碼技能,甚至包括一些終端仿真器(terminal emulators)和基于控制臺(tái)的文本編輯器,如Vim。

  3、實(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í)間。
   其他例子包括RubyQuiz,它多年來一直在ruby-talk的郵件列表中廣受歡迎。另外還有CodeKata,它是Dave Thomas的一個(gè)規(guī)模較小、壽命較短的項(xiàng)目。Dave Thomas是《The Pragmatic Programmer(程序員修煉之道)》一書的合著者之一。
   這些選項(xiàng)不適合用作自我激勵(lì)型探索性學(xué)習(xí)的任務(wù),因?yàn)樗鼈儠?huì)讓人撓破頭皮,但如果發(fā)現(xiàn)其中的樂趣,它們可以和其它方法一樣用于編程實(shí)踐教育。

  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)化開發(fā)過程。其結(jié)果是軟件開發(fā)風(fēng)格令初學(xué)者感到非常易于接受。

  不足之處是,在學(xué)習(xí)如何編程時(shí),你可能很難每天都編寫新的智能手機(jī)應(yīng)用程序。但是,如果您的智能手機(jī)的操作系統(tǒng)是類Unix系統(tǒng)(如N900的),同樣的小工具開發(fā)項(xiàng)目在工作站和服務(wù)器中都非常有用。

  5、電子表格
  如果使用了附帶強(qiáng)大宏系統(tǒng)的電子表格程序,你將擁有一個(gè)快速的方法來閱讀其他人(或物)代碼,并編寫自己的代碼。首先,將你執(zhí)行次數(shù)多、通常需要采取數(shù)個(gè)繁瑣步驟的任務(wù)記錄成一個(gè)宏。接下來,打開宏的源代碼,閱讀并進(jìn)行編輯,使之更適合于一般用途。這是一個(gè)非常有限的方法,不會(huì)帶來多大的長(zhǎng)進(jìn),但可能會(huì)幫助你上路,自然地喜歡上簡(jiǎn)單的腳本代碼。

  使用此類腳本的最常見的電子表格程序可能是微軟Excel。Excel所使用的VBA是一種貧乏的語言,但是如果你在日常工作中大量使用Excel,這可能是無論如何你都該掌握的一種技能。OpenOffice.org使用了類似的宏系統(tǒng),使用方法大致相同,LibreOffice也像微軟Office一樣,提供了學(xué)習(xí)代碼的機(jī)會(huì)。

  在任何情況下,編寫程序的門坎都比編寫簡(jiǎn)單的命令行shell腳本代碼稍高,因?yàn)椴藛芜x項(xiàng)和按鈕需要點(diǎn)擊才能啟用。入門的成本類似于用市場(chǎng)上的一種主要IDE開始一個(gè)新項(xiàng)目,但是一個(gè)大幅縮水的“項(xiàng)目”。這會(huì)是一個(gè)不錯(cuò)的主意,可以確保這不僅僅是在日常開發(fā)環(huán)境中編寫腳本的機(jī)會(huì),甚至是加以利用就會(huì)很有幫助的。

  6、Unix
  如果你定期使用一些類UNIX系統(tǒng),在尋找鍛煉初期編程技能的方式時(shí)就具有巨大的優(yōu)勢(shì)。UNIX在簡(jiǎn)單腳本自動(dòng)化方面提供了比任何其他家庭通用操作系統(tǒng)的更多的使用機(jī)會(huì),這要感謝平臺(tái)上管理腳本的極大靈活性。在最不復(fù)雜的情況下,一個(gè)管理腳本可能只不過是將一系列shell命令保存到一個(gè)文件中。在此基礎(chǔ)上,可以利用簡(jiǎn)單的循環(huán)和條件結(jié)構(gòu)、輸入輸出處理、文件讀寫、計(jì)劃任務(wù)來進(jìn)行擴(kuò)展。

  通過編寫簡(jiǎn)單shell腳本爽過一把后,花一段時(shí)間來學(xué)習(xí)如何用Perl、Python和Ruby編寫管理腳本對(duì)任何一個(gè)Unix系統(tǒng)管理員都是值得的。在Unix環(huán)境使用這些語言的關(guān)鍵技能包括通過UNIX管道和重定向訪問文本流,處理命令行選項(xiàng),讀寫文件,使用正則表達(dá)式搜索和操作文本。管理員也想知道編程的公共基礎(chǔ)知識(shí),比如處理輸出,循環(huán)(或在某些情況下遞歸),以明確界定的標(biāo)準(zhǔn)為基礎(chǔ),通過使用條件判斷結(jié)構(gòu)編程來作出決策。

  編寫Unix命令行工具是一塊沃土,有許多機(jī)會(huì)將腳本語言的巨大能力用于編程。由于管理腳本開發(fā)的靈活性和簡(jiǎn)約性要求,編寫工具的范圍可以從一些有用工具的最簡(jiǎn)例子到強(qiáng)大的服務(wù)器進(jìn)程,甚至大規(guī)模并行任務(wù)自動(dòng)化,負(fù)載平衡,啟發(fā)式過濾,和一些其他有趣的問題解決作業(yè),這些問題激起了世界上最好的程序員的興趣。

  雖然幾乎所有通用操作系統(tǒng)都具有一些使用管理腳本的能力,其中相當(dāng)一部分用途比較窄,另一些操作系統(tǒng)則比較均衡。Unix在管理腳本的適用條件方面高人一等,因?yàn)橹T如主要Linux發(fā)行版和BSD Unix系統(tǒng)等Unix類系統(tǒng)共享相同的基本運(yùn)行環(huán)境設(shè)計(jì),他們都可以從管理腳本和腳本平臺(tái)之間的可移植性中受益 - 只要你按可移植性要求來寫這些腳本(如通過使用sh或Perl而不是bash,選擇系統(tǒng)標(biāo)準(zhǔn)sysctl值而不是數(shù)據(jù)源的proc文件系統(tǒng))。

  這些工作也適用于除開非常高級(jí),動(dòng)態(tài),解釋型語言之外的其它語言。C,C++,Haskell,Objective-C,Objective Caml,以及大量其他選項(xiàng)正好合適各類簡(jiǎn)單Unix工具的編寫任務(wù)。對(duì)于其中的許多語言,即使要完成像小型管理工具的這樣簡(jiǎn)單的工程項(xiàng)目,也必須學(xué)會(huì)更廣泛的技能,這一要求比Perl,Ruby和Bourne shell的這樣的語言高。但這些任務(wù)與GUI應(yīng)用程序開發(fā)、系統(tǒng)編程、其它經(jīng)常使用(特別是在其他平臺(tái)上的)的任務(wù)比起來,其艱巨性對(duì)編程初學(xué)者來說要小得多。

  實(shí)際上,鑒于Unix哲學(xué)多年來提供了大量常用工具,這些工具嚴(yán)格分工(大部分),并工作良好,類UNIX環(huán)境對(duì)編程新手的價(jià)值中有一部分是充分利用Unix命令行環(huán)境力量,鼓勵(lì)用戶像程序員那樣去思考,而非觀眾。

  7. Web網(wǎng)頁
  這是一個(gè)危險(xiǎn)的建議,通過玩JavaScript來學(xué)習(xí)編程。這不是因?yàn)镴avaScript是一種不好的語言,而是因?yàn)樽非髣?dòng)態(tài)用戶體驗(yàn)的緣故,網(wǎng)頁已經(jīng)被不加限制地濫用JavaSciprt弄得亂七八糟,因而在網(wǎng)頁上放縱程序員新手可能會(huì)被認(rèn)為是不負(fù)責(zé)任的。在網(wǎng)頁中JavaScript也有一些積極用法,而且可以讓新手們對(duì)編寫在瀏覽器中運(yùn)行的桌面應(yīng)用程序的想法愈來愈感興趣,這給了我們?cè)诔绦騿T職業(yè)生涯中盡早開始學(xué)習(xí)JavaScript的很多理由。

  事實(shí)上,JavaScript是一種最常見的、單獨(dú)的客戶端網(wǎng)頁腳本,這也意味著JavaScript可能是最簡(jiǎn)單的語言,通過閱讀別人的代碼就能學(xué)習(xí)。找到具有客戶端動(dòng)態(tài)元素的任何網(wǎng)頁,然后右鍵單擊并選擇查看頁面源代碼的選項(xiàng),你就會(huì)發(fā)現(xiàn)它布滿了JavaScript的散落片段。對(duì)于更復(fù)雜的動(dòng)態(tài)頁面,(X)HTML的網(wǎng)頁甚至可能引用一個(gè)純代碼的單獨(dú).js文件。
在把代碼上傳到公共訪問的Web服務(wù)器前要細(xì)心檢查;確保它是好的。如果你想讓更多的有用腳本以本地方式來啟動(dòng),瀏覽器擴(kuò)展性可以讓你將任意腳本應(yīng)用到你查看的網(wǎng)頁上而且只適用于你個(gè)人的瀏覽體驗(yàn)。Firefox的Greasemonkey是一個(gè)例子。

學(xué)員以上這些建議能對(duì)學(xué)員們?cè)?STRONG>北京北大青鳥的學(xué)習(xí)中及以后的工作中有所幫助。
  

 

北大青鳥網(wǎng)上報(bào)名
北大青鳥招生簡(jiǎn)章