國內計算機界「跟隨」了很多年了,很多工程師並沒有和競爭對手「正面競爭」的準備。這是合理的,弱就是弱,強就是強。弱就應該用弱的策略,強就應該用強的策略。你月入三千,還要思考「如何引領消費風潮」,這毫無意義。你從來就沒有見過計算機長啥樣的,要做一個比快排更好的演算法,這也沒有意義。你沒有見過計算機,就好好讀計算機說明書,按前輩的規矩來做軟體,混口飯喫就對了。

大國以下小國,乃取小國。小國以下大國乃取大國。

共同取利而已。

但這個心態是不能用於競爭的。也許我們不想競爭,但競爭到了面前,競爭就是競爭了。跟隨是無法贏得競爭的。最近在看一個國內晶元的方案,其中有一個策略是:二進位兼容(或者可翻譯)到其他的指令集。這種想法乍看很吸引人:這樣可以復用別人的生態,大大加速整個發展,有什麼不好?

從眼前來看,一切挺好,但從架構競爭的角度,這是死路。有興趣的同學不妨去看看這本書《Perspectives on Soviet and Russian Computing》,然後去調查一下Elbrus現在的狀態。它為什麼會死得渣子都不剩?因為你很快地追到了最前面,但你也鎖死了再向前進的方方面面了。你從介面一級就依附了別人的生態,在一個別人的地盤上和別人正面競爭,這在邏輯上就不會贏。就好比你一個羽毛球運動員,跑去和另一個乒乓球運動員重新訓練,競爭乒乓球比賽,你的贏面就幾乎沒有。你從一開始就攔住了找到對方破綻的可能性了。

請注意,我沒有反對做這樣的特性,把這個作為某種很特殊的戰術,在一定的範圍內實施是可以的,但作為戰略,這是非常危險的。

同樣的,當我們做一個競爭性的架構設計,我們的心態也必須非常開放,從一開始,就需要完全站在:我有什麼籌碼,對手有什麼籌碼,我怎麼在整個遊戲中可以發揮我的優勢,讓遊戲規則向我傾斜。這纔是正面競爭的態度。如果你還指望對手做了什麼,所以我也要做什麼,把他們做過的事情重新做一次。那你選擇了一條必死的道路。

在架構上,確定這一點非常重要,因為每個特性的好,我們都知道他好,但構架上,把什麼都好都做了,就失敗了。正面競爭的邏輯和跟隨的邏輯是不同的。所以,收起你們那些「誰誰誰有XXX」的邏輯,收起對手的手冊(沒說不要看,不要拿來做證據而已),我們確實應該研究對手,也應該使用對手的最佳實踐,但在做自己的設計的時候,請保持在我們自己的邏輯鏈上。在確定要競爭的時候,你就已經沒有辦法依附了。


推薦閱讀:
相關文章