Stack Overflow是什麼?工程師的討論區
Stack Overflow 是一個程式設計領域最熱門的工程師技術問答論壇網站。無論程式新手還是老手,都可在論壇內提出和回答問題,進而獲得一些在 Stack Overflow 上的聲望值,工程師遇到程式問題,也常依賴Stack Overflow工程師社區找答案。
另外,你也可以藉由瀏覽各個語言、關鍵字標籤,從他人的回答和分享學習一些新知。若你想要找工作,這邊也成為眾多公司和使用者自由媒合的平台。這篇文章給入門者介紹Stack Overflow,並提供如何使用這個工程師社區的基本指南。
英文雖說是這個論壇上發問的主要語言,不過不需過度擔心你的英文程度。畢竟,程式語言上所遇到的困難,是沒有國界差別的。
來 Stack Overflow 找程式問題解答
人們在搜尋撰寫程式上所遇到的問題時,與 Stack Overflow 有了第一次接觸(超過 90 % 以上)。換言之,在這累積眾多工程師心血的地方,「下對關鍵字」不光能讓你單純獲得解答。從大家的逐筆回應中,也可以從中一窺自身的觀念和技術的熟悉程度。
如何下關鍵字
雖說 Stack Overflow 本身的網頁上方有個搜尋框,但世界上頂尖的 Google 搜尋引擎,能夠同時搜尋 Stack Overflow 和其他網站的相關結果。從這些內容的交叉比對和閱讀中,你可以了解一個問題的全貌和不同解法。
[使用 Google] <關鍵字1><關鍵字2><…其他…> site:stackoverflow.com</…其他…></關鍵字2></關鍵字1>
// 在尾端不加上 site:<網站網址>,可以得到更多結果</網站網址>
這邊的關鍵字可以是以下內容:
- 程式語言名稱:Node.js, Python, JavaScript …, etc.
- 套件名稱:Express, Handlebars, BootStrap, …, etc.
- 變數類型或是函數:function(), Array, Object, String, null, undefined, etc.
- 錯誤訊息和代碼:直接將報錯的訊息複製貼上
- 描述你遇到的問題
以下是一些搜尋示範:
- Two array to key-value javascript
- nodejs cors
- Unable to align the tags in Bootstrap 4
- Handlebars: Access has been denied to resolve the property “username” because it is not an “own property” of its parent.
以最後一點為例:當你將錯誤訊息近乎完整的貼上於 Google 搜尋後,在 Stack Overflow 上已經有人發問過類似問題:Express Handlebars Won’t Render Data – Jan 15th, 2020
解答,有時在意料之外的地方
點進 Express Handlebars Won’t Render Data 這篇文章內,
- 你可以從裡頭找到原因:From version 4.6.0 onward Handlebars forbids accessing prototype properties and methods of the context object by default.
- 還有可能的解法 I :response converted into JSON
- 還有可能的解法 II:Mongoose could be achieved by using lean
雖說你的情境不一定完全一樣,但你可以擷取一些裡頭用來解決問題的關鍵字,去查看你所用的套件官方文件,有無類似的功能和語法,進而解決問題。
常用關鍵字中英對照表
以下列出一些常見名詞的中英對照表。不過有些名詞,直接用英文會比較好理解,像是:API (應用程式介面)、webpack、OAuth …等等。
中文 English
- 字串 string
- 數字 number
- 函式 function
- 陣列 array
- 物件 object
- 類別 class
- 框架 framework
- 處理器 processor
- 渲染 render
- 套件 package
- 版面配置 layout
- 模組 module
- 測試 test
- 命令列 command line
- 函式庫 library
- 資料庫 database
- 快取 caching
- 認證 authentication
- 授權 authorization
加入 ALPHA Camp 全端開發緊密學習社群,你也能獲得助教與同學的互助支援
Stack Overflow 導覽
網站簡介
Stack Overflow 的首頁是作為商業展示用途。若要進入到公開的會員問答區塊的話,請點選左上角的漢堡”三”圖示,就可以看到 PUBLIC 的 Stack Overflow。若你想觀看特定的主題標籤(Tag)或是某些名人(User),你也可以點選這兩個選項來找尋你想要的資訊。
搜尋你的第一個問題
網站導覽列上的搜尋框,用英文搜尋關鍵字。
1. [JavaScript]:搜尋有 JavaScript 這個 Tag 的問題
2. user:tomfrank:搜尋使用者 tomfrank
3. “words here”:精確搜尋 “words here”
此外還有照「回答問題數」、「文章評價」、「發文者是否選出最佳解答」,一共六種搜尋方法。
註冊一個帳號
註冊一個帳號是發問問題的必須步驟,步驟非常簡單。
- 登入首頁,點選右上角的 Sign Up
- 使用 Github, Google 或是 Facebook 快速完成註冊即可
發問你在 Stack Overflow 的第一個問題
如何發出一個好問題?
好的問題,除了被他人回答的意願比較高外,你的思考模式和嘗試過的歷程,無論好壞結果,對於日後有遇到類似問題的人們,都是寶貴的指引。在提問之前,你得先自己測試過,並條列疏理下你所遇到的情況:
- 思考方向
- 已試過的方式
- 預期結果
- 出現的錯誤訊息
- 跟問題有關的檔案配置
- 所用的程式語言
最後,請使用英語發問,畢竟這是個以英語為主的論壇。你可以使用 Google Translate 或是有道翻譯等工具來幫助你在自然語言上的難題。
Title 問題標頭
描述你所遇到的困難 + 所使用的語言。
描述困難的方式,可以採用以「目標」或是「差異」的方面來撰寫,像是:
1. How to get repeated objects in json array in javascript?
如何在陣列中取得重複的物件 (JavaScript) ?
2. How to suppress “Undefined” errors before fetching data in Vue?
如何在 Vue 中取得抓取資料前 undefined 錯誤訊息?
3. JavaScript – if else problem (changing style color if a number is negative or positive)
JavaScript 的 if/else 問題:當數字為正或負數時,改變文字顏色
Body 問題內文
精確的描述你的問題。一個「精確」的問題,通常會包含以下的元素:
- 問題發生的環境,視情況加上版本號:Python3, JavaScript, MacOSX, Windows10
- 你對於你的問題的理解
- 你曾經做過什麼樣的嘗試
簡言之,盡可能的想像要回答你問題的人,要如何在其電腦上重置你所遇到的環境。如此一來,才能快速的幫你解決問題。
範例:
I used the node.js, mongoDB to make a shorten-links generator.
My pseudo code is like this:
app.post(‘/’, (req, res) => {
to generate a short link
while(if there is the same short link in database ) {
to generate a short links (until no match in database)
}
save the short link to database
res.render
});
I would like to avoid the same pattern.
However, I could not find a better way to jump out the while loop successfully?
Could anyone give some hints?
Here are my codes below:
<your code=””></your>
Tags 問題標籤
幫你的問題上一些關鍵字標籤,方便他人的尋找,像是 Python, JavaScript, React, Vue.js …等。
等候他人回應
如果你掌握以上的原則,你可能會得到兩種結果:
- 重複的問題:收到這個也不用太過緊張,代表論壇管理員覺得你的提問,在早些日子已經有人回答過了。你可以點擊他們所提供的連結前往查看。
- 有他人回答(Reply)或是回應(Comment)在下方:仔細閱讀他們的回應,然後從中去修正你的程式碼。每人的回答方式不同,有些會幫你寫好解法;有些則是給你一些提示讓你探索。
與他人互動
你可以在每個人的回答(Reply)內進行回應(Comment)。回應內,你可以進一步的作提問,或是表達感謝。
禮多人不怪
這個由 2008 年起,匯聚眾多撰寫程式碼的工程師論壇。發問的時候客氣一下,會比較有機會得到友善的回應。當然,這必須要建構在你已經事先做足發問的準備下(如使用過 Google,在問題中詳述你的情況)。最後問題如果解決,留下簡短的補充說明,像:
- Thanks! .lean() solves my issue.
- Thanks, @anonymous! The only problem is that it’s counting user #1 twice because he has 6 orders.
如何解讀他人回答
RTFM / STFW
當你看到類似以下的回應時:
- Read The Fxxxing Manual
- Search The Fxxxing Web
- 問題評價總和為負
- 一些略帶貶意的的字眼
代表你的問題其實就在官方說明文件內,或是簡易的 Google 搜尋就可以找到的東西。別忘了,Stack Overflow 已經有了將近10 年以上的問題累積量,你可以先用 site:stackoverflow.com 來找是否有人回答過的。
當你看不懂對方寫什麼,該怎麼辦
- Tag 對方(@anonymous),等待對方看見再給你一些說明
- 從對方的給予的回答中,釐清一些方向後,自行排除問題
別忘記,會使用 Stack Overflow 上的人們,普遍認為人們需要有主動面對、解決問題的能力。你可以將嘗試後的結果寫在新的 Comment 裡,給遇到類似問題的人們參考。
地雷和坑不要踩 – 發問錯誤示範
你還未嘗試尋找答案
1. 我能在哪找到某程式或資源?
2. 我如何取得一個陣列的第一個值?
以上這類的問題,註定是會被忽略甚至會招惹一些貶意評論。畢竟,能夠 Google 搜尋到或是官方文件就有的答案,不要直接發表出來。
沒有完善的描述你曾做過的努力
各位大大請幫忙,我的程式不會動了,以下是程式碼……
沒有描述過你曾經對於你想要解決的問題,作過什麼樣的嘗試,而要他人憑空猜想你可能遇到什麼問題的話,被忽略或是得到噓聲的機率是很高的。
尋求大方向的討論
Hi 大家,關於 「2020 第一季要出現的 BootStrap 5 框架拿掉了 jQuery」一事,有什麼樣的看法呢?
Stack Overflow 上頭,問題多半是以解決工程師在實際寫程式中,遇到的疑難雜症。這種大方向的討論,會有很高比例被酸說「請自己做回家功課」。
無關程式的事情
Stack Overflow 不是 PTT 八卦版或是 DCard 閒聊版,跟程式沾不上邊的問題就請另尋他處吧。
即使你很急也不要在標題寫緊急
緊急,是你自己的個人感覺,沒有人需要為你的情緒負責。在問題標頭打上緊急(Hurry)之類的字樣,並不會讓你得到比較快的回覆。反之,被噓、被管理員刪除的可能性還比較大一些。
重複張貼問題
如果你的問題沒有得到回應,或許你該在你原先的問題上,充實一下內容來吸引他人關注,進而獲得回覆。重複張貼問題有很大的機會會被管理員視為鬧版。屢勸不聽的話,日後的發問權限有可能會到受到限制。
試著回答問題
Stack Overflow 是一個幫助在寫程式的人們解決問題的平台,隨著時間的經過,過往的方法可能不再管用,或是有新的簡潔方法可以取而代之。如果你有發現你可以回答或是補充的問題,不要吝嗇你的想法,勇敢的整理一下自己的思緒後,寫成文字發表上去吧。
結語
Stack Overflow 已經成為有撰寫程式需求的人,不可或缺的好幫手。你或許會不習慣它所形塑的互動生態,但你一定可以多少藉由在上頭閱覽多篇問答的過程中,掌握一些日後解決問題的能力。