只要三步,讓你的編程能力突飛猛進(jìn)

全文干貨
總計(jì)?2758?個(gè)字
閱讀約需?7?分鐘
我的編程能力是從什么時(shí)候開始突飛猛進(jìn)的?
不是渾渾噩噩的四年大學(xué),也不是代碼搬運(yùn)的三年工作,而是為了旅行而不得不做的那一年兼職。
本人大學(xué)專業(yè)是計(jì)算機(jī),全稱計(jì)算機(jī)科學(xué)與技術(shù),俗稱碼農(nóng)預(yù)備班。當(dāng)時(shí)聽說這個(gè)專業(yè)熱門就業(yè)就選了,又聽說前端容易學(xué)又選了前端,渾渾噩噩讀了四年后進(jìn)了一家行業(yè)中游的互聯(lián)網(wǎng)公司接著渾渾噩噩搬了三年輪子。
這七年雖然談不上懈怠,但也是按部就班,規(guī)規(guī)矩矩的。直到16年底,覺得自己受夠了日復(fù)一日搬運(yùn)代碼的枯燥生活,先是請(qǐng)了一個(gè)月的假去旅游,后來干脆不想回去上班了。于是,為了解決旅游中的吃喝住的問題,開始做副業(yè)做兼職。直到一年后被一家頭部互聯(lián)網(wǎng)公司錄用,回歸一線。
也有朋友問我,為什么出去玩了一年,反而實(shí)力進(jìn)步了,從一個(gè)中游公司到了頭部。我想了想說:「就是因?yàn)閺墓纠锍鰜砹耍庞袡C(jī)會(huì)學(xué)一些新東西接觸一些新項(xiàng)目」。
接下來講一下這一年我用了什么方法,才做到突飛猛進(jìn)的:
其實(shí)那一年,我做的事情無非就兩件,接「編程的項(xiàng)目」然后重新「學(xué)基礎(chǔ)知識(shí)」。我是在開始接程序員兼職之后,得完全為項(xiàng)目的一個(gè)端口負(fù)責(zé)的時(shí)候,才知道自己的編程能力有很大的漏洞。因?yàn)檫€在公司的時(shí)候一直是幾個(gè)前端的同事一起做,自己不會(huì)就交給別人解決,到頭來自己還是不會(huì)。
意識(shí)到了這點(diǎn)之后,才開始回過頭來補(bǔ)基礎(chǔ),這里給大家分享一下我當(dāng)時(shí)的思路:
- 學(xué)習(xí)基礎(chǔ)知識(shí)
- 鞏固基礎(chǔ)知識(shí)
其中學(xué)習(xí)基礎(chǔ)知識(shí),又有兩點(diǎn)要注意的:找對(duì)方向、用對(duì)方法。說的更直白一點(diǎn)就是學(xué)什么以及怎么學(xué)。
學(xué)什么?
首先要將基礎(chǔ)打牢固,最基本的算法和數(shù)據(jù)結(jié)構(gòu)一定要滾瓜爛熟,我當(dāng)時(shí)是要求自己拿起來就能用。
比如下面這些個(gè)算法和數(shù)據(jù)結(jié)構(gòu)類型我是硬逼著自己啃下來的,很多兼職的時(shí)候沒用上,但是后來回歸工作的時(shí)候用上了。
10個(gè)算法:遞歸、排序、二分查找、搜索、哈希算法、貪心算法、分治算法、回溯算法、動(dòng)態(tài)規(guī)劃、字符串匹配算法。
10個(gè)數(shù)據(jù)結(jié)構(gòu):數(shù)組、鏈表、棧、隊(duì)列、散列表、二叉樹、堆、跳表、圖、Trie 樹;
不要小瞧了這小小二十組詞,展開了去學(xué),怎么都得花你個(gè)一年半載,例如單單排序算法就又可以分為以下十種:

然后,當(dāng)將這些基礎(chǔ)知識(shí)吃透了之后,注意是吃透,我給自己定的要求是用到的時(shí)候就能直接用而不是回去再翻書。做到這一點(diǎn)之后,我就接著去學(xué)習(xí)一些更深入的內(nèi)容:
比如:
- 編程框架是如何運(yùn)轉(zhuǎn)起來并輸出“Hello World”的?
- 如何讓自己更正規(guī),更有章法地使用Mysql呢?
- Key、List、Hash、Set、ScoreSet各自的使用場(chǎng)景有何不同?
- 主流的編程框架都和設(shè)計(jì)模式相關(guān),那他們有沒有共通性?
當(dāng)我把這些問題想清楚了的時(shí)候,我發(fā)現(xiàn)之前的很多問題都難不倒我了。
怎么學(xué)?
每個(gè)人的學(xué)習(xí)方法都不一樣,有的人喜歡邊做項(xiàng)目邊學(xué)習(xí),有的人則喜歡學(xué)一段時(shí)間做一個(gè)項(xiàng)目,有的人喜歡看書學(xué),有的人喜歡看視頻學(xué),這些都不是問題,重要的是找到適合你自己的。
但下面這幾點(diǎn),最好還是不要去做了,因?yàn)檫@些坑這些痛我都已經(jīng)經(jīng)歷過了,頭發(fā)也掉過了,結(jié)果事倍功半慘不忍睹。
1.一味的對(duì)著別人的代碼去敲。
剛開始不會(huì)做只有跟著別人敲,這沒有關(guān)系。但是跟著別人敲了之后一定要自己理解自己記憶把它變成自己的東西。照著別人代碼敲一遍兩遍哪怕三遍,除了讓我看得仔細(xì)點(diǎn),練了打字外沒有其它任何幫助。哦,對(duì)了,還多掉了幾根頭發(fā)。
所以要記住模仿復(fù)現(xiàn)不是關(guān)鍵,思考才是關(guān)鍵。要能做到思考學(xué)習(xí)別人思路后,脫離書本和博客,完全自己實(shí)現(xiàn)功能。當(dāng)我做到這點(diǎn)之后,我發(fā)現(xiàn)我的學(xué)習(xí)才是有效的。
2. 想著一口氣吃成個(gè)胖子
我剛剛說過了,自己是因?yàn)轫?xiàng)目做不出來才回過頭來學(xué)習(xí)的,所以剛開始急于求成,學(xué)習(xí)只學(xué)個(gè)大概只求個(gè)會(huì)用,沒有做到知其然還知其所以然。
但是技術(shù)這玩意兒,不是看了個(gè)大概能照著做就會(huì)了,一口氣真的吃不成個(gè)胖子,必須得扎扎實(shí)實(shí)地把事情做好。所以不要試圖一次性解決所有問題,這里給個(gè)親測(cè)有效的建議:可以將每天的學(xué)習(xí)過程拆分成小塊,分階段學(xué)習(xí),這樣的效率會(huì)更高些。

