如何運(yùn)用第一性原理解決實(shí)際問題——記一次問題排查

什么是第一性原理

如果你想做一些真正的創(chuàng)新,你必須應(yīng)用一種第一性原理的分析,不要用類比來推理。類比是指對(duì)過去的參考。第一性原理意味著,你看一下事物最基本的原理在一個(gè)特定的領(lǐng)域,從那些幾乎無可爭(zhēng)議的真理中推理出一個(gè)結(jié)論。如果你看到這個(gè)結(jié)論是與人們普遍相信的東西不一致的,那么你就有機(jī)會(huì)了

If you want to do something really innovative, you have to apply a sort of first principles analysis, not and don't don't reason by analogy. Analogies are referencing the past. So first principles means you look at the most fundamental truths in a particular area and the things that really are almost indisputably correct and you reason up from there to a conclusion.And if you see that conclusion is at odds with what people generally believe then you have an opportunity.

這是埃隆馬斯克在某次采訪中所說的原話,這里面講了他對(duì)第一性原理的理解。很多人可能會(huì)誤以為第一性原理是馬斯克提出的,其實(shí)不是,只是他在近幾年重新帶火了這個(gè)概念。

通俗地理解來說,第一性原理就是倡導(dǎo)探究事物本質(zhì),回歸那些幾乎不可動(dòng)搖的基本原則,以此來得出新的結(jié)論或者完整地理解一個(gè)事物的原理或解決某個(gè)問題。

把它與”比較思維“對(duì)比會(huì)更好理解,我們大多數(shù)人當(dāng)遇到一個(gè)問題時(shí),往往下意識(shí)會(huì)去想有沒有過類似的案例可供參考,而此時(shí)這種思維會(huì)大大局限住我們解決問題的思路,從而可能錯(cuò)失很多創(chuàng)新的機(jī)會(huì)。

為什么需要第一性原理

  • 真正做到從根本上解決問題,而不是留下隱患
  • 透過具體問題去理解事物本質(zhì),從而做到可以舉一反三
  • 有利于構(gòu)建知識(shí)體系,將知識(shí)點(diǎn)形成網(wǎng)絡(luò)

接下來我將圍繞近期遇到的一個(gè)技術(shù)問題展開,講述我的一次第一性原理實(shí)踐,也就是如何在實(shí)際生活中運(yùn)用第一性原理進(jìn)行思考。

一次問題解決的場(chǎng)景還原

圖0
圖1

背景是朋友給我發(fā)了這兩張截圖,問我這個(gè)14.6.1的包怎么刪掉,因?yàn)橐呀?jīng)安裝了12.10.1的包,擔(dān)心14.6.1這個(gè)安裝包會(huì)額外占用服務(wù)器的空間。

圖3

他已經(jīng)嘗試過了上圖這種解決方式,但根據(jù)提示可以看出這會(huì)將已經(jīng)安裝的gitlab-ce包進(jìn)行刪除,這不是他想要的。

圖4

也嘗試過上圖這樣的操作 ,但根據(jù)提示可以發(fā)現(xiàn)刪除并沒有生效,因?yàn)樘崾久顓?shù)錯(cuò)誤。

于是我開始在谷歌搜索yum delete remove,經(jīng)過幾個(gè)結(jié)果的查看,找到一個(gè)相對(duì)靠譜的解決方案。如下圖

linux社區(qū)

這里面給了一個(gè)很重要的提示,就是如果你想刪除指定版本的包,在使用yum uninstall命令指定包名時(shí),CPU架構(gòu)參數(shù)要放在最后,但依照這種方式嘗試后結(jié)果如下圖

方式一
方式二

兩種方式皆無果

那么問題又回到原點(diǎn),究竟要怎么刪掉14.6.1這個(gè)包呢。

