學習編程,若是當初有人給我這些忠告就該有多好!

在你學習編程以前思考一下你的目標程序員

要知道編程大多時候就是在創造,當你有最終目標感時道路會更加的清晰。若是你的目標是「學習編程」而不是更具體的學習哪一種程序及如何讓你的生活更好,那麼你可能會發現這不過是一次使人沮喪的實踐。編程

我有點慚愧地認可我學習計算機科學的部分動機是爲了證實我聰明,及我想幹「聰明人」的工做。我也喜歡思考數學和理論(《哥德爾、艾舍爾、巴赫:集異璧之大成》這本書在我易受影響的年紀進入了個人腦海),編程是一個不錯的選擇。固然這並不足以使我堅持這麼久,真正讓我堅持的是我發現了編程能夠將科技與我真正喜好的東西(如音樂和文學)鏈接到一塊兒。框架

那麼,你想要寫什麼?網站?遊戲?iPhone應用?致富的商業軟件?交互藝術?你是想讓老闆印象深入?或你是想自動執行一些乏味的任務以讓你有更多的時間看水獺照片嗎(譯者注:這裏應該指有更多的時間看外面的風景)?也許你只是想更具備就業競爭力,由於能夠將技術流行詞添加到簡歷,或者只爲了實現你的教育需求。全部的這些都是有價值的目標,你得肯定知道哪一個纔是你想要的目標而後相應的去學習吧。工具

沒有什麼神祕的東西學習

編程跟其餘東西同樣,是一門技術。跟語言學習同樣,有須要掌握的語法和詞彙;跟數學同樣,有解決特定類型問題的流程方法;像各類工藝和藝術創做同樣,有技術、工具以及人們經年累月發展起來的最佳實踐方案,專門解決各類不一樣類型的任務,你能夠自由的使用、修改或棄之不用。網站

Joel Spolsky(一個很是聰明的傢伙,他的一些其餘的觀點我也很喜歡且頻繁認同)曾論斷:在有着「程序員真正思想」的人和缺少該領域成功所必備的知識能力的任何人之間有一條很清晰的界限。據他所言,這條界限包括指針和遞歸(這裏和這裏有爲感興趣的人提供的入門資料)。指針

我在學校學習過指針和遞歸,當我掌握了事後,大腦發生了一次愉悅的波動—這種智力快感使我想要將學習計算機科學排在第一位。可是,除了課堂練習外,其餘時候用指針和遞歸來完成任務的次數就相對較少了。後來在一次次的幫助他人學習時,我發現你們根本不用掌握這兩項技術中的任何一項就能夠完成一些很是有趣有益的項目。調試

想知道或怕知道本身是否「足夠聰明」其實沒什麼意義。固然,你的任務越複雜越深奧,你須要掌握的知識水平就越高。不過這也一樣適用於其它的任何領域。除非你計劃徹底靠編程生活,不然你可能並不須要成爲一個掌握遞歸的天才來完成你的任務。教程

第一次運行通常不成功,第二次第三次也可能不成功遞歸

當你第一次學習編程時,你會很快遇到這樣的特殊經歷:你認爲已經按照所想的完成了每一件事,檢查了一遍又一遍,卻發現仍然運行不了(出現bug了)。你徹底不知道該從哪開始修復它,錯誤信息(若是你夠幸運只有一個的話)好像在說「fuck you」。你可能就此放棄,內心想着本身恐怕永遠也解決不了了,那麼你就不適合幹編程這行。我一開始就有這種感受,嘗試着用C++寫一個程序而後運行它,卻只獲得「segmentation fault」這個麻煩。

可是這種經歷對全部不一樣技術水平的程序員來講都太廣泛了,這絕對與你的智商、技術悟性或者是否適合幹編程這行沒有任何關係。初學者會碰到這樣的狀況,經驗豐富的程序員也會碰到這種事情。主要的區別就在於你如何應對這種狀況。

我發現新手程序員和有經驗的程序員之間一個很大的不一樣點,就在於一種信念(指有經驗的程序員所具備的信念):相信事情出錯是由於邏輯緣由而且必定能找出來;相信bug能夠修復;相信有辦法實現目標。從「運行錯誤」到「運行正確」的過程可能不是很明顯,可是有耐心你一般均可以找出問題。

老是有人說你作錯了

括號應該另起一行;括號應該放在同一行;用tab鍵來縮進,可是tab很邪惡喲;你應該使用存儲過程,但實際上你又不該該用它們;你應該老是對代碼進行註釋,可是好代碼不須要註釋。

基本上對於一個特定的問題老是有許多不一樣的方法,沒有所謂單一的「正確方法」。許多程序員都很是擅長倡導他們首選或偏心的方法,可是那並不意味着這是「惟一正確的方法」。若是與人們面對面爭論後告訴我:我是錯的,那麼我也會盡力搞明白是否他們就必定是正確的,這是我早期職業生涯比較重要的一個方面。

