對於剛剛接觸程式設計的人來說,怎樣學習程式設計?學習程式設計要注意哪些方面?學習程式設計要從哪些方面著手才能更快進入程式設計世界?怎樣做才是掌握了程式設計的要義呢?這一系列的問題都是一名程式設計初學者最關心的問題,今天,筆者從7個方面分析如何學習程式設計。
步驟/方法
資料庫管理系統(DBMSes)
諸如PostgreSQL、 Oracle、Microsoft SQL Server,以及Informix這種專業、耐用的資料庫管理系統通過儲存過程或儲存函式提供了指令碼功能。最受廣泛認可的語言選項也許是Microsoft SQL Server和Sybase所使用的TransactSQL,以及Oracle所使用的PL/SQL。 PostgreSQL提供了一個名為PL/pgSQL的類PL/SQL的程式擴充套件到SQL裡,但它也提供了包括PL/Perl、PL/Python、PL/Ruby和 PL/Tcl在內的其他語言的選擇範圍。
這種程式設計機會雖然限定於一組特定的問題領域,但如果你是一名DBA(資料庫管理員)或你的工作涉及資料庫開發報告,將會親身體驗到這是非常有用的。
外掛
許多新的電腦遊戲提供了編寫和載入外掛的功能。例如,“魔獸世界(World of Warcraft)”提供了一個使用Lua指令碼語言的外掛系統。隨著Firefox聲名鵲起和廣泛使用,現代網頁瀏覽器往往也提供靈活的外掛系統;在最簡單的情況下,Firefox的外掛都是用JavaScript編寫的。開放原始碼的瀏覽器在外掛開發方面往往比封閉原始碼的瀏覽器更具吸引力,並且Chromium瀏覽器的外掛系統,很可能成為外掛開發者們的第二大目標,這是因為谷歌Chrome瀏覽器高調的營銷策略以及不設限的許可證(permissive licensing)政策。
其他許多應用程式具有外掛和擴充套件系統,可以提供充分的機會來培養這些迅速發展的編碼技能,甚至包括一些終端模擬器(terminal emulators)和基於控制檯的文字編輯器,如Vim。(透露一點好訊息:我貢獻了一點程式碼到urlpicker專案。)
實踐問題
您可以嘗試解決程式碼任務中的通用清單所提供的問題,程式碼任務是特別為了給程式設計師提供實習機會而專業設計的。尤拉(Project Euler)是一個比較流行的、不論程式語言的專案,包括“一系列具有挑戰性的數學/計算機程式設計問題”。尤拉專案收集了上百個問題,這些問題一般從易到難,足以讓你忙碌很長一段時間。
其他例子包括RubyQuiz,它多年來一直在ruby-talk的郵件列表中廣受歡迎。另外還有CodeKata,它是Dave Thomas的一個規模較小、壽命較短的專案。Dave Thomas是《The Pragmatic Programmer(程式設計師修煉之道)》一書的合著者之一。
這些選項不適合用作自我激勵型探索性學習的任務,因為它們會讓人撓破頭皮,但如果發現其中的樂趣,它們可以和其它方法一樣用於程式設計實踐教育。
智慧手機(Smartphones)
應用程式開發行業中最大的新熱潮是智慧手機的應用程式。這種裝置通常需要開發人員使用一種可將裝置的功能發揮到極至的特定語言作為應用平臺,至少要以官方認可的方式進行。
智慧手機開發體系的一個新興產業正在崛起,即允許開發人員用非智慧手機平臺原生的其它語言編寫自己的程式碼,然後轉化為原生語言的應用程式。 因為不需要學習任何特定的智慧手機平臺的官方應用程式開發語言,Web應用程式也沾了光,成為智慧手機應用程式開發的一種方法。選擇語言甚於平臺的另一個方案是使用像諾基亞的N900這樣的裝置,它執行Debian發行的Linux系統,可以執行的軟體範圍很寬——包括很多不是為智慧手機設計的軟體。
側重於多種方法開發智慧手機應用程式的書籍和線上教程紛紛出現,特別是Android和iPhone的裝置。一些第三方框架將可以從HTML + JavaScript 到 Ruby 或 Python編寫的程式碼“編譯”為多種平臺的“本地”應用程式,有時不僅包括智慧電話平臺,而且包括桌面系統。對這種情況也許最令人興奮的是,這些框架和相關的IDE不傾向於試圖解決所有的程式設計問題,這與同樣出色的程式設計方式的主要框架,如Visual Studio和.NET框架有所不同。這使得人們有可能通過縮小選項至一個易於管理的問題領域來顯著地簡化開發過程。其結果是軟體開發風格令初學者感到非常易於接受。
不足之處是,在學習如何程式設計時,你可能很難每天都編寫新的智慧手機應用程式。但是,如果您的智慧手機的作業系統是類Unix系統(如N900的),同樣的小工具開發專案在工作站和伺服器中都非常有用。
電子表格
如果使用了附帶強大巨集系統的電子表格程式,你將擁有一個快速的方法來閱讀其他人(或物)程式碼,並編寫自己的程式碼。首先,將你執行次數多、通常需要採取數個繁瑣步驟的任務記錄成一個巨集。接下來,開啟巨集的原始碼,閱讀並進行編輯,使之更適合於一般用途。這是一個非常有限的方法,不會帶來多大的長進,但可能會幫助你上路,自然地喜歡上簡單的指令碼程式碼。
使用此類指令碼的最常見的電子表格程式可能是微軟Excel。Excel所使用的VBA是一種貧乏的語言,但是如果你在日常工作中大量使用Excel,這可能是無論如何你都該掌握的一種技能。OpenOffice.org使用了類似的巨集系統,使用方法大致相同,LibreOffice也像微軟Office一樣,提供了學習程式碼的機會。
在任何情況下,編寫程式的門坎都比編寫簡單的命令列shell指令碼程式碼稍高,因為選單選項和按鈕需要點選才能啟用。入門的成本類似於用市場上的一種主要IDE開始一個新專案,但是一個大幅縮水的“專案”。這會是一個不錯的主意,可以確保這不僅僅是在日常開發環境中編寫指令碼的機會,甚至是加以利用就會很有幫助的。
Unix
如果你定期使用一些類UNIX系統,在尋找鍛鍊初期程式設計技能的方式時就具有巨大的優勢。UNIX在簡單指令碼自動化方面提供了比任何其他家庭通用作業系統的更多的使用機會,這要感謝平臺上管理指令碼的極大靈活性。在最不復雜的情況下,一個管理指令碼可能只不過是將一系列shell命令儲存到一個檔案中。在此基礎上,可以利用簡單的迴圈和條件結構、輸入輸出處理、檔案讀寫、計劃任務來進行擴充套件。
通過編寫簡單shell指令碼爽過一把後,花一段時間來學習如何用Perl、Python和Ruby編寫管理指令碼對任何一個Unix系統管理員都是值得的。在Unix環境使用這些語言的關鍵技能包括通過UNIX管道和重定向訪問文字流,處理命令列選項,讀寫檔案,使用正則表示式搜尋和操作文字。管理員也想知道程式設計的公共基礎知識,比如處理輸出,迴圈(或在某些情況下遞迴),以明確界定的標準為基礎,通過使用條件判斷結構程式設計來作出決策。
編寫Unix命令列工具是一塊沃土,有許多機會將指令碼語言的巨大能力用於程式設計。由於管理指令碼開發的靈活性和簡約性要求,編寫工具的範圍可以從一些有用工具的最簡例子到強大的伺服器程序,甚至大規模並行任務自動化,負載平衡,啟發式過濾,和一些其他有趣的問題解決作業,這些問題激起了世界上最好的程式設計師的興趣。
雖然幾乎所有通用作業系統都具有一些使用管理指令碼的能力,其中相當一部分用途比較窄,另一些作業系統則比較均衡。Unix在管理指令碼的適用條件方面高人一等,因為諸如主要Linux發行版和BSD Unix系統等Unix類系統共享相同的基本執行環境設計,他們都可以從管理指令碼和指令碼平臺之間的可移植性中受益 - 只要你按可移植性要求來寫這些指令碼(如通過使用sh或Perl而不是bash,選擇系統標準sysctl值而不是資料來源的proc檔案系統)。
這些工作也適用於除開非常高階,動態,解釋型語言之外的其它語言。C,C++,Haskell,Objective-C,Objective Caml,以及大量其他選項正好合適各類簡單Unix工具的編寫任務。對於其中的許多語言,即使要完成像小型管理工具的這樣簡單的工程專案,也必須學會更廣泛的技能,這一要求比Perl,Ruby和Bourne shell的這樣的語言高。但這些任務與GUI應用程式開發、系統程式設計、其它經常使用(特別是在其他平臺上的)的任務比起來,其艱鉅性對程式設計初學者來說要小得多。
實際上,鑑於Unix哲學多年來提供了大量常用工具,這些工具嚴格分工(大部分),並工作良好,類UNIX環境對程式設計新手的價值中有一部分是充分利用Unix命令列環境力量,鼓勵使用者像程式設計師那樣去思考,而非觀眾。
Web網頁
這是一個危險的建議,通過玩JavaScript來學習程式設計。這不是因為JavaScript是一種不好的語言,而是因為追求動態使用者體驗的緣故,網頁已經被不加限制地濫用JavaSciprt弄得亂七八糟,因而在網頁上放縱程式設計師新手可能會被認為是不負責任的。在網頁中JavaScript也有一些積極用法,而且可以讓新手們對編寫在瀏覽器中執行的桌面應用程式的想法愈來愈感興趣,這給了我們在程式設計師職業生涯中儘早開始學習JavaScript的很多理由。
事實上,JavaScript是一種最常見的、單獨的客戶端網頁尾本,這也意味著JavaScript可能是最簡單的語言,通過閱讀別人的程式碼就能學習。找到具有客戶端動態元素的任何網頁,然後右鍵單擊並選擇檢視頁面原始碼的選項,你就會發現它佈滿了JavaScript的散落片段。對於更復雜的動態頁面,(X)HTML的網頁甚至可能引用一個純程式碼的單獨.js檔案。
在把程式碼上傳到公共訪問的Web伺服器前要細心檢查;確保它是好的。如果你想讓更多的有用指令碼以本地方式來啟動,瀏覽器擴充套件性可以讓你將任意指令碼應用到你檢視的網頁上——而且只適用於你個人的瀏覽體驗。Firefox的Greasemonkey是一個例子。
注意事項
學習程式設計最重要的還是動手實踐。