我又使用谷歌對(duì)問題關(guān)鍵詞的各種排列組合進(jìn)行搜索,包括”yum remove pkg version“等等。翻了幾個(gè)搜索結(jié)果后,感覺產(chǎn)生幫助的信息并不多。于是我開始重新觀察朋友發(fā)給我的截圖

圖0

我開始好奇這幅圖里能傳達(dá)給我什么信息。首先是展示出這些信息的命令yum list。

我隨即去谷歌查找yum list,在結(jié)果中發(fā)現(xiàn)了redhat官方的cheat sheet,先了解了一下yum可用命令的全貌,然后著重看了下list、info、search、install、update、reinstall、erase、remove和autoremove這幾個(gè)命令。

接著我把焦點(diǎn)放在了erase、remove和autoremove這三個(gè)命令上(其實(shí)這時(shí)候由于忽略了list命令中關(guān)鍵的信息——avaiable和installed,從而錯(cuò)過一次發(fā)現(xiàn)真相的機(jī)會(huì))

remove和erase沒什么問題,看上去是同樣功能的兩個(gè)命令,可能是alias關(guān)系。然后是autoremove,這個(gè)看上去好像是個(gè)很智能的高級(jí)命令,在刪除包時(shí),yum貌似會(huì)自行分析該包的關(guān)聯(lián)包一并刪除。但隨即想了一下,好像也不太符合我的場(chǎng)景,因?yàn)槲覀兊膅itlab-ce就是一個(gè)單純的安裝包,并無其他關(guān)聯(lián)包。

問題至此仍沒有什么進(jìn)展,我決定把問題降一個(gè)緯度去研究,先去了解一下yum,

yum

在查詢這個(gè)條目前我也大概知道yum是做什么的,只不過經(jīng)過這次搜索,有了更清晰的認(rèn)識(shí)。yum是Red Hat(linux的一種發(fā)行版)的包管理器,僅此而已。

參考鏈接:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/ch-yum

然后我在yum官方文檔中看到了這樣一節(jié)內(nèi)容,它解釋了命令輸出信息中每列所表示的含義。從而得知x86_64表示包所適合的CPU架構(gòu),而包版本號(hào)由點(diǎn)號(hào)(.)分割為兩部分,前面的數(shù)字表示包的版本號(hào),后面的數(shù)字則表示發(fā)布標(biāo)識(shí),二者聯(lián)合起來可以唯一表示一個(gè)包的某個(gè)發(fā)行版。而展示信息的最后一列表示包所在的位置,這個(gè)信息對(duì)我有所啟發(fā),我立刻回去重看朋友提供給我的圖。

圖0

這里面為什么一個(gè)是@System,一個(gè)是gitlab-ce,此時(shí)我感覺發(fā)現(xiàn)了新線索。同時(shí)我還通過對(duì)比,開始好奇為什么上面的包在Installed Packages下,而14.6.1在Available Packages,這兩種類型是什么意思。

我隨即在谷歌中搜索yum available packages關(guān)鍵詞

google

搜索結(jié)果中有些是我剛才訪問過的鏈接,同時(shí)我重新翻看剛才找到的一些官方文檔,包括下圖

文檔

avaiable這個(gè)詞我在前面的各個(gè)截圖和搜索結(jié)果里都有一閃而過地看到過,但沒留意,現(xiàn)在我開始把焦點(diǎn)指向它,我開始思考它究竟是什么含義。然后我又重新看了一開始的那個(gè)圖

圖0

這里面的@System很明顯是表示12.10.1這個(gè)包已經(jīng)安裝到當(dāng)前機(jī)器,那14.6.1所在的gitlab-ce呢,很明顯不是機(jī)器上的一個(gè)路徑標(biāo)識(shí),而且它在Avaiable Packages下。于是我同一時(shí)刻串聯(lián)起前面查找的所有有效信息,從而得出以下結(jié)論:

