直擊靈魂:軟件研發(fā)的第一性原理與10倍效能
最近馬斯克(Elon Musk)要收購twitter,鬧得滿城風雨。
國內(nèi)某些虧損嚴重 (如今年虧損800多億、去年是1166億,甚至超過一年收入) 的大廠,更應該設(shè)法讓 馬斯克收購。
為什么這么說呢?因為一旦大廠被 馬斯克 收購,大廠的研發(fā)效能可以提升十倍、幾十倍,員工可以裁掉50%甚至90%,這樣很快就能轉(zhuǎn)虧為盈。
這是因為馬斯克 第一性原理用得非常好 ,10倍效能提升是大概率事件 。 如果一般人的目標是在現(xiàn)在的基礎(chǔ)上改進10%,馬斯克的目標就是在現(xiàn)有基礎(chǔ)上做到10倍?!哆B線》雜志的Jack Stewart 發(fā)現(xiàn): 如果一件事 ,在馬斯克的世界里用1年完成,到了別人的世界就要7~8年。 例如,馬斯克創(chuàng)立的 SpaceX公司獵鷹9號火箭,不僅能回收,而且復用周轉(zhuǎn)時間降到了21天,一次能發(fā)射53顆“星鏈”衛(wèi)星,SpaceX 火箭發(fā)射的成本只是 60 年代俄羅斯聯(lián)盟號的成本的3%(即1/30)。還有,2017年馬斯克創(chuàng)立了boring公司,兩年不到的時間,就在舊金山建成了總長1.83公里的隧道。如果按照傳統(tǒng)的地鐵方式挖掘預估成本是11億美金,而boring公司的施工成本僅為1000萬美金,僅為百分之一。
言歸正傳,開始討論下面4個問題:
- 第一性原理其實是一種思維方式
- 軟件研發(fā)的第一性原理是什么?
- 在軟件研發(fā)中,如何用好第一性原理?
- 用好第一性原理帶來的收益?
1. 第一性原理 其實是一種思維方式
最早提出第一性原理思維的人是古希臘偉大的哲學家亞里士多德,把它定義為“ 認知事物的第一基礎(chǔ) ”,而著名的法國哲學家、數(shù)學家笛卡爾將其描述為 “ 系統(tǒng)性地懷疑一切值得懷疑的事物,直到你獲得無可置疑的真相 ” (類似批判性思維) 、 維基百科的定義為: 從基本的定律出發(fā),不外加假設(shè)與經(jīng)驗擬合的推導與計算 。 第一性原理 常被延伸為 “ 回溯事物本質(zhì), 敢于懷疑過去的設(shè)定、打破過去的認知 ,通過演繹法推導,最終得出新的結(jié)論 ”,所以可以說, 是認知事物的哲學思想,也就是分享與解決問題的思維方式 。
不管哪個領(lǐng)域,其事物都存在其本質(zhì)的東西,正如老子說 "人法地、地法天、天法道、道法自然"。所以,我們要回到事物的本質(zhì)上,就是要回到自然法則上,回到物理規(guī)律上,從而 抓住事物最本質(zhì)的特征,依據(jù)事物固有特性去推導、分析、演繹事物的變化規(guī)律,進而洞悉事物在不同場景下的表現(xiàn)形式,而不是 隨大流 、人云亦云,不會只看到事物的表面現(xiàn)象,不會生搬硬套別人的制度、流程和經(jīng)驗,不會在復雜環(huán)境中、不確定因素影響下迷失了自己前進的方向。
例如,電池作為新能源汽車的核心部件,成本占整車的比重很高。為了降低特斯拉的電池成本, 馬斯克的邏輯是,“我不管現(xiàn)在的電池有多貴,我就回到本質(zhì)問自己一個問題:電池的硬性成本構(gòu)成是怎樣的?無論如何也減不下去的成本是什么?無非就是鐵、鎳、鋁這些金屬, 除了購買這些金屬的成本是絕對降不下去的,剩下來的成本都是人類協(xié)作過程中產(chǎn)生的,那就有優(yōu)化的空間 ?!?/span>
第一性原理思維直擊 事物本質(zhì),產(chǎn)生的效果就大不一樣。正如 Google X實驗室主管泰勒就說:“ 嘗試做一樣新東西,不外乎那么兩種風格 ,一種是小幅變動,比如工藝改進、造型優(yōu)化等,這時往往得到只有10%的改進;但如果要獲得真正的巨大革新( 10倍的改進 ),一般來說你就得重新開始,嘗試完全不一樣的方式,必須打破一些基本的假設(shè)?!?nbsp; 甚至硅谷流行這樣一種觀念: 把一件事情做到10倍好,比做到10%要容易得多 。
循序漸進式的進步依靠的是苦干、更多的資源,而10倍的進步則建立在勇氣和創(chuàng)造力之上,靠的是第一性原理的思維方式,是 巧干。
2. 軟件研發(fā)的第一性原理是什么?
“ 第一性原理 ” 自 2017 年馬斯克在采訪中被提及后,最近幾年在互聯(lián)網(wǎng)和投資圈流行,但在軟件研發(fā)中思考得不夠。
軟件研發(fā)的第一性原理是什么?
一般來說,先要思考和軟件研發(fā)相關(guān)的一些基本問題,例如:什么是軟件? 為什么要開發(fā)軟件?軟件是如何開發(fā)出來的?軟件從哪里來、到哪里去?
例如: 軟件 = 程序 + 文檔 = 數(shù)據(jù)結(jié)構(gòu) + 算法 + 文檔 ,讓抽象的軟件變得更加具體了,軟件的開發(fā)轉(zhuǎn)化為數(shù)據(jù)結(jié)構(gòu)和算法的設(shè)計與實現(xiàn)、文檔的編寫。一個軟件的交付, 數(shù)據(jù)結(jié)構(gòu)和算法 是不能省的,但 文檔 是可以省的,盡可能簡潔。當軟件設(shè)計簡單、UI界面非常友好,就不需要什么用戶手冊,今天絕大多數(shù)App沒有在線幫助(文檔)。
軟件是如何開發(fā)出來的?簡單地說,通過需求定義、設(shè)計和編程、測試、集成構(gòu)建起來的,哪個環(huán)節(jié)可以省去?哪個環(huán)節(jié)有最大的優(yōu)化空間?按某些管理者的習慣性思考,任何環(huán)節(jié)都不可去掉,甚至有的 管理者 還說,每個環(huán)節(jié)都沒什么優(yōu)化空間了,我們已經(jīng)優(yōu)化得很好了。真的是這樣嗎?
軟件其實就是團隊之間、團隊內(nèi)部研發(fā)人員之間協(xié)作 開發(fā)過程 中產(chǎn)生的,正如馬斯克所說,“ 剩下來的成本都是人類協(xié)作過程中產(chǎn)生的,那就有優(yōu)化的空間”, 而且 比爾蓋茨還說過 “一個杰出的程序員的價值是普通程序員的一萬倍” 。 所以軟件研發(fā)的各個環(huán)節(jié)就有優(yōu)化空間,這也是為什么Amazon團隊要招最好的人,并追求2-piece pizza這樣的小團隊。人力成本在軟件研發(fā)成本中占的比重很大,“ 人員優(yōu)化”是最值得去做的 。
軟件研發(fā)的第一性原理 : 軟件研發(fā)是人的智力活動,人是決定的因素,所以在 軟件研發(fā)中需要優(yōu)化與人相關(guān)的一切活動 ,包括個人能力和團隊協(xié)作。
3. 在軟件研發(fā)中,如何用好第一性原理?
從第一性原理出發(fā),要優(yōu)化人員,首先就要優(yōu)化待開發(fā)的軟件本身 。正如,我在給學生講解敏捷開發(fā)模式時,強調(diào) “研發(fā)組織分解” 或 “建立小團隊”的前提是:待開發(fā)的系統(tǒng)能夠分解。系統(tǒng)分解得越干凈,小團隊才能更獨立地工作,工作效率才越有保證。這也是為什么 今天 微服務、serverless 很流行。系統(tǒng)的復雜性取決于業(yè)務的復雜性,如果業(yè)務很復雜,軟件系統(tǒng)用什么架構(gòu)(微服務、serverless等)都沒用,這時就必須進行業(yè)務重組、業(yè)務變革或業(yè)務架構(gòu)的優(yōu)化。雖然業(yè)務驅(qū)動研發(fā),但業(yè)務不是一成不變的,一定是可以改變的,我們要勇于打破業(yè)務慣例,大膽革新。
從第一性原理出發(fā),在業(yè)務和軟件本身優(yōu)化之后,我們可以開始 優(yōu)化軟件研發(fā)的各種活動,砍掉一些不必要的環(huán)節(jié),把一些環(huán)節(jié)交給工具或機器人去做,進而可以優(yōu)化組織和團隊。 例如:
- 需求可以自動采集嗎?如構(gòu)建用戶反饋系統(tǒng),自動收集用戶需求;
- 借助知識圖譜、機器學習等進行需求分析和提煉;
- 構(gòu)建需求模型,自動生成代碼;
- 編程輔助機器人自動補充代碼、實時代碼檢查分析等;
- 封裝成標準組件、原子服務等;
- 利用JVM、容器技術(shù),減少對環(huán)境的依賴;
- 集成了自動化測試、自動化部署的交付流水線
- ......
人多了,其實往往是壞事 ,正如樊登在其《低風險創(chuàng)業(yè)》一書中說,如果創(chuàng)業(yè)時錢多不是好事,因為錢多就猛招人、大做廣告、買流量等,表面上看,不好的產(chǎn)品銷售不錯,會給自己錯覺,覺得開發(fā)出來的產(chǎn)品是好產(chǎn)品,但最后錢燒光了,產(chǎn)品賣不出去了,還要裁人。創(chuàng)業(yè)時錢少,就不會花精力在營銷上, 而 是 能省則省,踏踏實實做產(chǎn)品,靠產(chǎn)品功能和質(zhì)量贏市場。
道理相通 ,軟件研發(fā)中,一旦人不夠,如果我們就喊缺人、招人,我們就不會去努力思考如何優(yōu)化工作、如何減少不必要的浪費等。如果不招人,我們就會朝思暮想去優(yōu)化工作,反而帶來很高的效能。
當然,我們并不反對人多力量大,但 如何有效分配人力,精準使用人力,也是研發(fā)效能更高的目標 ,如我軍著名的 三三制戰(zhàn)術(shù) (非人海戰(zhàn)術(shù),它也被美國西點軍校奉為經(jīng)典戰(zhàn)術(shù)之一) ,起源于 抗日戰(zhàn)爭,成熟于解放戰(zhàn)爭, 大量運用于 抗美援朝中,發(fā)揮我軍人數(shù)上的優(yōu)勢,降低敵軍武器上的優(yōu)勢。
概括起來,軟件研發(fā)有許多地方可以進行創(chuàng)新, 從第一性原理出發(fā) , 軟件研發(fā)降本增效的基本要點是 :
- 優(yōu)化與人相關(guān)的一切活動 (包括人與組織 )
- 把 招對人 、培養(yǎng)人的能力放在第一位,盡量 少招人
- 做正確的事 ,以終為始,從客戶真實需求出發(fā)構(gòu)建軟件
- 從業(yè)務架構(gòu)、系統(tǒng)架構(gòu)開始,內(nèi)建質(zhì)量, 追求極致的簡約
- 如果能讓工具做的事情,盡可能讓工具做
- 盡可能標準化、組件化、原子化、服務化。
更多內(nèi)容,也可以參考: 軟件研發(fā)效能的底層邏輯 。
4. 用好第一性原理帶來的收益?
用好了第一性原理出發(fā),就能達到“10倍效能”, 其實不一定能達到10倍效能,“10倍效能”只是一個代名詞(思維方式),是指高效能,可能是2倍、3倍,也有可能是20倍、30倍。即使是2倍效能,也很好了。想想像騰訊、阿里這樣的大廠,效能能翻一倍,那將是奇跡。
我們期待奇跡發(fā)生,相信奇跡能夠發(fā)生。