巧用「搜索」解決自學編程遇到的難題

引言:相信每一個自學編程的人,入門之路都經歷了許多坎坷。不過咱們身邊藏着不少「良師」,多以利用老是可以帶來驚喜。善用「搜索」就是其中一位。 
本文選自《一路編程》,如何經過搜索解決自學編程中遇到的問題。javascript

  假如你在作一個 JavaScript項目,其中你獲得了一個字符串格式的日期(好比, ’2014-10-08’),你想要計算下一天的日期是什麼。咱們能夠用 parseInt將字符串轉換成文字,因此你就用了這個函數。java

function nextDay(str) { var num = parseInt(str); return num + 1; } var date = '2014-10-08'; var dateParts = date.split('-'); alert(nextDay(dateParts[1]));

  一切順利。而後有一天你意識到你的程序產生了一些很奇怪的結果,但只是在老版本 IE瀏覽器纔出現:你的程序認爲 ’2014-10-08’的下一天是’2014-10-01’,而不是 ’2014-10-09’。你設置了一些斷點並單步調試代碼,你會發現 parseInt看起來壞了:當參數是 ’08’時,在大部分瀏覽器中你會獲得 8,但在 IE中你會獲得 0。你發現了這個問題,但你不知道如何修復它。如今你要怎麼辦呢?隨着你不斷地編程,你會不斷地遇到相似的場景。比困境更加讓人沮喪的是不知道如何脫離困境。程序員

parseInt解釋 
爲何老版本 IE的 parseInt會作如此奇怪的事情呢?緣由是parseInt也對十進制以外的數字有效(好比二進制、八進制,以及十六進制)。若是你不告訴parseInt你在使用什麼進制,parseInt就用它認爲昀合理的進制來解析數字,而’08’看起來像是個8進制數。新的瀏覽器傾向於默認使用 10進制,即便字符串以 0開頭,但老版本 IE仍然認爲’08’是個 8進制。無論怎樣,你應該老是在使用parseInt時指定進制:parseInt(’08’, 10);(以 10爲基,或者十進制)會在全部瀏覽器中返回 8。在 Google時代,每一個人都是搜索專家。不到幾秒鐘,你就能夠找到各類信息,好比你正在看的電影女演員的八卦信息。由於互聯網之前和如今都是由程序員搭建的,互聯網上關於編程的信息格外的多。當你遇到像前面parseInt這樣的問題時,你確定會找到答案,只要你知道在哪裏找以及怎麼找。正則表達式

找到正確的關鍵字

  若是你不知道要搜索什麼,你就不可能找到結果。在第一次我要用轉義字符時就遇到了這個問題。我不知道有種叫作轉義字符的東西。我所知道的就是撇號在破壞個人字符串。在 parseInt例子中,你可能並不知道哪裏出問題了,那麼你要如何搜索一個解決方案呢?關鍵在於找到正確的搜索關鍵字。若是你在找一些針對某個編程語言的東西,就在搜索中包含這個編程語言的名字。而後想象其餘遇到一樣問題的人會如何描述這個問題。例如,在搜索 parseInt問題的結果時,一個好的查詢多是「 javascript parseInt returns 0」。當我運行這個搜索時,第一條記錄就返回了我要找的答案。 
若是你不肯定要搜索什麼,Google的搜索建議能夠幫助你。在你輸入查詢的開始部分時,提示能夠幫助引導你找到能夠搜到昀佳結果的查詢關鍵字。這些建議意味着其餘人搜索過這些關鍵字而且獲得了昀佳結果,因此你也許能成功。下圖展現了在搜索 parseInt解決方案時,一些有用的(以及一些不那麼有用的)建議。express

升級

  你要找的資源依賴於你處於學習的哪個級別。好比,若是你在考慮學習寫 Python程序,你想要找些關於用 Python的好處的介紹性信息。在這樣的例子中,你會想要用相似「 why use Python」(爲何使用 Python)和「Python features」(Python特性)這樣的搜索關鍵字。在你決定 Python適合你以後,你會想要學習 Python基礎。這時,你要搜索一些相似 「Python tutorial」(Python教程)這樣的東西。在你用 Python工做一段時間後,你也許會遇到一個問題,須要使用正則表達式。你已經知道什麼是正則表達式,以及在何時要使用它;你只是須要知道如何在 Python中使用它。那你可能就會搜索「Python regular expression」(Python正則表達式)或者「 Python regular expression documentation」(Python正則表達式文檔),找到關於 Python中正則表達式如何工做的文檔說明。如今假設文檔抽象,難以理解;你能夠搜索「 Python regular expression tutorial」(Python正則表達式教程)或者「 Python regular expression example」(Python正則表達式示例),找到一些比較容易消化理解的 Python正則表達式信息。這些例子要說明的就是,若是你在搜索關鍵字中指定你處於哪一個級別,你就更容易找到須要的信息。編程

