一個月掌握VC++2010?
我個人對C++毫無概念,但在實際做項目的時候,僅僅用了一個月的時間,在完成當月工作的同時,就能夠沒有障礙進行相當復雜的應用開發。這個過程耗時之短或許不可思議,但采納同樣的方法,相信所有程序員都能夠做到。這種方法說白了,就是邊學邊干。對,就是很多培訓機構強調的,在實際項目中學習。不過,略有不同的,是我更加強調以下幾點:
1、絕不做成學習項目:即使是最簡單的功能,要做成實際產品級別,這意味著幾乎成倍的時間投入。
2、每個階段只面對最少的知識點:只學習需要的東西。
3、項目不斷延伸的時候,掌握知識的范圍開始擴大,但此時已經具備一定的基礎,學習難度已經降低。
我用來學習的功能是:導入股票日線數據。 這涉及到界面開發、文件操作、本地數據庫操作、進度顯示、多線程等專題知識。
學生項目,通常是這樣的:
1、用戶選擇一個文件
2、系統將文件里的日線識別出來
3、系統將這些日線寫入到數據庫
界面是這樣的:一個選擇文件按鈕,一個導入按鈕,一個顯示文件名稱的文本框。
而作為實際產品級的開發,你顯然需要考慮更多,包括:
1、應用程序的窗體大小變化的時候,你的界面是不是會顯得很奇怪?
2、用戶選擇的文件,不是日線文件的時候,系統該怎樣反應?
3、導入的速度較慢,是不是應該用進度條?
4、使用進度條的時候界面往往凍結,需要開新的線程進度條才會流暢顯示,這涉及到多線程編程
5、如何提高導入的速度?
6、導入日線的過程是一個每天都要做的事情,如果用戶的數學紊亂了怎么辦?這需要刪除全部日線的功能
7、用戶僅僅記不清最近兩三天是否每天都導入了數據,怎么辦?
8、用戶需要進去后就看到目前系統中的最新日線是那一天的
9、用戶希望知道導入過程真正耗時多少。
考慮到這些更多的因素,界面設計顯然有較大的不同。同時,因為這樣產品級的開發要求,在學習的過程中會覆蓋更多的知識范圍,與此同時,經過僅僅一個項目的淬煉,今后任何項目,程序員都會知道該怎樣思考、該考慮哪些問題、遇到沒有接觸過的知識該怎樣學習。換句話說,一個月的時間完成這項功能的同時,這位程序員就不再需要老師,并且能夠勝任所有的VC項目開發。
關注點切換的過程是這樣的:
1、最初,我考慮界面的菜單結構:顯然,VS2010帶來了最新的Ribbon風格,我需要知道怎樣創建項目支持相應功能
2、怎樣響應Ribbon按鈕的命令?理解消息機制
3、怎樣創建自己的窗口:對話框設計器、為對話框創建類、對話框類的實例化、在事件代碼中打開這個對話框
4、怎樣在視圖區域打開對話框,以造成一個整體的印象?簡單理解文檔視圖結構,獲取視圖的大小、使用子對話框
5、怎樣為對話框加入控件?對話框數據交換機制、添加控件變量
6、應用程序窗口變化的時候,如何保持對話框布局?多數對話框保持大小,居中顯示,少數使用EasySize處理布局。
7、識別日線文件:C++類的創建、相應語法知識,比如代碼頁、多語言、幾種字符串、完全的unicode應用等。
8、寫入Sqlite數據庫:如何使用第三方Dll
9、如何顯示進度:開啟新的線程、中止線程、線程安全性問題。
10、提高導入的性能:數據庫事務問題、內存使用問題、索引問題。
11、顯示導入所消耗的時間
12、刪除全部日線:使用第三方的Sqlite組件
13、刪除最近5天的數據:Sql命令的技巧,界面如何響應?
14、刪除全部日線
15、檢查日線文件格式是否合法
看,前后經歷這么十五個步驟,很明顯,過程中任何一個時刻,我只關注解決當前面臨的問題。
以前臺灣的侯捷,寫過一本MFC機制解析的書,厚厚的一本。這本書很多人評價不錯,但我沒想過看這樣的書。為什么?工作過程中,我不需要知道原理,這并不代表知其然不知其所以然。我們學會使用,與完全弄清其工作機制,所需要的時間差距至少在二十倍以上。簡單的說:你買來電視是為了看的,不是為了拆的,學會看電視大約只需要幾分鐘,學會組裝電視甚至維修電路板,這需要的時間不會少于一年。MFC是微軟的產品,作為程序員我們是用戶,我們將其看成一個黑箱,知道怎么用、知道使用方面的原理就行了。
因此在我看來,類似侯捷這種公認的高手,其實要么是真正的笨蛋,要么就是吃飽了撐的,無論怎樣他都不是一個合格的程序員。為什么?任何一種職業,追求的都是效率,即用最短的時間做能力范圍內最多的事情。你甚至分不清所需要的知識的邏輯層次,又怎能奢談高手?一個人有限的生命,應該用在真正有意義的事情上。
這項功能用了一個月的時間完成。我記得后來,開始做第二項功能,也就是顯示一只股票的K線圖,這就涉及到了C++模版、Gdi+和DirectX的選擇、雙緩沖問題、熱鍵問題等,但在具備了上個月的基礎之后,這些委實都算不上多大的難題,一一很輕松的解決。第二項功能,事實上也是在你開發延伸的過程中,知識延伸的過程。掌握最少的基礎知識加上最快的學習能力,這應該是每一個程序員追求的。
當然,這種學習方法,并不是只能用在VC上面,比如公司開始使用Asp.net Mvc 3進行開發的時候,我用Asp.net Mvc 3,用不到兩周的時間重寫了上面提到的日線導入功能,當然,這也意味著后面項目中,完全能夠做到無障礙開發了。

浙公網安備 33010602011771號