再見Windows C++


我3年多以前寫過一個小工具,是用來檢測Windows操作系統的版本及其所安裝的.NET Framework版本的,我用它來排查由於缺乏運行環境支持所導致的程序無法運行的問題。這個工具是用Visual Studio 2010的C++寫的,為什么不用C#寫?——很明顯,如果一台電腦連.NET都沒安裝的話,那我這個小工具也運行不了啊。我后來還把這個小工具發布出來了:《 Windows及.NET Framework版本檢測工具
 
如果這個小工具不算在內的話,我上一次寫Windows C++程序是2011年11月,許多年過去了……“Windows C++開發”,更專業點說,應稱作“基於原生Windows SDK的程序開發”,它區別於使用.NET、Java、Python之類的需要特定運行平台的開發(使用CLI的C++也不算) ,它曾經是我最擅長和鍾愛的技術,我從2004年開始接觸Windows C++開發,中間所有的工作,或多或少都跟這個有關系,這么算來,我對Windows C++的使用年限有足足7年……
 
人生中許多事情的發展總有很大的偶然性,“一句話改變人的一生”這種雞湯傳聞理智上看是很荒謬,但卻又時時刻刻發生着。我是在高中的時候(1996年)看電腦報有一則笑話,里面有句話,“不懂你說的什么超級C++語言”,以此來表示一個人說話很難理解,當時我對C++完全不懂,但按照字面上意思去看,肯定是先有C,然后有C+,接着才是C++,一個比一個難!難就意味着牛逼,那是肯定的,你想想那些奧林匹克競賽的題目哪有容易的?解開難題才顯得自己牛啊!就這樣,我把C++和“難”和“牛逼”關聯了起來,且接下來很長一段時間里都一直這么認為。
 
我獲得第一份正兒八經的程序員的工作是2003年,那時候在一家外包公司做C開發,C++仍然只懂點皮毛,但無聊單調乏味的外包開發工作激發了我往更深處學習的欲望,我決定好好學學C++,一來自己有C的基礎,二來身邊有位懂C++的同事,有什么不懂可以請教他啊,最關鍵的還是之前植在自己內心深處的這個觀點——這玩意兒牛!就這樣,我買了幾本書,開始了漫長的學習旅程。而在此前,我曾經用過Visual Basic 6.0,我的畢業設計就是用它來做的,這東西多簡單啊!拖拽幾個控件,一個界面就好了,雙擊下按鈕,就可以編寫它的點擊處理方法,而對應的Visual C++ 6.0咋就這么難用呢?我覺得一定是我努力不夠,難學,就意味着里邊學問深,需要花更多的力氣,就這樣,我艱難的啃着書,指望有天能成為傳說中的大神。
 
 
這種學習無疑是低效的(當然我領悟出這個道理時已經是數年后的事情了),為啥?想想看我學VC++的動機是什么?想學點難(牛逼)的東西,然后找份更Exciting的工作,我缺乏明確的方向,我其實並不知道什么時候應當使用VC++,什么時候應當用C,也不去了解對一個問題是否還有更優的解決方案,悶頭悶腦一味看書學,這樣的學習,用武俠小說的套路來說,就是走火入魔的節奏。但現實畢竟是現實,和武俠小說還是有挺大差別,我的努力雖然低效,卻並非無用,在04年的一個炎熱的夏日里,我離開了那家外包公司,原因嘛,一半是被逼,另一半是我確實很想走了,而下一份工作便是真正地使用牛X的Visual C++做牛X的開發!
 
在新的環境中,我長進很快,一個人瞎折騰和有明確的工作目標真是完全兩個不同的世界。事實上,在那家公司的很長一段時間里,我並沒主要在做VC++,而是在做Linux的C++,程序運行在服務器上,領導之所以這么安排主要是看中我之前做過服務器端的C開發,且也是運行在類似的UNIX環境上的吧,再就是我做事情比較仔細,在那個時候,Linux C++並沒有集成開發環境,寫程序的方式就是用CVS(沒錯,SVN還沒起來)把代碼拿下來,用UltraEdit之類的文本編輯器改好,用SSH上傳至服務器,然后Make一下,根本不會設置斷點調試之類的,程序有問題怎么辦?靠日志,以及崩潰出錯之后去靠gdb檢查dump文件,現在回想起來這么落后的方式我居然能把程序做出來還真是個奇跡……也許也正因為這樣,我對Linux的C++開發並不看好,所以在后面說服了領導把我們的服務器也換成Windows的,這樣天下就太平了,領導同意了。
 
在之后的日子里,我就大部分時候都在用VC++了,VC++6的那個看似簡陋無比的界面,一度是我裝逼的利器,我得意地宣稱它簡陋的背后埋藏着高深的技術,而且運行速度飛快,而微軟新出的VS2003、VS2005之流慢得跟個蝸牛似的,面對公司那些做Java開發的同事,我表現得挺不屑,因為我的工具很難用(牛逼),他們搞不定,而他們做的JSP(我之前有接觸過),我要認真學的話很快就能學會了……人生有許多的“輪回”,特別是對一件事情的看法,每個人在不同的時期往往差別很大,甚至截然相反。幾年后我回想起當初這些想法,真是后悔不已,因為在后面的職業生涯中,VC++的使用場景越來越少,而能搞Linux C++開發的人待遇卻很不錯,做Java的人路子更廣。
 