錯誤

  錯誤可能讓人特別困擾,由於你的代碼不工做,同時錯誤信息看起來又特別模糊。不過錯誤信息有一個好處:錯誤信息中的文字基本上老是不變的。這就意味着,其餘人也見過相同錯誤信息,而且極可能已經找到了解決方案。當你遇到一個不理解的錯誤信息,複製粘貼整個信息到谷歌,通常你都會找到問題的答案。瀏覽器

以終爲始

  在一開始,你也許並不知道本身到底要搜索什麼。你可能不徹底理解要解決的問題,或者甚至不知道你須要學多少東西才能解決它。僅僅由於你不徹底肯定你要找什麼,並不意味着你不能搜索它。以終爲始,追本溯源。首先,搜索你的昀終目標,在你搜索結果的過程當中,留意不熟悉的字和短語;而後,搜索全部這些看起來相關的關鍵字,再次記錄結果中全部不熟悉的字和短語。 
  當你到達一個點,可以理解幾乎全部搜索結果中的東西時,就能夠開始學習那些你不理解的東西,直到你又到達一個點,這時你瞭解的知識足夠搭建你原本要搭建的東西。這個過程會幫助你在達到目標的過程當中學到不少很棒的知識,或者,至少幫你意識到你的目標也許須要比預期更多的工做和學習才能達成。 
  這種追本溯源式的搜索引導我學習了 Web編程。我以前提到過給個人第一個網站實現「自動補全」功能。那時我並不知道那是自動補全,因此我搜索了一些相似 「google search suggestion」的內容,這讓我發現了關鍵字「autocomplete」。我讀了一些關於 autocomplete的文章,確保那就是我要找的東西,而且發現了關鍵字 AJAX。我瞭解到 AJAX就是實現基於用戶輸入的文字展示搜索推薦的技術。我作了些 AJAX調研,發現你必須寫 JavaScript才能使用 AJAX。因此我開始學習 JavaScript,直到我學了足夠的知識,可使用 AJAX,我就能夠搭建自動補全系統了。在這個過程當中,我學到了不少 HTTP、Web服務器,以及數據結構的知識。我相信用追本溯源的方式解決編程問題會有給你很大的回報。服務器

識別高質量資源

  不幸的是,互聯網上不是什麼東西質量都很高。編程信息和其餘內容都是如此。當心那些質量不高的網站和書。由於相信網站上那些過期、寫得很差的信息,我學到不少錯誤指導和壞習慣。不幸的是,在可以區分高低質量資源以前,你也許得吃幾回虧。若是你訪問的網站有一大堆廣告,特別是它們跟編程基本不要緊或者一點關係都沒有,那你就要當心了。當心那些嘗試把各類話題都囊括進來的網站(好比, About.com包括了報稅、園藝、編程,以及髮型設計)。當你見到那種說你要學的東西很簡單的聲明,也要當心,若是太簡單了,你極可能學到的是錯誤方式。大部分編程語言、庫和框架都有網站,包含完整的、高質量的文檔。這些網站通常包含完整的入門信息、初學指導、教程,以及參考材料。從這些網站上找到的信息一般都是高質量並且正確的。數據結構

我的博客:隱藏的寶藏

  儘管你要當心從一個非官方網站上得來的信息,你仍是能夠在博客上找到一些有價值的信息。專業程序員喜歡把他們解決過的問題寫出來,一般以博客的方式發表。文檔和教程很棒,但沒有什麼能夠跟真實的人描述一個真實世界的問題及其解法相提並論。不過在你相信這個信息以前,仍是要調研下做者。看看他們的 LinkedIn簡歷、StackOverflow檔案、GitHub檔案,以及任何其餘你能找到的資源。若是他們看起來明白他們在說什麼,你就找到了一個很好的信息源。這類博客就像編程導師;他們給你如何更好編程的免費建議。記住,若是你接收他們的建議,要在文檔中提一下那篇博客。框架

  本文選自《一路編程》,點此連接可在博文視點官網查看。 
                       圖片描述

相關文章
相關標籤/搜索