對Windows學習的總結

對Windows學習的總結

我從事Windows平臺的開發斷斷續續大概也有4年了。這裏想對自己的學習過程進行一個總結。因爲我並不是專職的開發人員,所以水平也有限。不過相比其他人的學習之路,我的總結也還頗有可取之處。

首先,因爲我從本科開始所學專業爲計算機,現已讀到博士學位,所以我的學習之路會更加紮實,不是簡單編程技能的鍛鍊,對於所需的基礎知識,我會在文中點出。

其二,因爲機緣,身邊並沒有Windows端的高手,所以編程方面所學的東西基本爲自學。其中過程,自己也有很多感慨,文中也會有所提及。

階段一,書海無邊

我接到的第一個任務是開發一個ActiveX控件。當時覺得這不是一個輕鬆地活,直到現在我也認爲,對於學習Windows端開發而言,這不是一個好的切入點。

ActiveX技術需要對MFC、COM、Windows內部通信、跨語言數據交換機制等等很多技術都要學習和了解。這裏面的每一項技術都不好理解,單獨拿出來都足以寫一本厚厚的書(你確實可以買到獨立講解這裏面每種技術的書籍)。其次,ActiveX技術是一個冷門。因爲Flash,Java Applet等等技術發展勢頭良好,微軟已無力招架。你可以找到的學習資料也都很老了,ActiveX像一種被人遺棄的技術,給你學會後也無所用的感覺。所以這絕對不是一個好的切入點。

學習Windows好的切入點是什麼呢?Windows API,是最好的切入點。雖然你也發覺Windows API光函數名就有2000多個,幾十頁之多,但這確實是學習Windows最好的切入點。

首先,它是Windows暴露給用戶最直接的藉口,你不用再學習任何上層的框架,學習負擔是最小的。其次,利用Windows API開發就是面向過程的思維。對於開發水平不高的人,理解和掌握面向過程的思維都想對容易。你不要覺得寫了幾個類就是面向對象的編程。面向對象是一種認識和抽象世界的方式,需要反覆的理解和思考,沒有幾年的功夫請不要說你懂面向對象的編程(其實有幾年功夫也未必懂,關鍵還是要有悟性)。然後,已有很多人對Windows API進行了總結和整理,你可以查詢的資料豐富異常,而且有大量的練習例子。

當然無論入門切入點的好與不好,對剛入門的人來說,都用一種書海無邊的感覺。同時工作時限又在那裏擺着,你會感覺壓力倍增。人在焦急狀態下是很難學進去東西。這是學習任何新東西的入門屏障。下面我來回想一下自己是如何破解的。

首先,以完成任務爲首要目標。以完成交代的工作爲首要目標,緊密圍繞這個進行。你會在完成工作中遇到很多新知識、新問題,不要過於去糾結在這上面,能達到功能,解決問題就繼續往下走,不要去深入問題,深入學習,那樣你將無法完成工作。

其次,發現必須學習理解的東西,一定要不惜時間的深入理解。比如,你必須用到的一段代碼,一個函數。那麼你必須不惜時間的把它的每一行,每一個參數都讀懂。切記,不要有半點的不懂,不能有一個參數的設置是不理解的。因爲只要你有一點不懂,那麼你的程序必定會出各種奇奇怪怪的現象。其實不是現象奇怪,是你沒有理解。牢記一句編程定理:計算機永遠不會錯,一定是你的錯

最後,惡補與反思。完成任務過程中,要記錄下所有不懂的名詞、術語,以及遇到的各種問題。在完成任務後,反過來惡補這些知識。這是提高的基礎,反思是提高的手段。通過反思更好的做法,實驗自己的所想,改進程序,你纔能有所提高。

對於Windows編程的入門者,需要理解的是編譯原理, 操作系統。編譯原理告訴你,一行一行代碼是如何變成可以執行的程序。操作系統,告訴你爲什麼Windows會公開這些API,以及這些API是以什麼方式進行組織的。

階段二,模仿學習

其實模仿和學習纔是學習的第一個階段。我是因爲自學入門時有太多感慨,纔將書海無邊定義爲學習的第一個階段。如果有人帶你,循序漸進的學習,那麼書海無邊的感覺會少很多。(不要奢望有人會手把手教你,這是一種奢侈。在不同的階段,有人肯點撥一下已是人生大幸。)

這個階段沒有特別的感觸,就是練習各種函數、各種庫的用法,各種特效如何做。反正就是練習,枯燥無聊的練習,這是基本功。是必不可少的,你對程序的感覺,完全來自於此。所以我很討厭學計算機的人,每天就拿個鼠標在哪裏東點點,西點點。不把鍵盤敲得劈里啪啦,你能學好才叫怪了。(十萬行代碼是入門)

階段三,精妙原理

很高興,我又有新的工作和任務了,開發Windows桌面程序。有了前面的枯燥練習和基礎知識的補充,你並不能快速的開發程序,完成工作。大量成熟的開發庫,開發框架纔是開發真正的利器。它們的存在也是爲什麼,外面培訓出來的人,其開發速度遠在你之上的原因。當然你不用擔心,你前面的積累不會白費,只是積累的還不夠,慢慢來吧。