說完了第一點(diǎn)如何學(xué)習(xí)基礎(chǔ)知識(shí),接下來再說說說說第二點(diǎn)如何鞏固基礎(chǔ)知識(shí)。方法千千萬,我也試過不少,但最有效的我認(rèn)為還是刷題,有方法的刷題。
下面這個(gè)刷題方法很普通但也很實(shí)用,推薦給你:
第一遍:可以先思考,之后看參考答案刷,結(jié)合其他人的題解刷。思考、總結(jié)并掌握本題的類型,思考方式,最優(yōu)題解。
第二遍:先思考,回憶最優(yōu)解法,并與之前自己寫過的解答作比對(duì),總結(jié)問題和方法。
第三遍:提升刷題速度,拿出一個(gè)題,就能夠知道其考察重點(diǎn),解題方法,在短時(shí)間內(nèi)寫出解答。
然后給大家推薦我當(dāng)時(shí)看的兩本書還有一些學(xué)習(xí)網(wǎng)站,能夠讓大家學(xué)得更輕松些。
書:
- 《代碼大全》激發(fā)你的思維并幫助您構(gòu)建高品質(zhì)的代碼。
- 《程序員修煉之道》全面闡釋了軟件開發(fā)的許多不同方面的最佳實(shí)踐和重大陷阱。
網(wǎng)站:
- GitHub — 開發(fā)者最最最重要的網(wǎng)站,能學(xué)習(xí)但不只是學(xué)習(xí)。
- W3school — 最適合新手的網(wǎng)站,免費(fèi)而且全面。
- 實(shí)驗(yàn)樓 — 一個(gè)在線編程學(xué)習(xí)網(wǎng)站,很方便實(shí)用。
- Code School — 一個(gè)英文學(xué)習(xí)網(wǎng)站,支持分階段挑戰(zhàn)。
最后一步肯定還是要落在實(shí)操的,我的方法是接兼職項(xiàng)目、一個(gè)接著一個(gè),因?yàn)橐┲约郝眯?。但其?shí)還有兩種方法也能提升自己:
1.做一些實(shí)操性強(qiáng)的個(gè)人項(xiàng)目,自己練練手
田納西大學(xué)助理教授奧斯汀·亨利結(jié)合自身經(jīng)驗(yàn),給出了一份“程序員都應(yīng)該嘗試的挑戰(zhàn)性項(xiàng)目”清單,包含下面六個(gè)項(xiàng)目,我在那之后做了一遍覺得還不錯(cuò),推薦給大家:
- 文本編輯器
- 2D游戲-太空侵略者
- 編譯器-Tiny BASIC
- 迷你操作系統(tǒng)
- 電子表格
- 電子游戲機(jī)模擬器
每一個(gè)項(xiàng)目都存在不同的挑戰(zhàn),比如文本編輯器就要求在不使用GUI框架中內(nèi)置的文本框組件的情況下,搭建支持光標(biāo)移動(dòng)、選擇、插入和刪除操作的文本框并將文本文檔存儲(chǔ)在內(nèi)存中。
如果你能解決掉這些項(xiàng)目中的這些問題,然后把項(xiàng)目獨(dú)立完整的做出來并且運(yùn)行成功,你的能力肯定能再上一個(gè)臺(tái)階。
2.寫技術(shù)文章
大家想必都知道費(fèi)曼技巧,這也是其中的一種應(yīng)用了,把你自己弄懂的東西教給別人,讓別人也能看懂,在這個(gè)過程中你肯定還是要把一個(gè)完整的項(xiàng)目給做出來的,一整套下來,你會(huì)將自己理解的東西掌握的更透徹更深入。
也算是一種不錯(cuò)的實(shí)操方式了,能讓你的基礎(chǔ)更加牢固。
只是要記住,在這個(gè)不斷做不斷輸出的過程中,做到下面這三點(diǎn)很重要:
- 讓編程成為一種習(xí)慣。
- 學(xué)練結(jié)合,從做項(xiàng)目中找知識(shí)漏洞。
- 思考更深層次,更底端的東西。
最后,如果你也想通過兼職來讓自己的編程能力突飛猛進(jìn),下面這篇文章推薦給你,因?yàn)樽黾媛毺菀妆豢恿?。里面有我總結(jié)的兼職三接四不接,也就是說哪些兼職不會(huì)被坑,而哪些兼職要格外注意。還有一些國(guó)內(nèi)外的兼職平臺(tái)以及他們的一些特點(diǎn),希望能對(duì)你有所幫助:
End
