程式設計師如何更好的提升自己
首先你得明白,一個人的能力就像一個池塘,不斷的輸入又不斷地輸出,水池的容量以及水的質量決定了輸出的高效與否,輸入大於輸出,你的池塘就會不斷擴大,換句話說你會的技能就越來越多,只輸入不輸出,你的池塘就是一灘渾濁不堪的死水,一實操就bug滿屏。
所以想要提升自己,就得同時做好輸入和輸出這兩塊。而輸入又在輸出之前,要想提升自己,首先就得做好輸入,學習更多的深度知識。
總之,程式設計師要想學習效率高,學習效果好,只需要做好下面兩點最基礎的事情:
·學習基礎知識
·鞏固基礎知識
其中學習基礎知識,又有兩點要注意的:找對方向、用對方法。說的更直白一點就是學什麼以及怎麼學。
學什麼?
首先要將基礎打牢固,最基本的演算法和資料結構一定要滾瓜爛熟,拿起來就能用。
比如下面這些個演算法和資料結構型別就一定要熟練掌握。
10個演算法:遞迴、排序、二分查詢、搜尋、雜湊演算法、貪心演算法、分治演算法、回溯演算法、動態規劃、字串匹配演算法。
10個數據結構:陣列、連結串列、棧、佇列、散列表、二叉樹、堆、跳錶、圖、Trie 樹;
不要小瞧了這小小二十組詞,展開了去學,怎麼都得花你個一年半載,例如單單排序演算法就又可以分為以下十種:
然後,當將這些基礎知識吃透了之後,注意是吃透,至少得做到要用到的時候就能直接用不用回去再翻書,你就可以去學習一些更深入的內容:
比如:
·程式設計框架是如何運轉起來並輸出“Hello World”的?
·如何讓自己更正規,更有章法地使用Mysql呢?
·Key、List、Hash、Set、ScoreSet各自的使用場景有何不同?
·主流的程式設計框架都和設計模式相關,那他們有沒有共通性?
當你把這些問題想清楚了的時候,你的程式設計師進階之路就走了一半了。
怎麼學?
每個人的學習方法都不一樣,有的人喜歡邊做專案邊學習,有的人則喜歡學一段時間做一個專案,有的人喜歡看書學,有的人喜歡看視訊學,這些都不是問題,重要的是找到適合你自己的。
但是以下的方法我i覺得會讓事倍功半,建議大家就不要這樣做囖。
1.一味的對著別人的程式碼去敲。
剛開始不會做只有跟著別人敲,這不是問題,問題是跟著別人敲了之後你要自己理解自己記憶把它變成自己的東西。照著別人程式碼敲一遍兩遍哪怕三遍,除了讓你看得仔細點,練了打字外並沒有其它任何幫助。
因為模仿復現不是關鍵,思考才是關鍵。你要能做到思考學習別人思路後,脫離書本和部落格,完全自己實現功能。只有這樣,你的學習才是有效的。
2.想著一口氣吃成個胖子
這一塊的情況稍微少見,但也不是沒有,有的人急於求成,學習只學個大概只求個會用,沒有做到知其然還知其所以然。
技術這玩意兒,不是看了個大概能照著做就會了,一口氣吃不成個胖子,必須得紮紮實實地把事情做好。所以不要試圖一次性解決所有問題,這裡給個建議:可以將每天的學習過程拆分成小塊,分階段學習,這樣的效率會更高些。
說完了第一點如何學習基礎知識,接下來說說第二點如何鞏固基礎知識。方法千千萬,最有效的我認為還是刷題,有方法的刷題。
下面這個刷題方法很普通但也很實用,推薦給你:
第一遍:可以先思考,之後看參考答案刷,結合其他人的題解刷。思考、總結並掌握本題的型別,思考方式,最優題解。
第二遍:先思考,回憶最優解法,並與之前自己寫過的解答作比對,總結問題和方法。
第三遍:提升刷題速度,拿出一個題,就能夠知道其考察重點,解題方法,在短時間內寫出解答。
在這裡,給大家推薦兩本書還有一些學習網站,能夠讓大家學得更輕鬆些。
書:
1、《程式碼大全》激發你的思維並幫助您構建高品質的程式碼。
2、《程式設計師修煉之道》全面闡釋了軟體開發的許多不同方面的最佳實踐和重大陷阱。
網站:
-
GitHub — 開發者最最最重要的網站:https://github.com,能學習但不只是學習。
-
W3school — 最適合新手的網站:https://www.w3school.com.cn/:免費而且全面。
3.實驗樓 — 一個線上程式設計學習網站: https://www.shiyanlou.com/courses/,很方便實用。
- Code School — 一個英文學習網站:https://www.pluralsight.com/codeschool,支援分階段挑戰。
講完學習基礎知識和鞏固基礎知識,咱們就再回到咱們剛開始說的那個池塘,現在水的輸入講完了,池塘裡有點東西了,但只進不出還是一潭死水,接下來就係統性的講講如何輸出。
三種方法:
1.做一些實操性強的個人專案,自己練練手
田納西大學助理教授奧斯汀·亨利結合自身經驗,給出了一份“程式設計師都應該嘗試的挑戰性專案”清單,包含下面六個專案,我之前做了一遍覺得還不錯,推薦給大家:
·文字編輯器
·2D遊戲-太空侵略者
·編譯器-Tiny BASIC
·迷你作業系統
·電子表格
·電子遊戲機模擬器
每一個專案都存在不同的挑戰,比如文字編輯器就要求在不使用GUI框架中內建的文字框元件的情況下,搭建支援游標移動、選擇、插入和刪除操作的文字框並將文字文件儲存在記憶體中。
如果你能解決掉這些專案中的這些問題,然後把專案獨立完整的做出來並且執行成功,你的能力肯定能再上一個臺階。
2.寫技術文章
大家想必都知道費曼技巧,這也是其中的一種應用了,把你自己弄懂的東西教給別人,讓別人也能看懂,在這個過程中你肯定還是要把一個完整的專案給做出來的,一整套下來,你會將自己理解的東西掌握的更透徹更深入。
也算是一種不錯的實操方式了,能讓你的基礎更加牢固。
3.接一些開發兼職
這是三種方法中實操性最強的一種了,沒有之一。
而且不用說,這也是最快最有效的方法了,畢竟程式設計這件事,光有理論是不夠的,動手實踐才是關鍵也是最終目的。
但兼職也有很多坑很多小門道,你首先得注意專案是不是靠譜,像那種沒有需求文件的就不要接了。
最後,在這個不斷做不斷輸出的過程中,希望你能做到下面三點:
·讓程式設計成為一種習慣。
·學練結合,從做專案中找知識漏洞。
·思考更深層次,更底端的東西。
因為只有這樣,你的這方池塘才能生生不息,源源不絕。