對開發庫,開發框架使用的掌握,我不用說,對這個時候的你應該十分容易了,不就是照着例子做一下就好。對程序悟性好的人,可以在使用某個功能的時候自然地聯想到,它還會提供什麼功能,不然這個庫/框架就太爛了。

精妙原理,指的是庫/框架內部的運行原理,應該說框架內部的運行原理更恰當。現在大家使用的成熟開發框架,都不是等閒之輩做出來的。裏面凝聚了無數高手、高高手的心血。也是因爲機緣,我選擇並不是當下最流行的開發框架,而是老到不行的MFC。但MFC的經典程度是無可替代啊。不是說該框架有多麼好,而是它的影響力估計是無人能敵。想當年,中國多少博士因使用MFC開發而畢業。

框架設計的精妙之處,不是一時半會兒就能理解的。通常來講,解析這個框架的書一般都有好幾頁,甚至上千頁。所以,你光把書讀完一遍都需要些時日。而且你還不能只讀一本,那你也是理解不透的。

下面談談如何渡過這個階段吧。

首先,書讀百遍,其義自現。我使用的是MFC框架,就《深入淺出MFC》這本書,完整的閱讀完,我是讀了四編。其中反覆查詢的情況就不談了。

其次,追蹤足跡。開源的框架,是設置斷點,追蹤足跡最好的選擇。對於MFC你能看到的源碼很有限。這個時候,一定要結合書本,尋找主幹。不要什麼都看,MFC框架,浩浩蕩蕩也有好幾十萬的代碼。大體上需要看懂三個部分:

1.       靜態結構。類之間的層次,引用結構。

2.       動態運轉。看懂關鍵調用的來龍去脈。

3.       併發處理。加入多線程,併發處理很多簡單的事就會複雜起來。看看框架是如何處理共享變量,隔離各個線程運行環境等等工作的。

最後,深而精閱讀。爲了深入理解一個框架,你需要閱讀很多書籍。其中一定要有側重。對於Windows開發而言,對C++,Windows多線程編程,Windows操作系統,設計模式,是需要反覆閱讀,深入理解的。

階段四,全盤思維

       經歷了第三個階段,你已經懂了很多,也做了很多基礎練習。是時候要動手做個大點的東西來融會貫通這些東西了。

       很高興,因爲團隊不大,這裏我有個機會可以負責一個較爲完整項目的開發。功能不復雜,但有核心算法的難點,需使用不同的語言,有網絡通信,有多線程處理,有性能要求,有多個平臺處理等等。簡而言之,不是一個原型,不是一個示例,是個有點像模像樣的產品。

       你需要考慮的問題就很多了。我梳理一下大概包括下面幾類:

1.       確定邊界。確定程序的功能邊界,確定與其他已有系統的接口邊界。

2.       業務邏輯/應用邏輯。梳理優化,形成文檔是必須的。 其實1,2點是交織在一起的。

3.       獨立出核心問題。將需要遇到的核心,困難的問題找出來,如果時間充足做必要而完善的實驗。不行就尋找可用的替代方案。

4.       程序架構的確定。這是個需要豐富經驗的活,如果架構不好程序後續很多功能無法擴展,開發難度也會陡增。

5.       工作劃分。核心程序一定要由水平不錯的人開發。各層分隔開,並行開發。每一層或者說每一個大模塊有獨立的能負責得了全盤的人負責。不僅是開發完成,是要在規定的時間內完成。(經過一個項目後,你對自己的開發能力和開發用時就有把握了。對於什麼水平的人具備什麼樣的能力也就清楚了)

6.       測試與修改。不要等到所有的功能開發完再測試。完成一個模塊,就需要測試。核心程序需要在開發過程中就做性能測試。一層一層,一個模塊一個模塊都要測,從下至上的來保證質量。

7.       安裝與實施。這個絕不是簡單的問題。程序的安裝,自動升級等等功能,會反過來作用於你的代碼設計。雖然寫到最後,其實是需要一開始就考慮的。還有現場環境永遠比你想象的複雜,請盡力做充足的準備,輸出日誌,簡化安裝等等,做好你能做的所有事。

我不知道,寫到這裏還算不算編程的能力。不過這是一個講究團隊配合的時代,編程已不是個人的能力。無論你是參與一個項目,還是負責一個項目,瞭解這些對你都是有好處的。

這裏強調全盤思維,不僅是你程序設計的全盤考慮,也是你與他人配合的全盤考慮。不要單獨作戰,其實人也不要多,兩個人就是團隊,就需要有主有從,你就可以在這裏面鍛鍊自己。

階段五,未完之路

寫到這兒,我想說你纔剛剛入門。因爲你才具備了基本而較爲全面的能力,這是一種技術實現能力。下面你要做的事很多,可以向更深的方面走。比如學習更大的框架,加入更大的團隊。或者選擇你感興趣的領域,深入的研究,不僅是技術的實現,你可以深入其中的理論。當然你也可以選擇向更廣的方向走,重複上面階段1到階段3來學習新的技術,開發各種有意思的應用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章