2006年我跳了一次槽,2007年又跳了一次,在這兩家公司里,我都是比較純粹的VC++6的用戶,直到2010年我再次跳槽的時候,距離VC++6推出的時間,已經有11年了,在這些年里,我嘗試着去挖掘VC++的各種威力:
 
  1. 學習COM開發
  2. 深入學習Windows SDK,嘗遍各個函數的調用
  3. 了解Windows內核機制,折騰各種工具
  4. 自學圖形學,OpenGL,嘗試全面優化公司軟件的圖表顯示效果
  5. 嘗試過做驅動開發(DDK),以能把電腦搞藍屏為榮
  6. 居然還學過Windows匯編,寫出過尺寸只有幾個K卻擁有強(廢)大(柴)功能的小程序
  7. 吐槽MFC,嘗試開發一套更實用、簡潔和漂亮的UI框架
  8. 等等等……
 
但遺憾的是,這些東西工作中都用不太到,后來都忘記差不多了,除了一些DEMO之外就沒產生過什么真正能派上用場的產品,工作對我來說大多數時候還是編寫應用程序。那話怎么說來着?閉上眼看到無數的路,睜開眼還是走老路。也許你想知道我用來取代MFC框架的那套東西后來做得怎么樣了,呵呵……弄了一段時間之后放棄了,因為做着做着發覺其實自己就是完完全全的重復造輪子啊,再弄下去一定是走MFC的老路,而且以我的水平,代碼質量肯定遠不如MFC的。
 
我不再使用VC++6是2010年,一來是VC++6確實太舊了,微軟早就拋棄了它,而我想如果我再不做出一些改變,也是要被世界拋棄的了;二來是因為我接下來要從事的Windows Mobile的開發,根本沒法用VC++6來做,Windows Mobile的開發和Windows開發有些差別,但大致上體驗一致,Windows Mobile SDK只支持Visual Studio 2005和Visual Studio 2008,我果斷選擇了2008。一開始覺得它慢,各種不適,但適應這東西其實也就個時間的問題,有時候“覺得不適”甚至是妨礙自己前進的一種借口,聽沒聽說過“要想進步,就不要總是活在自己的心里舒適區”這個道理?
 
Windows Mobile這個項目注定不能成功,因為這是個急速走向沒落的平台,這是一起嚴重的押寶事故,我們在2011年11月停止了這個項目,然后我轉入做.NET開發,如今想想這真是個好的轉機,從那時候起,我涉獵范圍漸漸變得寬廣,眼界也漸漸開闊。用Windows C++做應用開發,這無疑是性價比很低的,引用別人的一句話:“你扶不正老人砌的牆,填不平新人挖的坑”,通常只用於一些比較特殊的領域了,如圖形、游戲引擎、追求極致的基礎算法以及驅動(准確說驅動開發用的是DDK而不是原生Windows SDK)。
 
一個做技術的人如何提高自己比較好?我覺得還是要跟公司保持一致比較好,公司要做什么,你就去做什么,針對業務問題,去尋找最妥當的解決方案,把這些問題都解決了,你的技術水平也就牛逼了。就像這個博客的副標題所說的那樣:技術為解決問題而生!難度大的技術不等於牛逼的技術,看上去酷炫的技術也不意味着很有前途,而個人的喜好更加無關緊要,最關鍵的還是要解決公司的問題,我長期以來所走的彎路大多也是因為自己沒能與公司的步伐保持一致。
 
回到本文開始提到的那個小工具,我用最新的VS2015打開它,更新了一些代碼,發覺自己寫起代碼來真是很費勁,C++太難用了,而VS2015默認情況下居然不帶安裝C++,最新的Windows 10 SDK也默認不安裝,也許微軟覺得這些東西都已經很小眾了。我把編譯好的程序發給同事用,發現她的Windows XP系統運行不了,后來我才知道要把項目選項中的“Platform Toolset”改為“v140_xp”方可,至於更早以前的Windows 2000,那是根本沒有辦法了,除非使用更低版本的Visual Studio去開發了,當初的我總是想編寫那種短小精悍零依賴的牛逼程序,如今的我早就不這么想了,很多舊的東西,該淘汰就淘汰了。
 
本文標題“再見Windows C++”中的“再見”,其實不是“告別”的意思,而是“再次見到”,如BEYOND的那首《再見理想》所表達的那樣,Windows C++就像一把舊吉他,曾經陪伴我走過很長的路,后來不再用了,覺得已經不再適合,但偶爾我也會重拾情懷,回想起它一下,所以“再見”,但情懷歸情懷,生活歸生活,用和不用,那得看看要解決的是什么問題。
 
最后發布一下這個小工具的最新版,也藉此紀念Windows C++陪我走過的那些青蔥歲月。
 
SysInfoDetector_exe.zip (可執行文件)
SysInfoDetector_src.zip (源代碼, VS2015)
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM