编程问题难解决,学会提问是关键!
引言:自學編程是個困難的事情,因為你可能找不到人來幫你解決編程問題。幸運的是,我們有互聯網,所以盡管你個人并不認識任何程序員,你還是可以向真人提問編程問題,并且得到真實的(好)答案。不過獲得問題答案的關鍵在于在什么地方、什么時間,以及如何問問題。本文選自《一路編程》。
什么地方
找到正確的地方問編程問題可能和問對問題一樣重要。如果你跟錯誤的人問了正確的問題,也許得到了答案,但你不會得到一個好答案。因為你想要一個好答案,就需要知道在哪里問問題。
1. 打電話給朋友
如果你是因為沒人教你、指導你或者引導你而自學編程,那就要改變一下了。事實上,你可以一個人走得很遠,但你如果有個朋友可以幫你指點正確方向,你會學得更多更快。有時候,你已經認識一兩個程序員,他們可能會很高興回答你的問題(特別是現在你有了基礎,你可以問出好問題)。如果你不認識任何程序員,就去認識一個。多虧了像 www.meetup.com/這樣的網站,你可以找到很多在你這個領域的程序員會議。找一個那樣的群組,認識些人,跟他們學學。?
問真人問題是學習和尋找答案的昀高效方法。一個真人可以看你的代碼,幫你調試,以及幫你找到解決方案。一個真人可以給你量身定制的幫助,因為那個人知道你的背景,以及你當前的知識等級。因為他已經回答了你的其他問題,并且熟悉你工作的項目。朋友可以教你和幫你找到自己的答案,而不僅僅是給你針對你當前問題的答案。如果有一點點可能,一定要問朋友。
2. StackOverflow
即使你有程序員朋友,他不可能回答你所有的問題。所以 StackOverflow(http://stackoverflow.com/)是一個很棒的資源。 StackOverflow是一個在線的程序員問答社區。網站上的每個東西都通過點數來評分。如果你問了一個問題,很多人都覺得有用,那些人會給你的問題投贊成票。?
?
如果你對一個問題提供了很好的答案,人們會給你的答案投贊成票。?
?
相反,不好的問題和不好的答案會得到反對票。昀好的問題在搜索結果中會獲得高優先級,而昀好的答案會被顯示在頁面的昀頂部。聲望點會獎勵給(或者移除)用戶的每一個贊成 /反對票,累積的聲望值還會顯示在頁面上所有的用戶名旁邊。所有這些投票和點數的背后理念,是要讓好東西浮現出來,而不好的東西逐漸隱藏起來。這個系統非常好;你幾乎可以找到任何編程問題的答案。如果問題還沒有被問過,你可以問一下,通常可以在一小時內得到答案。
3. 論壇
在我剛開始編程的時候,在線論壇是當時找到編程問題答案的昀佳方式。在我學 Perl的過程中,我在 Perl論壇花了很多時間。?
?
盡管我很感激這些論壇,我還是很高興 StackOverflow及其他類似的問答排名網站很大程度上取代了論壇。你知道,論壇很難做信息篩選。一個問題可能會得到好多頁的回答,而問題的昀佳答案可能在任意一頁,或者可能根本就沒有昀佳答案。要想知道答案的唯一方式,就是通讀每一頁的每一條回復。如你在上圖中看到的,論壇通常都不怎么好看。然而,論壇的一個優勢是它們一般是針對某個特定的編程語言,因此,論壇會吸引這門語言的世界級專家。專家的聚集會讓論壇變成一個對初學者不友好的地方。一般我建議就用 StackOverflow來解決問題,但論壇在 StackOverflow沒解決的情況下可能會有幫助。
什么時候
程序員很看重效率,不僅在代碼上,也在生活中。他們愿意提供幫助,但也會珍惜他們的時間。在你盡全力自己尋找答案之前,不要問問題。我在 StackOverflow上問問題之前,會問自己:
我 Google了嗎?從 Google上得到了什么結果,為什么這些結果沒有回答我的問題?
我讀過文檔了嗎?我讀了文檔的哪一節,為什么文檔沒有回答我的問題?
有人問過同樣的問題嗎?為什么之前問題的答案在我這個場景不能工作?
作為程序員,我也看中效率。我想要自己找答案,但我不想沒有目的的搜索,所以如果我已經試過了 Google,試過了文檔,也試過了搜索 StackOverflow,還是找不到答案,那我知道,是時候問一個問題了。
玩具鴨?
通過問問題,你可以經常找到答案。不斷地嘗試用簡潔的語言描述問題,可以幫你更好理解你的問題,也許甚至可以揭示問題的答案。找一個毛絨玩具(鴨子就不錯),放在電腦旁邊,當你遇到問題的時候,問問鴨子。玩具鴨是一個好的傾聽者,而且有很多空閑時間。如果問了鴨子之后你還沒有搞清楚,去問一個真人吧。告訴他你已經問過鴨子了。
怎么問
當要問問題的時候,你應該意識到“世界上沒有愚蠢的問題”這種說法在像 StackOverflow這種編程論壇上并不適用。我這么說并不是因為刻薄,而是讓你知道,如果你問了一個壞問題,你可能會被上課而不是得到答案。社區成員會專注于如何修復你的壞問題,而不是如何修復你的問題。另一方面,如果你問了個好問題,你會得到好答案,看你的問題有多好,你也許還能得到些獎勵。
1. 盡量簡單
在 StackOverflow和其他論壇上回答問題的人都是志愿者,他們不會因為回答你的問題而得到補償(除了聲望點),所以你應該盡可能讓你的問題更容易回答。寫一個清晰的問題描述,列出在你自己搜索答案時找到的資源,以及為什么那些資源沒有回答你的問題。你的問題應該全面但不要長篇大論,如果問題很長,你應該加一個概述,讀者理解你的問題所花時間越少,他們用來找解決方案和寫答案的時間就越多。
2. 不要害羞:貼出你的代碼
我第一次在 StackOverflow上問問題的時候,沒有包含我的代碼,因為我不太好意思。我怕人們會取笑我的代碼,而不是回答我的問題。事實上,在沒看到導致問題的代碼時,編程問題是很難回答的。這就像是醫生用電話進行診斷,“聽起來你有胃腸感冒,或者也許是闌尾炎。 ”貼出跟你問題相關的代碼會幫助你得到更好的答案。
通過教別人來學習
通過做項目,你可以學到很多,但你可以通過教別人學到更多東西。在你學習如何編程的過程中,正是昀適合教別人如何編程的時候。通過把剛學到的東西及你正在學的東西教給別人,剛好是你以一個初學者需要的視角理解這些知識。老程序員們也許比你知道得更多,但那也意味著他們解釋問題的方式會很復雜,而且難以理解。這么看來,你要比其他人更適合教初學者。
1. 回答問題
你不需要找一個編程老師的工作來開始教學。你可以通過回答問題開始。在 StackOverflow上找找你能回答的問題。你已經了解了一些關于 HTML、JavaScript,以及 Google Chrome擴展的知識,你可以嘗試回答跟這些相關主題的問題。如果你不習慣在 StackOverflow上回答問題,你還是可以回答問題。找其他在學編程的人(或者說服一個朋友學習編程),然后你們可以互相回答問題。你們兩個會比各自獨立學習學到的東西更多。
2. 寫博客
寫作也是個學習的好方法(我猜這就是為什么你上學時要寫那么多論文的原因)。你已經學習了很多可以寫得好內容,比如 JavaScript的函數如何工作,源代碼是什么,以及為什么要使用 Grunt和如何使用 Grunt,如何使用 Chrome開發者工具,以及如何創建 Chrome擴展。在你開始寫這些主題時,你會發現你的理解是有缺口的。在你嘗試填補這些缺口時,你會更深刻地理解這個概念。記住,你具有教別人的昀佳角度,因為你自己正在學習這個概念。如果你不習慣寫一個給全世界看的博客,你可以給你的玩具鴨寫封信,它是個很好的聆聽者。?
本文選自《一路編程》,點此鏈接可在博文視點官網查看。?
?
想及時獲得更多精彩文章,可在微信中搜索“博文視點”或者掃描下方二維碼并關注。?
轉載于:https://blog.51cto.com/bvbroadview/1890411
總結
以上是生活随笔為你收集整理的编程问题难解决,学会提问是关键!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 九天揽月是什么意思(九天揽月作品赏析)
- 下一篇: 海参有什么营养价值(海参什么人不适合吃)