Cover
人最大的缺點就是跷车,好為人師。這次也不例外,我又想做一次別人的老師双饥。
寫給誰
寫給那些學(xué)完一門或幾門語言之后還是只會寫一些A+B之類算法題的,認(rèn)真卻找不到門路想精進的弟断,真正想用技術(shù)做些事情的人咏花。
為什么寫
因為好多我認(rèn)識的,上了大學(xué)開始學(xué)編程阀趴,學(xué)C語言卻到現(xiàn)在做不出來東西的人昏翰,他們也有想法,也有做自己的努力刘急,但是被9年的義務(wù)以及應(yīng)試教育的學(xué)習(xí)方式所影響棚菊,找不到編程真正的門道。 而我寫這篇文章叔汁,無他统求,就是站在能用技術(shù)做點東西的技術(shù)水平角度上,告訴他們据块,編程是怎么樣的码邻,做東西是怎么做的。
一些前提
- 編程絕對不是一件輕松的事另假,反而很麻煩像屋,而且要細(xì)心,要耐心浪谴。所以經(jīng)常有人說在配置開發(fā)環(huán)境這個環(huán)節(jié)就淘汰了一半的人开睡,更何況碼半小時代碼debug一天這種事。所以我認(rèn)為這一行能做好苟耻,必須要對技術(shù)抱有很大的熱情篇恒。
- 編程也絕對不是一件很難的事⌒渍龋看完上面那條胁艰,你又聽到我這么說,肯定是覺得我有病智蝠。如果說你要建造金字塔的話腾么,是不是覺得這個工程很難,那么我說建造的最后在金字塔頂上放一塊磚頭很簡單杈湾,你可能不會反駁我解虱,那是因為之前放了很多磚頭了。同理漆撞,你說想成為一名程序員殴泰,我當(dāng)然說這不是輕松的事于宙,但是如果量化下來,編程精進的每一步都是放一塊磚頭這樣簡單的事悍汛。所以不要覺得編程這件事多么高大上捞魁,多么難學(xué)。
- 實踐是最重要的离咐,甚至編程的思想或知識大部分是從實踐中得到的谱俭。所以這一條的意思是說,教程可以看宵蛀,理論可以背昆著,但是看完不敲,背了敲术陶,不編碼實踐是傻逼的行為宣吱。
- 看是書是沒用的,或者說有些書是沒用的,哪些呢,就是那些標(biāo)著“27天”匠襟、“入門”猫态、“基礎(chǔ)”以及類似字樣的書。為什么看這種書沒用兆解,首先書中廢話太多馆铁,這些廢話雖然也是一些細(xì)節(jié),但是聽我的锅睛,這些細(xì)節(jié)后面慢慢再了解埠巨,其次用百度獲取除去細(xì)節(jié)的部分太簡單了,而且編碼都是在電腦上现拒,還有一個原因參考上一條辣垒。哪些書有用呢,就是那些百度不好找的印蔬,高端算法勋桶,數(shù)據(jù)分析方面的書,是值得看的侥猬。雖然我沒看過例驹,但是我是這么認(rèn)為的,也歡迎看過一遍這種書的人來打我的臉退唠。
- 用好百度鹃锈。怎么樣叫用好,就是你不知道的一個知識點瞧预,你可以用關(guān)鍵字來找出來屎债,很多人用書仅政,記理論就是因為自己不知道百度什么關(guān)鍵詞能把這個東西找出來。所以扔茅,一定要訓(xùn)練自己歸納關(guān)鍵字的能力已旧,我們可以不知道一個語法的結(jié)構(gòu),但是每當(dāng)要用的時候召娜,可以很快的用百度找出來并且自己寫出來运褪,這才是真正的編程能力。
- 這是一件需要自學(xué)的東西玖瘸。我們從小就一直是老師教我們什么秸讹,我們學(xué)什么,所以每當(dāng)我們想學(xué)什么的時候雅倒,第一反應(yīng)就是找一位老師教自己×Ь鳎現(xiàn)在,丟掉這個觀念蔑匣,試著一切靠自己解決劣欢,相信我,一旦你體驗過自己解決問題的快感裁良,就再也擺脫不了這種學(xué)習(xí)方法凿将。
- 絕對不要舍不得運行,寫代碼最正確的姿勢就是价脾,對效果/數(shù)據(jù)做一點改動牧抵,跑一下看看結(jié)果,再做一下改動侨把,再跑一下結(jié)果看看犀变。很多東西不知道這樣行不行,是不是這樣寫秋柄,驗證方法就是簡單粗暴:跑一遍看看获枝,讓計算機告訴你這樣到底行不行。而不是你自己去記住每一條华匾。
自上而下的學(xué)習(xí)
之前我們每次學(xué)一個東西的時候映琳,總是從最基礎(chǔ)的東西學(xué)起,比如我們從小開始學(xué)橫豎撇捺然后從簡單的字開始學(xué)起蜘拉。當(dāng)然萨西,這種方式在最開始的時候是有效的,比如很多大學(xué)的編程入門課程是C語言旭旭。但是谎脯,讓我們來思考一個問題:一個母語是漢語的人,如何最快速度的學(xué)會英語持寄,或者說能夠用英語交流源梭?然后我們想一下娱俺,是從英標(biāo)學(xué)起,一個一個單詞記起的人學(xué)的快废麻,還是一個直接去美國生活的人學(xué)的快荠卷?答案肯定是后者。所以我們得出一個結(jié)論烛愧,當(dāng)我們了解一個東西是什么的時候油宜,我們就不應(yīng)該在學(xué)習(xí)下一個類似的東西的時候再從零開始學(xué)習(xí),這是非常浪費時間的怜姿。
** 從而引出一個問題慎冤,當(dāng)我們學(xué)完一門編程語言之后,如何精進或者學(xué)習(xí)其他的技術(shù)沧卢? **
答案是蚁堤,自上而下的去學(xué)習(xí)。當(dāng)一個只會說漢語的人第一次來到美國的時候但狭,首先要能吃上東西吧披诗,所以他要知道如何去點餐。然后他需要解決的問題就是:
- 哪里有餐廳
- 從家里到餐廳的路怎么走立磁,可能還需要知道過馬路的交通規(guī)則是什么樣的藤巢,我們不需要知道所有的交通規(guī)則,我們只需要知道從家里到餐廳這段路上需要遵守什么交通規(guī)則就好了
- 怎么點餐息罗?點餐用英語怎么說?
- 帶夠飯錢
當(dāng)把這個在美國吃東西的問題拆分成這幾個小問題的時候才沧,每個小問題是不是都很好解決迈喉。
在這個例子里,我們沒有去把英語完全掌握再去吃飯温圆,也沒有學(xué)習(xí)了美國的所有規(guī)矩再去吃飯挨摸。
映射到編程中,我學(xué)完了C語言岁歉,然后我想做一個小游戲得运。首先收起自己對做游戲的高端看法,收起自己的恐懼锅移。來拆分一下自己需要解決的問題熔掺,然后百度每個問題的解決方法,如果一個問題比較大非剃,那就把它拆分成多個簡單的問題置逻,然后逐步解決這些問題,就能夠完成自己想要的目標(biāo)了备绽。關(guān)于如何拆分問題券坞,逐步解決問題鬓催,這篇文章可能會有一些幫助 用C++做一個貪吃蛇游戲
在解決如何用C++做一個貪吃蛇小游戲這個問題之前,我沒有做過游戲恨锚,而是先把自己需要實現(xiàn)的功能列出來宇驾。
然后再想如何在編程中實現(xiàn)這個功能,有功能不能實現(xiàn)的時候猴伶,就拆分课舍,拆分不了,就百度蜗顽。
在知乎上看到這樣一句話布卡,我覺得很適合這個場景。當(dāng)你要做一個沒做過的東西的時候雇盖,不需要將所有知識點都學(xué)完再去做忿等,而是在拆分的時候遇到什么,就去學(xué)什么崔挖,一邊學(xué)一邊做贸街。
所以,編程能力最終變成了拆分與解決問題的能力狸相,也就是分治的思想薛匪。
所以,當(dāng)我們使用一門完全沒有學(xué)過的編程語言脓鹃,該怎么做逸尖?
- 先寫一個Hello World,來了解程序入口是什么
- 然后就直接上手做自己要做的東西瘸右,在這其中娇跟,可能會遇到:
- 它的數(shù)組是怎么寫的? 百度一下
- 它的函數(shù)是怎么寫的太颤? 百度一下
- 它的類是怎么寫的苞俘? 百度
- 它的文件引用是什么語法? 同上
總之龄章,一切之前在C語言學(xué)過的東西吃谣,在這個語言中,肯定有同樣的東西存在做裙,就算不存在岗憋,也有替代的解決方案。當(dāng)你需要實現(xiàn)一些復(fù)雜的功能的時候锚贱,就去百度一些這個語言的庫澜驮,其實在熟悉了一門語言之后,大部分的開發(fā)都是依賴庫的惋鸥。所以經(jīng)常去看看語言的一些優(yōu)秀的庫杂穷,百度搜搜悍缠,github上逛逛,收集一些優(yōu)秀的庫資源耐量,在開發(fā)的時候用飞蚓。很多優(yōu)秀的庫都有完善的文檔,從最簡單的例子到復(fù)雜的配置都有列出來廊蜒,所以看文檔是一個很好的習(xí)慣趴拧。一般性在使用庫的時候,都是用一個配置/方法山叮,跑一遍看看這個屬性/方法是干什么用的著榴,最后找到自己需要的。
結(jié)語
因為看到很多人想努力學(xué)好但是卻無法突破屁倔,所以想寫這樣一篇文章脑又。以上都是自己實踐+總結(jié)的也是自己相信有用的,也希望會對你有用锐借。
寫在最后
我是iimT, 一個固執(zhí)的技術(shù)直男问麸。
我的微博 : @_iimT
我的微信公眾號 : iimT 個人博客: www.iimt.me