Avaiable Packages表示可用包,而這個(gè)可用并不意味著這個(gè)包在當(dāng)前機(jī)器上,它可能是在遠(yuǎn)程倉(cāng)庫(kù),只是它可用而已。這就像前端使用的npm包也會(huì)分為項(xiàng)目的node_modules、當(dāng)前機(jī)器的node_modules和遠(yuǎn)程倉(cāng)庫(kù);Java的包管理器Maven的配置文件pom.xml的解析規(guī)則也是先從本機(jī)倉(cāng)庫(kù)查找依賴包,如果找不到最后會(huì)去Maven遠(yuǎn)程的公共源中查找包。

看起來包管理機(jī)制在各個(gè)領(lǐng)域的用法似乎都是相通的,于是我瞬間豁然開朗,真相就是我們一直在苦苦追尋想刪除的14.16.1,它根本就不存在于我們的機(jī)器,那還談何刪除呢。

至此,整個(gè)問題得到了滿意的答案,我也通過這個(gè)問題的研究過程實(shí)踐了第一性原理,通過將問題降維至元問題,比如這個(gè)問題中想要使用yum刪除某個(gè)特定的包,先去了解yum到底是什么,yum的相關(guān)命令又都是什么作用,怎么工作的。也許不需要對(duì)每個(gè)知識(shí)點(diǎn)都深入了解,但要在整個(gè)分析過程中對(duì)所涉及的概念保持清晰的理解,而不是盲人摸象。

有時(shí)候有些問題放到具體場(chǎng)景里,就會(huì)很難找到問題的真實(shí)原因,因?yàn)閱栴}會(huì)被千差萬別的場(chǎng)景所包裹。如果你直接拿著帶有場(chǎng)景描述的關(guān)鍵詞去搜索,可能會(huì)導(dǎo)致你離正確答案越來越遠(yuǎn)。比如你不應(yīng)該直接搜索”如何使用yum remove刪除指定版本的包“,這樣的描述會(huì)把搜索結(jié)果圈定在一個(gè)很小的范圍,因?yàn)槟憬o了太多了場(chǎng)景描述,這可能會(huì)將真正對(duì)你有幫助的信息拒之門外。

另外,別擔(dān)心對(duì)于搜索問題中所涉及到的一些元概念學(xué)習(xí)所花費(fèi)的時(shí)間,比如這里我單獨(dú)去搜索yum和yum list。這些都是問題最基本的元素,我在這個(gè)問題中學(xué)習(xí)了這些概念,可能日后遇到其他有關(guān)yum安裝包的問題時(shí),我可以很快的找到原因而無需進(jìn)行太多的搜索,這是因?yàn)槲覍?duì)yum這個(gè)事物有了很深的了解。

這也是運(yùn)用第一性原理的魅力所在,因?yàn)樗鼘⑺械膯栴}打回原形,追本溯源,通過將問題拆解成一個(gè)一個(gè)元素,以此來理解整個(gè)問題,因此達(dá)到以一敵百的效果。也就是因?yàn)榻鉀Q一個(gè)問題,從而大大節(jié)省了日后解決同類問題的時(shí)間,從而大大提高學(xué)習(xí)知識(shí)的速度。因?yàn)槲覀兠看斡龅降膯栴}都是由一些基本問題或基本元素所組成的,而這些元素大多數(shù)都會(huì)存在交集。

舉個(gè)例子,你在解決一個(gè)計(jì)算機(jī)問題時(shí),由于這個(gè)問題牽扯到一個(gè)物理知識(shí),你為了理解這個(gè)問題而去了解了這個(gè)物理知識(shí)點(diǎn),這樣日后你在遇到某個(gè)和該知識(shí)點(diǎn)有關(guān)的問題出現(xiàn)時(shí),就會(huì)更加容易理解。比如某個(gè)生物問題,其核心最后也關(guān)聯(lián)到了這個(gè)物理知識(shí),這樣你便會(huì)逐漸形成屬于自己的知識(shí)網(wǎng)絡(luò),從而建立起對(duì)這個(gè)世界更完整的認(rèn)知。

