只要三步,讓你的編程能力突飛猛進

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

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

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