進入程式設計師的自由天地

weixin_34402090發表於2011-01-13

我認識一個共享軟體的作者,近十年來都在開發他的虛擬光碟機的軟體,不時給這個軟體新增一點新的東西。我對此覺得很奇怪,對他說,我覺得虛擬光碟機是一個很簡單的東西。用一個映象檔案容納光碟上的資料,並開發一套驅動介面讓系統以為這是一個光碟機。下載網上開源的程式碼,應該不超過5000行。為什麼他要為此耗費這麼多年的精力呢?

他舉了個例子說:國外知名的虛擬光碟機Daemon,它的強項在於相容性。幾乎任何軟體都能正常使用它的虛擬光碟機,並當做真正的光碟機來訪問。而普通的開源的虛擬光碟機,就有很多不支援了。

他曾經發現一種遊戲,要求使用者插入光碟。用他自己編寫的虛擬光碟機來模擬,總是不行。同樣的映象檔案,換了Daemon就一切OK。這讓他大為詫異。碰到這樣的情況,他根本就不可能到網上去搜尋“為何我的虛擬光碟機不支援某某遊戲”這樣的傻問題,也不可能在某處找來一段程式碼拷貝一番就解決。他必須找到問題的實質,才能找到對策。

花去漫長的時間,最終分析的結果是,原來因為該遊戲希望每個使用者都購買正版光碟,它就用了一種特殊的策略來分析使用者所用的是不是真實的光碟機。大家都知道硬碟的讀取速度一般都比較快,而且事實上也更加穩定。光碟機讀盤的速度比硬碟相對慢一些,而且讀取資料的速度有一定的不穩定性。比如說,資料讀取的速率可能會以某種數學模型所定義的曲線為軌跡發生波動。而這個軟體就根據這種不穩定性的匹配程度來進行檢查。如果虛擬光碟機提供的資料是不匹配這種特徵的,則它很簡單地禁止遊戲繼續執行。

而Daemon則在內部插入了這樣的模擬函式,有意對資料的讀出進行各種延時的處理,使之看上去非常像真實的光碟機讀出的資料。

總而言之,他開發的是一個逼近世界頂尖品質的好東西。當然代價是汗水與時間。

我能想象到在沒有任何公開的程式碼,或者是前人的經驗指引,自己去鑽研發現並解決這些問題的困難。能在網上找到解決方案的問題必定不會是軟體技術裡的關鍵問題。相反是這樣一個一個的無頭懸案,才構成了程式設計師們所謂的“核心技術”。

我和一些人的見解不同。我並不認為越底層的技術就越“核心”。總有人認為系統比軟體底層,所以程式更“核心”。而晶片比程式更底層,則晶片又更“核心”。其實矽片比晶片更底層,沙子又比矽片更底層,那是不是沙子才是最核心的技術呢?

我認為,在任何一個領域裡,能夠進行持之以恆的鑽研,當大部分人選擇放棄,而你依舊鍥而不捨地學習、研究、解決一個又一個實際問題,你就能掌握核心技術。簡言之,善於把握自己能夠掌握的知識,並不斷深化擴充知識領域,這才是真正的學習之道,也是成就個人和團隊核心技術的途徑。

我見到一些工作過多年的人,很有特點。有一種號稱對技術沒興趣,更喜歡做管理,但其實並沒有那麼多做管理的機會,或者真的有機會,而做得也並不理想;有一種全憑在新手面前吹牛皮支撐老資格,實際程式設計依舊一塌糊塗。我從來不對別人妄加評論,但從技術學習上講,他們都算是沒到家。

《竹林蹊徑——深入淺出Windows驅動開發》終於出版了。據我瞭解,張佩因寫作這本書,在家伏案了半年。他是憑著極大的熱情和信念去寫作的,否則即便薪資上的損失都很值得惋惜。就本書而言,先不去考量書中內容的深淺,技術的精粗,僅就作者的誠心和寫作精神,便值得稱讚。

牛不是一天吃大的,小牛雛要不斷地吃進養料,才能變成大牛。牛人要有牛技術,牛的技術,就是核心技術。我希望這本書的每一位讀者,不管你現在或是將來,做的是應用開發還是核心程式設計,不管用的是C++還是Java或.NET,在工作、學習過程中都具有鍥而不捨、精益求精的精神,哪怕最菜鳥的新手,在若干年的積累和沉澱後,都能夠逐漸形成自己的核心技術。只有掌握了自己的核心技術,才能進入程式設計師的自由天地。

此文送給《竹林蹊徑——深入淺出Windows驅動開發》的讀者,是為序。

譚文

2010年12月10日

相關文章