總結(jié)——如何運(yùn)用第一性原理

面對(duì)問題,先停下來,冷靜思考,問題究竟是什么。

比如這里,問題是“如何刪除指定版本的包“嗎?不是。如果沿著這個(gè)思路去查解決辦法,一定是越走越遠(yuǎn)。時(shí)間花了很多,但對(duì)問題的解決沒有任何幫助,或者說幫助很小。因?yàn)檫@里你根本就在試圖解決一個(gè)不存在的問題。

因此就需要我們運(yùn)用第一性原理去拆解這個(gè)問題,問題看似是要?jiǎng)h除某個(gè)指定版本的包,但首先我們需要了解yum是什么,yum list列出的是什么,yum list展示出的內(nèi)容包含哪些信息以及gitlab-ce是什么。

yum是Red Hat(linux的一種發(fā)行版)的包管理器,可用于查詢可用包信息、從倉(cāng)庫(kù)獲取包、安裝/卸載、更新包等功能。yum list是用于列舉已安裝包可用包的yum命令選項(xiàng)。但這些還僅是針對(duì)于特定問題的第一性原理運(yùn)用方式,如果要應(yīng)對(duì)更多更通用的問題該怎么解決呢。我這里列舉一些適用于研究各種問題的第一性原理技巧。

1)使用搜索引擎

搜索引擎大家都會(huì)用,不就百度嗎,但每個(gè)人使用搜索引擎真正解決問題的效率可謂天差地別。這里我們直接說結(jié)論,怎樣才算是符合第一性原理地使用搜索引擎呢。首先就是搜索引擎的搜索范圍要足夠”大“,也就是使用谷歌。因?yàn)椴煌乃阉饕嬖诓檎覂?nèi)容時(shí),搜索范圍其實(shí)是不一樣的,你可以理解為不同的池子,比如abcd...。假如你想要的答案在z池子里,而百度的搜索范圍卻只包含abcde,那你可能永遠(yuǎn)都找不到想要的答案。

而我們常用的搜索引擎有哪些呢,在國(guó)內(nèi)環(huán)境下,不同的瀏覽器廠商可能會(huì)默認(rèn)綁定自家的搜索引擎,比如搜狗、360。如果你用Window自帶的IE或Edge,默認(rèn)的搜索引擎會(huì)是Bing(必應(yīng))。百度就不用多說了,大家都知道”百度一下,你就知道“,但是使用百度,你真的就能知道你想知道的嗎?

對(duì)于學(xué)術(shù)或技術(shù)類的東西,很多時(shí)候放眼整個(gè)世界范圍內(nèi)各個(gè)圈子的討論,谷歌肯定是比百度搜索到的范圍要大很多,這就導(dǎo)致了一種”真知在海外“的怪象。所以如果你秉承第一性原理去研究一個(gè)東西時(shí),如果可以,還是盡量使用谷歌來擴(kuò)大你的搜索范圍。

2)想好你搜索的關(guān)鍵詞

搜索引擎是很強(qiáng)大的工具,但是能不能用好它也很關(guān)鍵,工具本身并不產(chǎn)生價(jià)值,而是使用者賦予了它價(jià)值。比如你在查一個(gè)問題時(shí),不應(yīng)該把問題的解決完全寄托于搜索引擎而失去自己對(duì)于問題的思考,否則工具能發(fā)揮的作用可能微乎其微。

比如當(dāng)搜索一個(gè)問題時(shí),如果你對(duì)這個(gè)問題中所涉及到的一些基本概念很清晰,那你可以在此基礎(chǔ)上去搜索相對(duì)具體的描述內(nèi)容或場(chǎng)景。而如果你對(duì)問題中所涉及的基本概念不是很了解,盲目地輸入具體問題描述,搜索出的結(jié)果很可能把你圈定在一個(gè)很小的范圍,有時(shí)甚至?xí)选闭_答案“過濾在外。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容