[心得] 如何問( google )問題
老樣子一樣放在 gist,這篇是我一直很想寫但寫不好的。
原文網址:
https://goo.gl/mizaKs
以下正文
# 分析問題
## 前言
如果你有在網路找過如何問問題的話,你應該會找到泛用的回答。
而這邊要討論的是如何對 Google 問問題。
會寫這篇是因為我發現很奇妙的有些工程師比我還老,
但卻不太用 google,常常問一些 google 就有答案的問題。
## 問問題的技巧
有幾個原則 :
1. 用英文
雖然是老生常談,不過你都用英文寫 code 了,資源當然是國外比較多
2. 專有名詞
基本上問題會隨著你的語言、框架而有微妙的差異。
比如 php & java 就不太一樣,雖然都是 programming language
3. 不要用句子
用句子會導致你失去一些答案,因為每個人問問題的語句都不一樣。
(Can I take out? Can I take away?)
除非你想要找的就是那種topic的標題。
4. 分解到不能再分解為止
一般而言問題常常是有點籠統的,這時你必須把問題拆成幾個單字內
(一般來說我傾向五個單字內)是最好的。
這樣可以把問題簡化,也可以直搗問題核心。
## 簡單例子 : == 跟 === 的 異同之處
首先先轉換成英文
1. 等於 為 equal
2. 運算子 為 operator
專有名詞這邊是 php
然後不能在分解下去了
所以大概要餵 :
```
equal operator php
```
## 複雜例子 : 網站產品頁讀取緩慢
首先先拆分,一般來說這問題可以先拆成四部分。
1. 前端
2. 系統
3. 後端
4. 資料庫
從前端開始看起
1. 使用者使用的是桌面還是行動版
2. 使用者網路穩不穩定
3. 使用者的瀏覽器版本
4. js 過於肥大
5. 圖片是否為第一次讀取
6. etc...
好的讓我們稍微等等,你應該意識到這個問題過於複雜,問題有很多個,應該要每個都問嗎?
## 問問題的成本
我很喜歡鋼之鍊金術師的一個真理:等價交換原則。
任何事情皆有代價,問題只是在於這個代價由誰支付而已。
那要如何評估問問題的成本?這裡我們可以從幾方面來看
1. 時間方面
有沒有聽過一句話:什麼都急,就付你錢的時候不急
如果你有時間上的限制的話,你應該選擇那些時間成本很低的問題。
一般而言你越熟悉的領域,你問的問題會越精準,矯正時間成本會越低。
2. 金錢方面
有錢不是萬能,沒錢卻萬萬不能。
所以你公司沒錢的話,還是不用問 load balancer 這種東西了
3. 困難程度
即使是你熟悉的領域也有分困難程度的,比如把 mysql 轉換成 mssql 遠比優化 sql 來得難多了
你應該優先選擇那些困難程度低問題。
困難程度有時不是只考慮技術方面,人的部分也要考慮。
## 最後的抉擇 - 經驗法則
往往在估算完這些以後,還會剩下幾個選項,從哪個開始問才是最好的?
答案是有規則的猜他,而這個就依賴你以前的經驗了。
如果你有空可以多看看 reddit 、 hack news 之類的,看國外是怎麼問問題的。
看書也有助你有規則的猜測,對於問題發生的環境瞭不瞭解也很重要。
## 回到複雜例子
首先假設這個問題是你家的 PM 丟給你的話,則環境在台灣,由於台灣盛行吃到飽跟一年換一次手機,可以先排除純行動端問題。
如果是網路不穩的話則無解,所以這個問題也可以排除。
系統硬體部分公司有錢的話可以考慮,排在順位低的列表。
系統軟體的話考慮困難程度,排在順位低的列表。
後端部分,因為更換後端語言各方面成本太高,所以列在順位低。
優化語法成本比較低,排在順位高。
資料庫部分,筆數高低直接影響效能,且語法查詢也影響效能,排在順位高。
圖片往往也直接影響速度快慢,排在順位高。
所以我們可以直接得到一個順位:
1. 圖片快取
2. 後端語法優化
3. sql 語法優化
然後就依照你對架構的暸解開始猜測哪個問題是正確的。
## 總結
依台灣的情形而言,大概有90%的問題可以在網路上找到一樣的,
所以問題在於你要怎樣去找到這些已經問過的問題,
以及在於你要花多少時間成本下去找。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.160.54.124
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1504001333.A.124.html
推
08/29 18:33, , 1F
08/29 18:33, 1F
推
08/29 18:59, , 2F
08/29 18:59, 2F
推
08/29 19:01, , 3F
08/29 19:01, 3F
推
08/29 21:08, , 4F
08/29 21:08, 4F
→
08/29 21:08, , 5F
08/29 21:08, 5F
推
08/29 21:51, , 6F
08/29 21:51, 6F
推
08/29 22:23, , 7F
08/29 22:23, 7F
推
08/29 22:32, , 8F
08/29 22:32, 8F
推
08/30 00:04, , 9F
08/30 00:04, 9F
→
08/30 00:04, , 10F
08/30 00:04, 10F
推
08/30 00:19, , 11F
08/30 00:19, 11F
→
08/30 00:19, , 12F
08/30 00:19, 12F
→
08/30 00:19, , 13F
08/30 00:19, 13F
推
08/30 07:38, , 14F
08/30 07:38, 14F
推
08/30 08:50, , 15F
08/30 08:50, 15F
推
08/30 10:21, , 16F
08/30 10:21, 16F
推
08/30 12:11, , 17F
08/30 12:11, 17F
推
08/30 12:22, , 18F
08/30 12:22, 18F
→
08/30 12:55, , 19F
08/30 12:55, 19F
推
08/30 13:06, , 20F
08/30 13:06, 20F
推
08/30 13:29, , 21F
08/30 13:29, 21F
→
08/30 13:29, , 22F
08/30 13:29, 22F
google 知乎 用中文,大概就這三個。
如果是自行開發 open source 的 github 上面也會有,沒 open source 的
就要自行想辦法,我見過問這個問題的人多半都是 android 工程師,因為 中國 android
獨步全球(?
※ 編輯: y2468101216 (118.160.49.253), 08/30/2017 13:48:49
推
08/30 15:06, , 23F
08/30 15:06, 23F
→
08/30 15:06, , 24F
08/30 15:06, 24F
→
08/30 15:38, , 25F
08/30 15:38, 25F
→
08/30 19:46, , 26F
08/30 19:46, 26F
推
08/30 19:54, , 27F
08/30 19:54, 27F
推
08/30 22:55, , 28F
08/30 22:55, 28F
→
08/30 22:55, , 29F
08/30 22:55, 29F
推
08/31 23:57, , 30F
08/31 23:57, 30F
推
09/01 11:50, , 31F
09/01 11:50, 31F
推
09/02 19:29, , 32F
09/02 19:29, 32F
→
09/02 19:29, , 33F
09/02 19:29, 33F