如果學習編程可以重來
英文原文:What I would do differently if I was learning to code today
譯/臘八粥
在過去的幾個月里,我一直在學習用 Objective-C 編寫 iOS app,最后我開始理清思緒。這比我想象中要難很多,也花了太長時間。
我經常遇到困難、感到沮喪,修復 bug 比實際寫代碼要花太多時間。但是,在我的手機上把玩我從頭開發的 app 有一種讓人驚奇的感覺。
用這種方式我學到了很多,除了開發 iOS app,還有平常的編程。我還遇到了一些問題,如果用不同的方法學習 Objective-C,或許我就可以避免了。
回頭看,如果我今天要學習編程,那么我會做一些不一樣的事情。
找到一名編程小伙伴
我還找到一種學習方法,那就是有一個可以交談的、活生生的人。
我的合伙創始人 Josh,主要做 Python 開發,實際上和我一起學習 Objective-C,并為我解答了很多編程理論方面的問題(“怎么讓一個 if 語句再次起作用?”),在我真正遇到難題時幫我調試。
至少有了極具耐心的編程伙伴,他可以解釋基本的編程原則,這是莫大的幫助。在我用 Objective-C 搞清楚具體細節之前,Josh 經常幫助我思考解決某個問題的大部分邏輯方法。
善用資源
如果你不夠幸運,身邊缺少有耐心的程序員解答問題,那么,其它一些地方可以讓你從真實的人那里獲得幫助:
關于具體語法或實現的問題,Stack Overflow 是我最近訪問最多的網站之一。我自己還沒有在那兒問過問題(由于該社區對初學者相當友好,我對提問持謹慎態度),因為我很少需要去問——通過瀏覽其他人的問題的答案,我的大部分問題就得到解決了。
Treehouse 通過視頻課程教授編程,還建立了社區論壇,你可以在這里討論有困難的 bug,或者你在聽課過程中碰到的具體練習。
在你需要幫助的時候,askadev 支持你聯系到有經驗的開發者。我還沒有嘗試過這項服務,因此我不知道有多大用處、或是否囊括了所有編程語言,不過它是免費的,下次你有需要,不妨一試。
如果你想給有經驗的開發者支付現金來獲得幫助,Codementor 會把你和熟悉你在學的語言的人匹配到一起。它們涵蓋了 Android、iOS、HTML、CSS、PHP、Python,以及很多技術。
小黃鴨問題的解決
如果你以前沒有看到,《小黃鴨式解決問題》的博文是非常有用的。具體操作是:對著一個小黃鴨或其它靜物,比如面包機,闡述你的問題,大聲點兒。 大聲講述問題的過程,經常有助于你自己意識到答案(或至少知道錯在哪里了)。我已經發現,大聲地討論我的代碼是一種難以置信的好習慣,每次在我找別人幫忙 之前,我都要盡量這樣做。
學習規范
在我學習編程的時光里,最影響我的就是對于我正在使用技術的誤解和陌生。比如,開發 API 意味著我需要理解 API 的工作原理、怎樣使用 POST 和 GET 請求、怎樣分析 JSON 數據,甚至我需要掌握接收 JSON 數據。
學習 Objective-C 不是開發 iOS app 所需要知道的全部,至少,不是我想開發的那種。我犯了個錯誤,我認為只要知道 Objective-C 就行了。甚至更糟糕的,我經常遇到困難,因為 Stack Overflow 回答問題的人、在線教程和書籍章節都在解釋如何用 Objective-C 開發,完全跳過了必需的、我需要知道的、基于 web 的原則,因為他們認為我知道了。
如果我今天重新開始,我將首先補充、積累 HTML 和 CSS 方面的知識。當我開始碰到一些我不太了解的新技術時,在準備用 Objective-C 實現之前,我會大概了解一下。
任何語言都可以起步
如果你真的不確定從哪里開始,或者你想開發什么,請不要因此受到影響。雖然我花時間學習 Ruby 和 Python、還沒有用它們完成任何項目,但是我不覺得時間被浪費了。
初學者通常的起點是學習 HTML 和 CSS 去開發網站。它們實際上是標記語言,如果你想開發移動或 web app,貌似學習 HTML 和 CSS 是浪費時間。但是在這種情況下,你將獲得知識和經驗,對你繼續學習編程語言是有幫助的。
如果你急切希望開始學習編程卻不知道從哪兒開始,就挑一本書、教程或在線課程,只要你喜歡,就搞定它!一旦你對想開發的東西有了更好的理解,你總是可以選擇學習一種不同的語言。
找到你真正關心的項目
對我而言,最大的學習曲線可能就是找到讓我堅持學習代碼的動機。過去我嘗試了很多次:在我小時候學習 HTML 和 CSS,幾年后學習 Ruby 的基礎知識,最近在學 Python。
我決定學習 Objective-C,不是因為它勝過了 Ruby 或 Python 我才喜歡,也不是因為我認識學 Objective-C 的人,只是因為我有一個 iOS app 的想法清單,我想完成——我真的想去開發。
我學習 Objective-C 的動機比以前學習任何其它語言都要強烈,因為我想開發的私人項目在鼓勵著我。
最重要的是,隨著難度加大,我感到沮喪、遇到困難時,我沒有放棄——因為我正在開發我真正關心的項目。每次我設法實現一些新功能,運行良好,得到的收獲甚至更好了,因為它是我有激情的項目的一部分。
如果你正在考慮學習編程,而你沒有選擇語言或平臺的任何限制,我明確建議選擇你真正有激情的項目,這樣才能為項目需要所選擇的語言打下基礎。
每個人的學習方法都不同,因此你可能有著與我不同的經歷,不過如果你只是剛起步、或在考慮學習編程的事情,那么希望我的經驗和錯誤能幫你學得更快。
- 注1:小黃鴨調試法,又稱橡皮鴨調試法,黃鴨除蟲法(Rubber Duck Debugging)是軟件工程中使用的調試代碼方法之一。就是在程序的調試、糾錯或測試過程中,耐心地向小黃鴨解釋每一行程序的作用,以此來激發靈感。http://zh.wikipedia.org/wiki/%E5%B0%8F%E9%BB%84%E9%B8%AD%E8%B0%83%E8%AF%95%E6%B3%95
<span id="shareA4" class="fl">
</span>