1 基本作業: 從Hello World開始
要求每個讀者(或者學生)開始管理自己的源代碼:
- 每個人都有一個VSTS的客戶端,系統管理員給每一個人都創建了TFS項目,每個學員都是各自項目的管理員。
- 每個同學去申請一個GitHub [i]的項目,或者 www.coding.net 項目,存放源程序和其他文檔。
下面的練習可以用來鍛煉學生的編程基本功。
(1)全部用命令行工具和notepad編輯器,不用Visual Studio 等集成編輯環境,每人手工創建並編譯一個C的命令行程序:“Hello World”。
(2)練習數值計算。找出一個整數數組中子數組之和的最大值,例如:數組[1, -2, 3, 5, -1],返回8(因為符合要求的子數組是 [3, 5]);數組[1, -2, 3, -8, 5, 1],返回6(因為符合要求的子數組是 [5, 1]); 數組[1, -2, 3,-2, 5, 1],返回7(因為符合要求的子數組是 [3, -2, 5, 1])。
(3)寫一個命令行程序, 找出一本英文長篇小說中最常出現的字母數大於 4 的單詞的前十名, 和最常出現的兩個相鄰單詞的短語前十名。 並用效能分析工具來分析程序中最費時的函數是什么, 如何改進? 請看《構建之法》 中效能分析部分。
(4)使用工具Visual Studio,創建一個C++或C# Windows程序,在主窗口中顯示“Hello World”,用戶可以用鼠標拖動“Hello World”在主窗口中移動。
(5)很多同學自己會寫不少程序,但是往往看不懂別人寫的程序,這也需要練習。不借助電腦的幫助,回答下面的問題(如代碼清單2-8所示)。

問題1:這個程序要找的是符合什么條件的數?
問題2:這樣的數存在么?符合這一條件的最小的數是什么?
問題3:在電腦上運行這一程序,你估計多長時間才能輸出第一個結果?時間精確到分鍾(電腦:單核CPU 4.0G Hz,內存和硬盤等資源充足)。
問題4:在多核電腦上如何提高這一程序的運行效率?
2 軟件工程和程序設計大作業的調查
請同學們做一個調查,到相關的軟件學院或計算機學院采訪學長或學弟學妹,調查一下程序設計大作業的完成情況:程序花多少時間完成?程序量是多少(多少行代碼)?開發過程中使用了源代碼管理等工具么? 完全獨立完成的同學有多少個?程序解決實際問題么?在一些學校里,全班50 個同學,交上來的作業只有 4 到 5 種版本。這說明了什么?
3 效能分析的討論
果凍:噫吁唏,危乎高哉!我以前一直害怕做效能分析,看來是否會用效能分析工具來提高程序質量是一個優秀程序員的標志之一。我在今天之前都是盲人騎瞎馬。
小飛:改成盲人摸象更恰當。我聽說,如果一個程序員從來沒有用過效能分析工具,那他就不是一個程序員,只是一個編程愛好者罷了。
我的WC 程序事實上是最快的。但是在今天的程序評比之前,我想更進一步,就再優化了一下,估計能把速度提高2%。沒想到出了一個小錯誤,導致報告的結果(行數、詞數、字數)僅僅差了1。由於程序不正確,因此不能參加速度評比。我才是最需要大喊“噫吁唏”的人。
阿超:這有兩個教訓:
(1)先保證正確性,再提高效能。一個“僅僅差了1”的錯誤可能會導致緩沖區溢出(Buffer Overflow[i])的嚴重漏洞。
(2)如果效能的提高效果在5%以下,用戶不會注意到程序效能的區別。所以要考慮那些微小的提高是否值得。
另外,WordFreq算法的時間復雜度是多少?能否再優化?請寫實際程序加以驗證。
荔荔:怎么才能快捷地得到有適量重復文字的文件,來幫助我們進行測試和效能分析?
小飛:我是這樣做的,在電腦的根目錄下,運行“dir /s > c:\temp\test.txt”命令。
阿超:好主意,大家還有沒有別的辦法?