Skip to content

Instantly share code, notes, and snippets.

@y2468101216
Last active November 5, 2018 02:36
Show Gist options
  • Save y2468101216/2bddd7b12193086ddd2dd32a7c7982da to your computer and use it in GitHub Desktop.
Save y2468101216/2bddd7b12193086ddd2dd32a7c7982da to your computer and use it in GitHub Desktop.
如何問( google )問題

分析問題

前言

如果你有在網路找過如何問問題的話,你應該會找到泛用的回答。 而這邊要討論的是如何對 Google 問問題。

會寫這篇是因為我發現很奇妙的有些工程師比我還老,但卻不太用 google,常常問一些 google 就有答案的問題。

問問題的技巧

有幾個原則 :

  1. 用英文

雖然是老生常談,不過你都用英文寫 code 了,資源當然是國外比較多

  1. 專有名詞

基本上問題會隨著你的語言、框架而有微妙的差異。 比如 php & java 就不太一樣,雖然都是 programming language

  1. 不要用句子

用句子會導致你失去一些答案,因為每個人問問題的語句都不一樣。(Can I take out? Can I take away?) 除非你想要找的就是那種topic的標題。

  1. 分解到不能再分解為止

一般而言問題常常是有點籠統的,這時你必須把問題拆成幾個單字內(一般來說我傾向五個單字內)是最好的。 這樣可以把問題簡化,也可以直搗問題核心。

簡單例子 : == 跟 === 的 異同之處

首先先轉換成英文

  1. 等於 為 equal
  2. 運算子 為 operator

專有名詞這邊是 php

然後不能在分解下去了

所以大概要餵 :

equal operator php

複雜例子 : 網站產品頁讀取緩慢

首先先拆分,一般來說這問題可以先拆成四部分。

  1. 前端
  2. 系統
  3. 後端
  4. 資料庫

從前端開始看起

  1. 使用者使用的是桌面還是行動版
  2. 使用者網路穩不穩定
  3. 使用者的瀏覽器版本
  4. js 過於肥大
  5. 圖片是否為第一次讀取
  6. etc...

好的讓我們稍微等等,你應該意識到這個問題過於複雜,問題有很多個,應該要每個都問嗎?

問問題的成本

我很喜歡鋼之鍊金術師的一個真理:等價交換原則。 任何事情皆有代價,問題只是在於這個代價由誰支付而已。

那要如何評估問問題的成本?這裡我們可以從幾方面來看

  1. 時間方面

有沒有聽過一句話:什麼都急,就付你錢的時候不急 如果你有時間上的限制的話,你應該選擇那些時間成本很低的問題。

一般而言你越熟悉的領域,你問的問題會越精準,矯正時間成本會越低。

  1. 金錢方面

有錢不是萬能,沒錢卻萬萬不能。 所以你公司沒錢的話,還是不用問 load balancer 這種東西了

  1. 困難程度

即使是你熟悉的領域也有分困難程度的,比如把 mysql 轉換成 mssql 遠比優化 sql 來得難多了 你應該優先選擇那些困難程度低問題。

困難程度有時不是只考慮技術方面,人的部分也要考慮。

最後的抉擇 - 經驗法則

往往在估算完這些以後,還會剩下幾個選項,從哪個開始問才是最好的? 答案是有規則的猜他,而這個就依賴你以前的經驗了。

如果你有空可以多看看 reddit 、 hack news 之類的,看國外是怎麼問問題的。 看書也有助你有規則的猜測,對於問題發生的環境瞭不瞭解也很重要。

回到複雜例子

首先假設這個問題是你家的 PM 丟給你的話,則環境在台灣,由於台灣盛行吃到飽跟一年換一次手機,可以先排除純行動端問題。 如果是網路不穩的話則無解,所以這個問題也可以排除。

系統硬體部分公司有錢的話可以考慮,排在順位低的列表。 系統軟體的話考慮困難程度,排在順位低的列表。

後端部分,因為更換後端語言各方面成本太高,所以列在順位低。 優化語法成本比較低,排在順位高。

資料庫部分,筆數高低直接影響效能,且語法查詢也影響效能,排在順位高。

圖片往往也直接影響速度快慢,排在順位高。

所以我們可以直接得到一個順位:

  1. 圖片快取
  2. 後端語法優化
  3. sql 語法優化

然後就依照你對架構的暸解開始猜測哪個問題是正確的。

總結

依台灣的情形而言,大概有90%的問題可以在網路上找到一樣的, 所以問題在於你要怎樣去找到這些已經問過的問題,以及在於你要花多少時間成本下去找。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment