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