我多希望我學編程時,有人教我這些事!
1、學編程之前,想清楚自己想寫什么。
學習編程基本就是在學習建造東西。如果你知道你到底想造什么,你的編程學習之路將會豁然開朗。
如果你的目標只是“學習如何編程”,卻不知道自己到底想寫出什么樣的程序,也不知道這些程序?qū)⑷绾巫屇愕纳钭兊酶篮茫愫苡锌赡軙械骄幊虒W習令你沮喪受挫。
說起來還有點丟臉,我最早想學習編程,是因為我想證明我聰明。并且,我也想做一份屬于聰明人的工作。我還喜歡思考數(shù)學及理論。因此,編程怎么看都和我很搭。
但是這些想法都不足以延續(xù)我的編程學習熱情。直到有一天,當我終于發(fā)現(xiàn)如何將科技(編程)與我的真愛---音樂和文學---聯(lián)系在一起時,我才真正愛上編程。
那么,你到底想用編程來干嘛呢?
網(wǎng)站?游戲?iPhone應(yīng)用?一個讓你暴富的初創(chuàng)公司?交互式藝術(shù)作品?
你是想讓你的老板對你刮目相看,還是想寫個程序讓電腦幫你完成一個枯燥的任務(wù),以讓你能花更多的時間看水獺的萌照?
也可能你只是想在職場中更具競爭力,為你的簡歷加一個潮詞(編程),或者滿足你學校的畢業(yè)要求。
這些都是有價值的目標。你需要搞清楚自己的目標,然后有針對性地學習。
2、編程一點也不神秘,一點也不難。
編程和其他技能沒有本質(zhì)差別。就像語言學習里有語法和單詞;就像數(shù)學里有不同的步驟和不同的題目;就像所有的技藝和手藝,編程里也有前人總結(jié)的針對不同任務(wù)的技巧,工具,和好的習慣。
這些東西,你都可以自由使用,修改,或者棄用。
有個人曾這樣斷定,程序大牛和編程界的蕓蕓眾生之間有一個明顯的區(qū)別---后者往往缺乏足夠的智慧在編程界獲得真正的成功。在這個人看來,這種智慧包含對指針 (pointers) 和遞歸 (recursion) 的理解。
我在學校曾學過指針和遞歸。在學生時代,能理解指針和遞歸的感覺真心超級爽。這種快感激發(fā)我踏上了計算機學習之路。
但在課堂練習之外,我極少有需要去碰這兩個概念。并且,當我在教別人如何學習編程時,我也一次又一次地發(fā)現(xiàn),人們不用這兩個概念也能寫出很有趣很贊的程序。
所以,不要害怕,也不要去想自己是否足夠聰明。想這些都沒意義。是的,編程任務(wù)越復雜,越難懂,你就需要越高超的技巧才能完成。
但哪個領(lǐng)域不是如此呢?除非你這輩子就靠編程討生活了,否則你不太可能需要去理解編程中的遞歸。
3、沒人能一次搞定。
當你第一次學習編程時,你會很快撞上這么個問題。你覺得你已配置好一切了,你查了又查,但你的代碼就是有!問!題!你對如何排錯毫無頭緒。
錯誤信息(如果運氣好你有的話)很有可能對你說的是---“我了個去”。這個時候,你很有可能想要放棄。你覺得你永遠不可能搞定,覺得自己就不是編程的料。
嘿!當我第一次嘗試編寫C++程序,運行,卻只得到 “segmentation fault” 這樣的錯誤代碼時,我也有過一樣的沮喪感。
但是這種經(jīng)歷對任何一個水準的程序員而言,都再正常不過了。有過這種經(jīng)歷,并不代表你的智商,技術(shù)悟性,或你和編程的適合度有任何問題。
不管你是編程新兵,還是程序大牛,你都會遇到這樣的經(jīng)歷。而新兵和大牛的區(qū)別就在于如何對待這樣的經(jīng)歷。
新兵和大牛的一大區(qū)別就是信念。什么信念呢?
就是深信出錯的原因是符合邏輯的,并可以找到的,深信問題可以被解決,深信總有辦法實現(xiàn)自己的目標。從0到1之路也許并不明顯,但只要你有耐心,你通常都可以找到。
4、總有人說你做的不對。
大括號{}應(yīng)該怎么放放?該不該不用tab來縮進?該不該對代碼添加注釋?
對于這些問題,大家的做法各有不同。沒有誰有標準答案。很多程序員熱衷推銷自己的偏好的那種處理方式,但這不意味著答案只有一個。
事實上,與那些說我做的不對的人面對面,然后再努力去搞懂他們說的到底是不是對的,這種來來回回,是我職業(yè)生涯的壓力源之一。
如果你與一個團隊的其他成員一起寫碼,總會有人不認同你的某些行為。
有時他們是對的,但事實上你到底是!對!是!錯!永遠值得你親自去推敲。
有時他們純粹就是無理取鬧,你別理他們就好了。
5、總有人會說你不是一個真正的程序員。
看看這些說法吧!
“HTML不是真正的編程語言。”
“如果你不用vi,你就不是真正的程序員。”
“真正的程序員得懂C語言。”
“有些人就是不適合編程。”
“有些人就是學不會。”
“你根本就不是真正的程序員,我才是。”
要我說,編程對于不同的人有不同的含義。同時,編程的含義隨著時間的流逝也在變化。
有趣的是,那些能讓初學者,甚至是編程老鳥,更快上手,更省事的工具,包,框架等往往會被貼上 “真正的程序員不該使用” 這樣的標簽。
這種貼標簽行為背后是一種恐懼:如果任何人都能稱自己為程序員,那這個頭銜就將毫無意義。不過,我認為這種閉關(guān)自守的行為是有害的。
去用那些讓寫程序變得容易的工具吧。如果那意味著你用 Stencyl 或者 GameMaker 來寫游戲,而不是從零開始寫一個新的,沒事,只管去做。
如果你第一次嘗試編程是從HTML或者Excel宏開始,沒事,只管去做。哪個(編程方式)你能堅持下去,你就用哪個。
隨著你技術(shù)不斷提升,你就會發(fā)現(xiàn)那些便利工具對你的限制大于對你的幫助。那時,你就會去尋找更強大的編程工具。
但大多數(shù)時候,很少有人會看你的代碼,或者問你用什么編程工具。你的程序到底好不好用才是真正重要的。
6、堅持比方法更重要。
關(guān)于 “正確編程學習法” 和 “最佳編程學習法” 的文章有很多。的確,學習編程的方法有很多。
你可以看書來學,你可以做練習來學,你可以給別人的程序捉蟲來學。當然了,也有很多種編程語言你可以挑選來作為你的第一門語言。
自學型的編程課程或者講座系列常常有個問題:一開始你總會學得很爽,但難度會陡然上升。
print命令總是很簡單,但要真正搞定一個實用程序的編寫,往往讓人抓狂。你很有可能覺得跟著教程走卻并沒搞懂,然后你就開始抱怨教程有問題。
當你撞上這個 “編程玻璃頂” 時,那些教程和線上資源對你的意義已經(jīng)不大了,因為他們默認你已經(jīng)是一個編程好手了。
更讓整個編程學習進階之路變難的因素是,你根本不知道自己缺什么 (you don’t know what you don’t know) 。甚至,搞清楚自己接下來需要什么都成了難題。
不管上什么編程課,你都會有這么一段 “撞墻期”,唯一的解決辦法就是堅持到底。
這意味著你要不斷嘗試新事物,學習新知識,不斷地,一步步地,去解決問題,去編出你要的程序。如果你這時認真回看自己的編程初心,你就更有可能獲得成功。
堅持到底,就會勝利。這就是我之前提到的信念的價值所在。如果你真的堅持到底,你就真的會勝利。