關于造輪子的問題,褒貶不一,我是贊成造輪子的,很多時候我們沒有必要再去造一個已經存在的輪子,這是貶造輪子的重要的看法,我覺得沒什么不對的,如果是要立刻用到實際中去,而且時間上很趕的時候造一個輪子出來不是什么好事情。但是造輪子也有很多好處,比如能學到很多東西,可以參見vczh的關于造車輪,雖然沒有將所有造車輪的好處統計起來,但是很有參考價值。當然你可以去看看國外的大學教程,他們本科生的任務大多就是造個車輪出來。比如MIT:操作系統課程就是寫個操作系統出來,數據庫課程就是寫個數據庫出來,圖形學就是寫個raytracer(光線跟蹤器)出來。當然還有很多,比如Stanford:計算機網絡就是用UDP實現TCP的功能,寫個路由協議,圖形學就是做一個軟件openGL,等等,所以造輪子(再造輪子)是很有實踐價值的,而且很多一流學校就是這么干的。很多時候如果想創造輪子的話再造輪子所獲得的經驗和能力的提高是很有價值的。
那如果你肯定了再造輪子的好處那就多幫造輪子的人說點好話,當然也說明再造輪子的的限制,不然誤人子弟。但是如果你肯定了再造輪子的好處,你想加入再造輪子的大軍那你該怎么辦呢?
這點其實我也在想,如果看到這篇文章而又很有欲望表達自己的看法的前輩留下你的建議。在這里我也表達一下我的看法。
建議一:書
如果我們都想造輪子,但是苦于沒有經驗而且對輪子的構造很不熟悉,很多時候我們只好放棄這種想法。如果有一本書教你怎么去造這個輪子的話說不定你的輪子就造出來了,而且還不差。所以如果想造一個輪子,很常用的方法就是找一些相關的書籍。優點是結構完整而且描述清晰,而且還很系統(國內人寫的書大多不好,所以還是先去找找有沒有國外人寫的書,老外寫的書看得還比較爽)。缺點是大多時候書都比較理論實踐的東西少,而且對我們造輪子來說書上的那種結構不是很適合造輪子,如果是大部頭書的話還很快就把你的意志給削弱了。所以書不是萬能的,我看過一定數量的書,但是到頭來還是沒有太大的提高。
建議二:課程
對于大多書學生來說這條是最好的。其實大多數學生都是很想學習的,苦于沒有人指導加上老師無聊,很多時候學生搞到最后都不想學了。如果你是一個學生,如果讓你去造一個輪子出來,想想那是世界上最牛的輪子(轉得最快),那是讓人激動的,學生學起來也很有勁頭。所以造輪子最好的方式是去找一些課程,而那門課程是教你怎么造輪子的,按造那個課程的方式先去造一個出來,然后再想想自己的輪子怎么造,然后你的輪子又是另一個最牛的輪子(轉得快不說,還省材料)。優點:系統化,理論實際相結合,而且很多時候那些老師已經幫你完成了一些工作,適合菜鳥級別的人物---不如說我。缺點:還沒有找到,如果非得說有缺點就是:讓你見識了一個最牛的輪子,讓你覺得你自己獨立造的輪子沒有技術含量,讓你放棄了想法。
建議三:現成系統
我們討論的是再造輪子,所以這個輪子必然已經存在了,我們仿這個輪子去造一個不就行了。通過分析和比較,使用別人的輪子的時候想想別人底層是怎么做的,怎么設計的,意淫一番之后總結出經驗,然后造自己的輪子。而且造一個比原來更加小強(小而強大)的輪子,功能完整,耗費資源少,使用簡單-----那不就是我們想要的嗎?缺點就是可能要有些經驗。
建議四:論文
如果你是一個骨灰級的輪子玩家這點你應該是清楚的。看論文是一件很痛苦的事情,很多時候我們的理論基礎沒有論文的作者好,或則論文作者的基礎跟你的不一樣(比如他是學物理的,而我們是學計算機的),所以看不懂論文,直接結果就是你的輪子造不出來。所以還是要很有經驗和理論基礎。
建議五:開源軟件
開源是一個好東西,首先它是免費的,再者可以看到代碼。這點我不用說了,找到了相似的開源代碼,讀一讀,肯定有收獲。
總結或者想法:
造輪子肯定不是一件簡單的事情,沒有恒心就不要造輪子了,而且會花費一些時間。當然如果你很想造輪子而且你確定你有一定的時間(不用太多)你就去造吧。國內的開源軟件和基礎軟件不好,說不定我們這代造了一些輪子之后,國內的基礎軟件就好了。
很多時候如果你沒有頭緒,你就寫點代碼吧,古人寫字靜心,我們為什么不能寫代碼靜心呢?說不定你寫著寫著輪子的框架就出來了,再寫著寫著輪子就造好了。
雖然上面我都說了點,但是很多情況下你找不到你想要的資源,可以嘗試問一下別人,說不定他能給你很好的建議---這個建議可能就一句話。