“不要自己發明輪子”與“瞭解輪子是如何發明的”
吳旻
泰岩網路工作室
老外經常說:不要自己發明輪子。
其實現實中也有不少人跟我這麼說。不是說這句話不對,而是說總感覺有點彆扭,總好像是差了些什麼。
高中時的政治課有一句“勞動創造了美”,總是讓我覺得少了些什麼。當然這句話我打小就知道,但想從道理上解析這句話,卻是在課堂上產生的想法。困惑的解答是在大學二年級看一本哲學書中找到的,我在這裡把原意重複一下:
1、“勞動創造了美”,這句話只是馬克思書中一段話中的一句,雖然很美,但並不是那段話的全部含義。
2、“勞動創造了美”,並不是充分必要條件。我完全可以把它改成“勞動創造了醜”,而且完全正確,當然,如果前者正確。
3、“勞動創造了美”,是說勞動可以創造美,但沒說勞動就不能創造別的什麼(比如“醜”)。
我曾在《系統研發中的假命題》這篇部落格中論述過類似情況,就是說,一個說法提出來,讓你覺得是那麼回事,可一旦實際起來,又覺得不太是那麼回事。它的危害在於,聽起來很對,做起來很錯,做得越多,錯得越遠,危害越深。
“不要自己發明輪子”是對的,但老外一定沒說過,你同樣也不需要“瞭解輪子是如何發明的”。
我在現實生活中發現,許多人把“不要自己發明輪子”,同樣理解成了不需要“瞭解輪子是如何發明的”。他們的邏輯僅限於“我會使用就可以了”。
這多少就像如果我是普通手機使用者,那我會用手機就可以了。可如果我是手機的設計、生產、維修人員,我也僅限於會使用別人發明好的“輪子”,那就沒有不出事的。
我發現有很多VC開發人員不知道Windows下的函數棧空間的預設值是1M。一旦變數聲明需要的空間超過1M而導致運行崩潰時,他們一臉的無辜與不解。
我管這種方式叫“挑戰常識”!比如,一個兄弟前兩天和我說,讀取一個1M左右的檔案到記憶體是納秒級的,我當時就暈了,不曉得電腦什麼時候已經先進到這個程度了。後來一查,原來相關時間的最小單位是100納秒!而他就看到了納秒這兩個字。這簡直就是天地之差!
另一個讓我驚訝的是一個來面試程式員。我問他一個char型資料的取值範圍是多少,他認真想了一下回答我說:是0到2的8次方。我趕緊提醒說char是帶符號的,他又想了一下說,是負的2的8次方到正的2的7次方。我當時無言以對!
不要自己發明輪子是對的,但如果大家都不知道輪子是如何發明的,就錯得太遠了!
技術之所以為技術,是因為它有很高的門檻。而這個門檻內外的區別就是:知其然,和知其所以然。大部分人可以知其然,某些人必須知其所以然。特定的時候可以知其然,過了這個時候就必須知其所以然!