對我第一次寫C/C++代碼的回憶
第一次在知乎寫專欄文章,請大家多多包涵
我是通過自學C/C++而入門的,但是我的入門方式比較奇葩……
在自學C/C++之前,我已經依次自學了VB,C#,http://VB.Net,Pascal和AutoIT;基本是看書自學。最後也寫了不少自娛自樂用工具,也發布了自己最初的兩個公開作品即NKMSKit和NSudo;因此認識了很多人也加了很多群。
其中,初二那年,我發現一個用Visual Studio編譯的演示用操作系統;把其改了個名字,就當作原創名字去貼吧水了貼……當然最後被發現了;這也是我的黑歷史之一,也是我第一次看到用C語言寫的代碼。
PS:最後識破我的那位不知道怎麼地加了我QQ;某天突然談到曾經他在貼吧碰到一位改了版權就發布原創操作系統的人,如果他沒被打擊會不會出現一個自主編寫的操作系統……我當時想……如果有空的話,我打算堂堂正正的寫一個使用自己所思考的系統架構的操作系統。
接下來很多年,雖然很想學習C/C++,但卻沒有絲毫進展。因為見到空白的編輯器我就害怕……甚至都想放棄學習C/C++改去研究彙編(但當年最終還是沒看懂)。因為當年我學習的語言大部分都提供界面設計器,可以方便的寫出能用的傢伙來;而C/C++卻沒有。
後來通過為Dism管理器提建議而認識了鴨子(@mingkuang );其中我請教過他如何能像C#那樣寫C/C++代碼;他給我推薦了MFC,MFC雖然好用;但是編譯出來的傢伙比我用AutoIT寫的還大……最終也作罷
某天我請教鴨子關於如何解決Microsoft Office打補丁後系統盤可用空間極速減小的問題,於是討論到了Installer目錄清理,但是他說他的方案其實並不完美……我當時想鼓起勇氣寫第一行C/C++代碼,於是跟鴨子說我想改善下Installer清理而且告訴他我會在源文件的署名上加上他的名字……當時如果沒記錯的話,鴨子很感動。
後來Dism管理器碰到發展瓶頸,鴨子開始使用DismCore替代DismAPI開發下一代Dism管理器的時候,給我發了不少未公開的DismCore API的定義。當時我看了看裡面的內容;但畢竟自己當年C風格語言我只能用C#,於是大部分內容還是看不懂……
那年的暑假,我去新華書店尋找一本能像六年級看的VB教程一樣好用的學習C/C++的書;於是看中了C++ Primer Plus;走之前我依依不捨,於是舅舅發現了並給我買下了這本書。接著去舅舅家玩,剛好Microsoft_Mars希望我幫忙做一個RHYTHM MASTER(幾年後我才知道這個東西是節奏大師,估計是由於當時我不玩遊戲且他全用大寫英文字母和我討論的緣故)轉換OSU樂譜的小工具。直到那年七月的最後一天,才寫出相對好一點的AutoIT腳本。那時我發現演算法的必要性。默默懊悔自己初二參加NOIP對演算法不屑一顧的時候……
突然鴨子在QQ上邀請我,希望我加入他的團隊參與下一代維護工具的開發。我當時就告訴鴨子我不會用C/C++沒法幫忙,但他說我可以藉此機會學習,於是還是把我拉入了團隊……那天晚上鴨子問我關於熱備份需要調用什麼,我說需要使用卷影複製(我知道是因為曾經寫過一個調用Dism的備份工具……想實現熱備份,但看不懂代碼,於是做吧);於是鴨子希望我能幫他完成一個調用卷影複製獲取卷影副本以用於系統熱備份的函數。於是我戰戰兢兢地答應了。
那天晚上我遍翻C++ Primer Plus+邊搜百度的情況,順便憑藉著使用C#的印象;最終用Notepad++完成了函數,雖然沒有編譯和調試,但還是發給了鴨子。因為當年舅舅家的電腦跑不動Visual Studio。後來鴨子把除錯後的代碼發給了我,讓我對比原來我寫的代碼,讓我研究我寫的不正確的地方,同時也建議我應該先看C/C++的類型方面的內容。於是一發不可收拾,喜歡上了C/C++。
這就是我從第一次碰C/C++代碼到第一次寫C/C++代碼的經歷。我的感受是,如果你能跨出第一步,那麼就有了很大進展。學習任何東西,關鍵還是跨出第一步。
順便解決下大家可能會有的疑問:
- Q:當年鴨子邀請樓主參與的下一代維護工具是?
- A:就是你們現在用的Dism++
- Q:樓主第一次寫的C/C++代碼最後被擱置了嗎?
- A:我那年寫的大部分C/C++代碼最終都被擱置了;但這個是例外,雖然Dism++相對已經完全不同,但那個代碼至今這個還用Dism++裡面
推薦閱讀:
※初始化、顯式初始化、隱式初始化。這幾個區別是什麼?
※C語言中 *p++ = *p 是如何工作的?
※圖中的最長路徑問題怎麼算?
※我用的是visual studio 2010 c語言為什麼學了好長時間還是控制台程序和dos窗口啊?