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