趁着元旦休假+春節,嘗試把2018年期間讓我受益的一些文章、問答,翻譯一下。
歡迎指正、討論,但願對你也有所幫助。
原文連接:Things I Wish Someone Had Told Me When I Was Learning How to Code
說明:這一篇最沒有乾貨java
要知道,如何編寫代碼主要是關於如何構建事物,瞭解你的最終目標會讓學習路徑更將清晰。若是你的目標只是「學習編程」,而不清楚最終程序的種類,以及它們如何讓生活更美好,那你可能會以爲過程充滿沮喪。程序員
我有點慚愧地認可,我學習計算機科學的動機之一是想證實本身很聰明,但願可以得到聰明人才能從事的工做。我也喜歡數學和理論(這本書曾在我敏感的年齡引發了個人注意),編程與之不謀而合。不過,在我找到將技術與我真正喜好的事物(好比音樂和文學)聯繫起來的方法以前,這種狀態維持不了多久。編程
那麼,你學習寫代碼是爲了編寫什麼?網站?遊戲? iPhone應用程序?成立一個創業公司一晚上暴富?交互很牛的軟件?仍是但願可以給領導留下深入印象,亦或用腳本跑一些繁瑣的任務,這樣你就能忙裏偷閒看水獺圖片了(譯者注:不是很懂這個趣味)?也許你只是但願更有競爭力,在簡歷中能寫上會編程,或者學習編程只是你的一項自我教育的計劃。全部這些都是值得的目標,不過你要找到屬於本身的那一個,研究明白。框架
其實編程跟其餘技能沒啥區別。就像學英語,先學詞彙和語法。也有點像數學,特定函數解決特定問題。還有點像各類工藝和製做技術,隨着技藝的發展,針對不一樣場景和任務開發出不一樣的技術、工具,也總結出不一樣狀況下的最佳實踐,隨你選用。編程語言
這傢伙(很是聰明,我很喜歡看他的文章)以爲,在編程領域,真正的程序員和其餘人之間有一條明顯的邊界線,邊界線區分出了兩撥人的編程智慧。這條線就包括指針和遞歸。函數
我在學校學到的指針和遞歸知識,當我學會它們的時候,彷彿顱內高潮了——正是這種智力上的愉悅感,讓我想要深刻學習計算機科學。可是,在課堂以外,須要學習新概念才能完成項目的機會愈來愈少,幫人愈來愈多地完成有意思的項目,可後來幾乎都學不到新的概念了。工具
沒有必要懷疑本身是否足夠聰明。固然,項目越複雜,須要的水平也越高,但這些在其餘領域也同樣。除非寫代碼成爲你的本職工做,不然你也沒必要把遞歸理解的很透徹才能完成項目開發。學習
第二次、第三次可能仍是跑不起來網站
第一次學習編程,你極可能遇到這樣的狀況:認爲本身已經正確地寫好了配置,也檢查再三,可是代碼仍然運行錯誤。你也不知道從哪入手修復,錯誤信息(能有錯誤信息就算幸運了)也顯示「去你的吧」。極可能在你就在這放棄了,由於你認爲本身不是這塊料。我深有同感,在我第一次編譯運行C++代碼的時候,我獲得的錯誤信息是「segmentation fault」。編碼
其實這種經歷對全部水平的程序員都很常見,甚至跟你的智力水平、編碼經驗都沒啥關係。做爲初學者或者老手都會遇到這種狀況。主要的區別是,你要如何應對這種狀況。
我發現,編程新手和有經驗的程序員的最大區別是信念:相信程序出錯時出於邏輯錯誤,是有跡可循的;相信bug能夠被解決,相信總會有途徑解決眼下的問題。相信讓代碼正常運行的方法雖然暫時沒找到,但耐心鑽研,確定能讓程序跑起來。
花括號另起一行,花括號不要另起一行。用tab縮進,不要用tab縮進。你應該使用存儲過程,不過實際上存儲過程沒啥用。你應該寫註釋,好代碼不須要註釋。這些互斥的建議會一直伴隨着你。
問題老是存在多解的,沒有惟一正確的方法。不少程序員喜歡推廣他們的我的偏好,可是選擇並不惟一。你們一直告訴我我是錯的,而我一直試圖弄清楚錯在哪,這讓我早期職業生涯感到壓力的一個方面。
團隊協做過程更是免不了有人反對你的編碼方式。有時候反對你的人是對的,你要深刻了解,看看爲何對,爲何錯。有的時候呢,你纔是對的,反對意見只是想挑起一個毫無心義的爭論,那就直接忘掉它,按着編碼規範該怎麼寫怎麼寫。
HTML不是真正的代碼。若是你不用vi,那算啥寫代碼。真正的程序員都會寫C,沒人作Windows開發。有些東西你永遠不會,你不該該幹這個。你不是真正的程序員。
編碼這件事對不一樣人而言意味着不一樣的東西,相比過去,如今也發生了不少變化。並且頗有意思的一點是,愈來愈成熟的工具、框架和開源代碼,讓新手和老手都更容易開發項目。使用這些工具和框架會被認爲不是「真正的程序員」。
這背後的陰謀是由於若是你們都稱本身是程序員,那程序員這個稱號就變得沒意義了。這種自設門檻的行爲害處頗大。
放手去使用簡單的工具開發項目吧。基於Stencyl或者GameMaker開發遊戲沒啥不妥,第一次編程是寫HTML和Excel宏也沒問題的。堅持該堅持的事情並不會有壞處。
隨着你越寫越順手,天然會發現更好用的工具。並且,大多數時候不多有人看你的具體實現,也不知道你用了哪些組件和工具。
再讀一遍前一段內容吧。我曾經很是擔憂本身被認爲不是」真正的極客「,尤爲是在學校,會擔憂個人着裝、個人立場或者本身的讀物和選擇的軟件不夠極客。
關於如何學習編程的文章不少。你能夠經過書本、交互式學習或者調試其餘人的代碼來學習概念。並且,你也有不少編程語言來選擇哪一個開始學習。
市面上有不少自學編程的課程或者論壇。這些學習過程以後最多見的抱怨就是你能夠快速地學習完初學者的知識,而後學習曲線忽然就變得陡峭了。以後想要取得進步,變得很是困難。你知道如何寫輸出文本的代碼,但不知道怎麼開始寫一個真正有用的項目。也可能會以爲本身學得比較僵硬,沒有真正領會精髓,責備學習材料不夠好。
當你進入這個階段,市面上大多數的教程和資料都沒用了,由於那些材料面對的受衆是很是初級的初學者。你當前的困惑是」不知道本身還不知道什麼「,不知道本身接下來改如何更進一步。
我想說的是,不管你按照哪一個教程學編程,你都會碰到學習曲線變陡這堵牆。惟一的解決辦法就是堅持不懈。你要學習更多的知識,嘗試更多新鮮事物,逐步解決如何構建有用的項目。若是你都知道爲何學習編程,那你必定會找到接下來進步的路。
梅花香自苦寒來,寶劍鋒從磨礪出。我以前強調的信念,在這個階段就會派上用場。保持耐心,堅持不懈,最終會找到答案。