當你捧着計算機科學與技術專業的碩士學位證書,工資卻比不上其餘專業本科畢業生,並且還比別人工做累,難升職少加薪的時候,這前景就真的是一片灰暗了。前端
然而實際上,2019年,IT行業薪酬水平穩居榜首,年平均工資爲161352元;排在第二的是科學技術,爲133459元;排在第三的是金融,爲131405元。git
再看看下面這張圖,更直觀了,有70%的程序員薪酬在十萬以上。程序員
這都前景灰暗,那其餘行業豈不是......github
我已經想不出詞語來形容那種慘狀了。面試
學技術、學技術、學技術,仍是學技術。算法
程序員這個行業是否是吃青春飯我不肯定,但必定是靠技術吃飯的。不少人帶着勞動密集型的思惟來作技術密集型的事情。sql
體力勞動的附加價值能有多高?編程
並且程序員這個行業的出現真的拯救了不少不擅長混職場、不肯意與人打交道的人,只要你能解決問題,哪怕你不說話,你的老闆也照樣給你加薪。後端
由於他怕你「不當心」寫了一堆bug,怕你跳槽。設計模式
但這一切都是創建在你的「無可替代性」上的,若是你只會敲敲基礎代碼,搬搬輪子,百度一下,那你就很容易被替代,你沒有底氣沒有籌碼談待遇,由於這些工做是體力活而不是腦力活,而程序員應該是建築師而不是搬運工。
有兩個大方向:
若是你選擇第一個方向,那就能夠嘗試作一名全棧工程師,而所謂全棧工程師是指掌握多種技能,勝任前端與後端,能利用多種技能獨立完成產品的人。
朝這個方向發展,不須要你每一個方向的技術都學得多麼深刻,每一種語言掌握80%左右便可。你可能解決不了不少高深的技術難題,但你能夠一我的解決先後端大部分的問題。並且由於對開發工做全局的瞭解都很熟悉,是離項目經理最近的開發人員。
而若是你選擇第二個方向,就要求你將某個技術領域的某一門或兩門編程語言學習透徹,要作到這個技術領域上的全部問題到你這裏都能獲得解決。而常見的技術領域包括前端、後端、移動端、iOS開發等傳統領域,還有近幾年興起的人工智能、大數據分析、物聯網等。
這裏給你們分享一下我本身的學習思路:
其中學習基礎知識,又有兩點要注意的:找對方向、用對方法。說的更直白一點就是學什麼以及怎麼學。
首先要將基礎打牢固,最基本的算法和數據結構必定要倒背如流,我當時是要求本身拿起來就能用。
好比下面這些個算法和數據結構類型我是硬逼着本身啃下來的,不少兼職的時候沒用上,可是後來迴歸工做的時候用上了。
10個算法:遞歸、排序、二分查找、搜索、哈希算法、貪心算法、分治算法、回溯算法、動態規劃、字符串匹配算法。
10個數據結構:數組、鏈表、棧、隊列、散列表、二叉樹、堆、跳錶、圖、Trie 樹;
不要小瞧了這小小二十組詞,展開了去學,怎麼都得花你個一年半載,例如單單排序算法就又能夠分爲如下十種:
而後,當將這些基礎知識吃透了以後,注意是吃透,我給本身定的要求是用到的時候就能直接用而不是回去再翻書。作到這一點以後,我就接着去學習一些更深刻的內容:
好比:
當我把這些問題想清楚了的時候,我發現以前的不少問題都難不倒我了。
每一個人的學習方法都不同,有的人喜歡邊作項目邊學習,有的人則喜歡學一段時間作一個項目,有的人喜歡看書學,有的人喜歡看視頻學,這些都不是問題,重要的是找到適合你本身的。
但下面這幾點,最好仍是不要去作了,由於這些坑這些痛我都已經經歷過了,頭髮也掉過了,結果事倍功半慘不忍睹。
1.一味的對着別人的代碼去敲。
剛開始不會作只有跟着別人敲,這沒有關係。可是跟着別人敲了以後必定要本身理解本身記憶把它變成本身的東西。照着別人代碼敲一遍兩遍哪怕三遍,除了讓我看得仔細點,除了打字外沒有其它任何幫助。哦,對了,還多掉了幾根頭髮。
因此要記住模仿復現不是關鍵,思考纔是關鍵。要能作到思考學習別人思路後,脫離書本和博客,徹底本身實現功能。當我作到這點以後,我發現個人學習纔是有效的。
2. 想着一口氣吃成個胖子
我剛剛說過了,本身是由於項目作不出來纔回過頭來學習的,因此剛開始急於求成,學習只學個大概只求個會用,沒有作到知其然還知其因此然。
可是技術這玩意兒,不是看了個大概能照着作就會了,一口氣真的吃不成個胖子,必須得紮紮實實地把事情作好。因此不要試圖一次性解決全部問題,這裏給個親測有效的建議:能夠將天天的學習過程拆分紅小塊,分階段學習,這樣的效率會更高些。
說完了第一點如何學習基礎知識,接下來再說說說說第二點如何鞏固基礎知識。方法千千萬,我也試過很多,但最有效的我認爲仍是刷題,有方法的刷題。
下面這個刷題方法很普通但也很實用,推薦給你:
第一遍:能夠先思考,以後看參考答案刷,結合其餘人的題解刷。思考、總結並掌握本題的類型,思考方式,最優題解。
第二遍:先思考,回憶最優解法,並與以前本身寫過的解答做比對,總結問題和方法。
第三遍:提高刷題速度,拿出一個題,就可以知道其考察重點,解題方法,在短期內寫出解答。
而後給你們推薦我當時看的兩本書還有一些學習網站,可以讓你們學得更輕鬆些。
書:
網站:
最後一步確定仍是要落在實操的,個人方法是接兼職項目、一個接着一個,由於要供着本身旅行。但其實還有兩種方法也能提高本身:
1.作一些實操性強的我的項目,本身練練手
田納西大學助理教授奧斯汀·亨利結合自身經驗,給出了一份「程序員都應該嘗試的挑戰性項目」清單,包含下面六個項目,我在那以後作了一遍以爲還不錯,推薦給你們:
文本編輯器
每個項目都存在不一樣的挑戰,好比文本編輯器就要求在不使用GUI框架中內置的文本框組件的狀況下,搭建支持光標移動、選擇、插入和刪除操做的文本框並將文本文檔存儲在內存中。
若是你能解決掉這些項目中的這些問題,而後把項目獨立完整的作出來而且運行成功,你的能力確定能再上一個臺階。
2.寫技術文章
你們想必都知道費曼技巧,這也是其中的一種應用了,把你本身弄懂的東西教給別人,讓別人也能看懂,在這個過程當中你確定仍是要把一個完整的項目給作出來的,一整套下來,你會將本身理解的東西掌握的更透徹更深刻。
也算是一種不錯的實操方式了,能讓你的基礎更加牢固。
只是要記住,在這個不斷作不斷輸出的過程當中,作到下面這三點很重要:
如今都說互聯網寒冬,其實只要自身技術能力夠強,我們就不怕!我這邊專門針對Android開發工程師整理了一套【Android進階學習視頻】、【全套Android面試祕籍】、【Android知識點PDF】。若有須要獲取資料文檔的朋友,能夠點擊個人GitHub免費獲取!
網上學習 Android的資料一大堆,但若是學到的知識不成體系,遇到問題時只是淺嘗輒止,再也不深刻研究,那麼很難作到真正的技術提高。但願這份系統化的技術體系對你們有一個方向參考。