若是你在一個小組裏與其餘人一塊兒編程的時候,確定會有人老是對你作的東西指指點點,有時候他們說的的確是正確的,可是老是值得去探究下看你是否真的「作錯了」。但有時候他們徹底就是胡扯或只是再次引發了一場古老而沒有意義的爭論,那麼你最好適應這樣的狀況而後忘掉它吧。另外一方面,若是你我的喜歡這種古老且沒有意義的爭論的話(好比語法狂,一直看着你們),那麼不用多說,你來對了地方。

老是有人說你不是一個真正的程序員

HTML不屬於真正的編程;若是不用vi的話,你就不夠嚴肅認真;真正的程序員要懂C;真正的程序員不用Windows;有些人歷來都學不會;你不該該學習編程;你不是一個計算機程序員(可是我是)。

「編程」對不一樣的人有着很是不一樣的含義,並且如今看起來與過去也不太同樣。有趣的是,你們都知道,工具、包和框架可以讓初學者甚至受過訓練的開發者更快更容易的作開發,但正因如此這些東西每每被貼上「不是真正的程序員」的標籤。(看:「Return of the Real Programmer」)

其實這背後隱藏的是一種懼怕心理:「若是「任何人」敢自稱他們本身是一個真正的程序員,那麼這篇文章的題目就沒有意義了(譯者注:也就是都不敢自稱本身是真正的程序員)。可是我認爲這種保守行爲是很是具備破壞性的。

使用那些讓你最容易開發的工具吧。若是這意味着你的遊戲是用Stencyl 或者GameMaker作的,而不是本身從頭開始寫的,不要緊啊。若是你首次編程用的是HTML或者Excel宏,也OK啊。只要你能堅持下去就行。

當你愈來愈舒服的時候(沒任何挑戰力),你會天然的開始找出那些工具受限的不足的(而不是有幫助的)地方接而尋找功能更增強大的工具,可是大部分狀況,不多有人會去看你的代碼或問你用什麼工具—你用這些工具實現了什麼功能纔是關鍵。

憂慮所謂的「極客聲譽(geek cred)」至關於慢性自殺

如前所述,我過去(尤爲在學校)一度很是擔憂從個人穿着,個人講話,我選擇的閱讀資料,甚至個人軟件定製選項是否是證實了本身「不是一個真正的極客」(不是真正的極客貌似就沒啥資格進入技術社區),這嚴重消耗了個人精力,後來我決定徹底不考慮這些東西后個人技術更強了(譯者注:與其花時間搞那些沒意義的東西不如多學點技術,這樣你的技術就會愈來愈強)。

你須要謹記一點:你擅長編程的能力與你到底有多適應各類極客亞文化沒有一丁點關係。若是你心裏深處知道本身永遠都不會適應這些亞文化(而所以焦慮的話),那就須要加倍的記住了。你爲了證實本身所浪費的精力應該用來作真正有有意義的事情,而且就算你是一名無可爭辯的極客,眼窩中流露中可信賴的光芒,那麼也請記住:當你評價其餘人的信譽水平時,也並不意味着你認爲的就必定對,必定是事實。

堅持比方法更重要

咱們永遠不缺像學習編程的「正確」或「最佳」方法這樣的文章,其實還有不少潛在的方法。你能夠從一本書或經過完成互動練習或經過調試其餘人所寫的東西來學習概念。固然,在你第一次學習的時候有許多的語言供你選擇,每種語言都有相應的宣傳和倡導。

關於「自學編程」流程和講習班的一個常見的抱怨就是:一開始你會很愉快的輕鬆度過初級材料的學習,而後會愈來愈困難,這時你就會很快走上陡峭的學習曲線。你知道如何在頁面上打印輸出一些文本行,可是你不知道從哪開始進行一個「真正的」有用的項目。你可能感受你只不過遵循了一些指南而沒有真正的掌握,而後你可能就會指責學習資料。

當你到了這一步後,大部分可用的教程和在線資源都不是那麼有用了,由於他們已經讓你成爲一名有經驗的程序員了。而後困難進一步加重爲這樣一個事實—「你不清楚本身還有哪些不知道的東西」,並且試圖搞清楚你下一步到底要學習什麼自己就是一個難題。

無論你遵循的是什麼「編程」方案,衝破這堵牆的惟一方法就是鍥而不捨。這意味着你要持續的嘗試新東西,學習更多的知識,而且一步步的搞明白怎麼去開發你的項目。若是你很是清楚本身爲何要將編程放在首位的話,最後你也很是有可能成功。

若是你堅持一點一點的鋪磚,可能會花費很長時間才能獲得一道牆,可是最終你仍是會獲得。這時候我先前提到的信念就派上用場了。若是你相信隨着時間和耐心,你能夠完成整個編程任務,那麼到時候你確定會達成所願的。

相關文章
相關標籤/搜索