中國程序員的前景并非一片黑暗,教你如何擁有光明的前程
是這樣的,一片灰暗,超級灰暗,伸手不見五指,抬頭不見蒼天的那種。
但是,這里的程序員是指那些隨便學了一兩個月技術,項目都沒做過一個就想來拿高薪的人,結果拿著跟學之前差不多的工資,每天敲寫老代碼上網搬輪子然后坐著等加薪等升職,等提車買房,最后沒有如愿于是上知乎吐槽。
為了與他們區(qū)分開,其他那些認認真真學習技術,打磨了四五年的人他們不叫程序員,隨便叫什么,工程師,技術人,技術專家,技術經理都行,反正和上面那部分人分開。他們的前景一片光明,自由女神像的光輝照亮了他們,讓他們做一個月兼職的收入都比程序員高,阿門。
不然知乎三天兩頭就來這樣的問題,一驚一乍的,搞得我覺得自己再怎么學技術、再怎么緊跟技術前線都升職加薪無望;搞得后來的大學生們還沒入行就被勸退了一大批,公司還有這么多崗位缺人怎么辦?
什么樣的前景能叫做一片灰暗?
當你捧著計算機科學與技術專業(yè)的碩士學位證書,工資卻比不上其他專業(yè)本科畢業(yè)生,而且還比別人工作累,難升職少加薪的時候,這前景就真的是一片灰暗了。
然而實際上,2019年,IT行業(yè)薪酬水平穩(wěn)居榜首,年平均工資為161352元;排在第二的是科學技術,為133459元;排在第三的是金融,為131405元。
再看看下面這張圖,更直觀了,有70%的程序員薪酬在十萬以上。

這都前景灰暗,那其他行業(yè)豈不是......
我已經想不出詞語來形容那種慘狀了。
如何做一個前景光明的程序員?
學技術、學技術、學技術,還是學技術。
程序員這個行業(yè)是不是吃青春飯我不確定,但一定是靠技術吃飯的。很多人帶著勞動密集型的思維來做技術密集型的事情。
體力勞動的附加價值能有多高?
而且程序員這個行業(yè)的出現(xiàn)真的拯救了很多不擅長混職場、不愿意與人打交道的人,只要你能解決問題,哪怕你不說話,你的老板也照樣給你加薪。
因為他怕你「不小心」寫了一堆bug,怕你跳槽。
但這一切都是建立在你的「無可替代性」上的,如果你只會敲敲基礎代碼,搬搬輪子,百度一下,那你就很容易被替代,你沒有底氣沒有籌碼談待遇,因為這些工作是體力活而不是腦力活,而程序員應該是建筑師而不是搬運工。
如何提升自己?
有兩個大方向:
提升廣度
鉆研深度
如果你選擇第一個方向,那就可以嘗試做一名全棧工程師,而所謂全棧工程師是指掌握多種技能,勝任前端與后端,能利用多種技能獨立完成產品的人。
朝這個方向發(fā)展,不需要你每個方向的技術都學得多么深入,每一種語言掌握80%左右即可。你可能解決不了很多高深的技術難題,但你可以一個人解決前后端大部分的問題。而且因為對開發(fā)工作全局的了解都很熟悉,是離項目經理最近的開發(fā)人員。
而如果你選擇第二個方向,就要求你將某個技術領域的某一門或兩門編程語言學習透徹,要做到這個技術領域上的所有問題到你這里都能得到解決。而常見的技術領域包括前端、后端、移動端、iOS開發(fā)等傳統(tǒng)領域,還有近幾年興起的人工智能、大數據分析、物聯(lián)網等。
講完了方向再來說說方法,包含以下兩個方面:
學什么
怎么學
學什么?
學適合你所選方向的編程語言。受限于篇幅,我將對2020年最熱門的十大編程語言的優(yōu)劣及適用領域分析,放在了下面這篇文章里,有需要的朋友可以點開看看。
最熱門的十種編程語言,總有一種適合你

怎么學?
這里給大家分享一下我自己的學習思路:
學習基礎知識
鞏固基礎知識
其中學習基礎知識,又有兩點要注意的:找對方向、用對方法。說的更直白一點就是學什么以及怎么學。
學習內容
首先要將基礎打牢固,最基本的算法和數據結構一定要滾瓜爛熟,我當時是要求自己拿起來就能用。
比如下面這些個算法和數據結構類型我是硬逼著自己啃下來的,很多兼職的時候沒用上,但是后來回歸工作的時候用上了。
10個算法:遞歸、排序、二分查找、搜索、哈希算法、貪心算法、分治算法、回溯算法、動態(tài)規(guī)劃、字符串匹配算法。
10個數據結構:數組、鏈表、棧、隊列、散列表、二叉樹、堆、跳表、圖、Trie 樹;
不要小瞧了這小小二十組詞,展開了去學,怎么都得花你個一年半載,例如單單排序算法就又可以分為以下十種:

然后,當將這些基礎知識吃透了之后,注意是吃透,我給自己定的要求是用到的時候就能直接用而不是回去再翻書。做到這一點之后,我就接著去學習一些更深入的內容:
比如:
編程框架是如何運轉起來并輸出“Hello World”的?
如何讓自己更正規(guī),更有章法地使用Mysql呢?
Key、List、Hash、Set、ScoreSet各自的使用場景有何不同?
主流的編程框架都和設計模式相關,那他們有沒有共通性?
當我把這些問題想清楚了的時候,我發(fā)現(xiàn)之前的很多問題都難不倒我了。
學習方法
每個人的學習方法都不一樣,有的人喜歡邊做項目邊學習,有的人則喜歡學一段時間做一個項目,有的人喜歡看書學,有的人喜歡看視頻學,這些都不是問題,重要的是找到適合你自己的。
但下面這幾點,最好還是不要去做了,因為這些坑這些痛我都已經經歷過了,頭發(fā)也掉過了,結果事倍功半慘不忍睹。
1.一味的對著別人的代碼去敲。
剛開始不會做只有跟著別人敲,這沒有關系。但是跟著別人敲了之后一定要自己理解自己記憶把它變成自己的東西。照著別人代碼敲一遍兩遍哪怕三遍,除了讓我看得仔細點,除了打字外沒有其它任何幫助。哦,對了,還多掉了幾根頭發(fā)。
所以要記住模仿復現(xiàn)不是關鍵,思考才是關鍵。要能做到思考學習別人思路后,脫離書本和博客,完全自己實現(xiàn)功能。當我做到這點之后,我發(fā)現(xiàn)我的學習才是有效的。
2. 想著一口氣吃成個胖子
我剛剛說過了,自己是因為項目做不出來才回過頭來學習的,所以剛開始急于求成,學習只學個大概只求個會用,沒有做到知其然還知其所以然。
但是技術這玩意兒,不是看了個大概能照著做就會了,一口氣真的吃不成個胖子,必須得扎扎實實地把事情做好。所以不要試圖一次性解決所有問題,這里給個親測有效的建議:可以將每天的學習過程拆分成小塊,分階段學習,這樣的效率會更高些。
說完了第一點如何學習基礎知識,接下來再說說說說第二點如何鞏固基礎知識。方法千千萬,我也試過不少,但最有效的我認為還是刷題,有方法的刷題。
下面這個刷題方法很普通但也很實用,推薦給你:
第一遍:可以先思考,之后看參考答案刷,結合其他人的題解刷。思考、總結并掌握本題的類型,思考方式,最優(yōu)題解。
第二遍:先思考,回憶最優(yōu)解法,并與之前自己寫過的解答作比對,總結問題和方法。
第三遍:提升刷題速度,拿出一個題,就能夠知道其考察重點,解題方法,在短時間內寫出解答。
然后給大家推薦我當時看的兩本書還有一些學習網站,能夠讓大家學得更輕松些。
書:
《代碼大全》激發(fā)你的思維并幫助您構建高品質的代碼。
《程序員修煉之道》全面闡釋了軟件開發(fā)的許多不同方面的最佳實踐和重大陷阱。
網站:
1GitHub — 開發(fā)者最最最重要的網站:https://github.com,能學習但不只是學習。
W3school — 最適合新手的網站:https://www.w3school.com.cn/:免費而且全面。
實驗樓 — 一個在線編程學習網站: https://www.shiyanlou.com/courses/,很方便實用。
Code School — 一個英文學習網站:https://www.pluralsight.com/codeschool,支持分階段挑戰(zhàn)。
最后一步肯定還是要落在實操的,我的方法是接兼職項目、一個接著一個,因為要供著自己旅行。但其實還有兩種方法也能提升自己:
1.做一些實操性強的個人項目,自己練練手
田納西大學助理教授奧斯汀·亨利結合自身經驗,給出了一份“程序員都應該嘗試的挑戰(zhàn)性項目”清單,包含下面六個項目,我在那之后做了一遍覺得還不錯,推薦給大家:
文本編輯器
2D游戲-太空侵略者
編譯器-Tiny BASIC
迷你操作系統(tǒng)
電子表格
電子游戲機模擬器
每一個項目都存在不同的挑戰(zhàn),比如文本編輯器就要求在不使用GUI框架中內置的文本框組件的情況下,搭建支持光標移動、選擇、插入和刪除操作的文本框并將文本文檔存儲在內存中。
如果你能解決掉這些項目中的這些問題,然后把項目獨立完整的做出來并且運行成功,你的能力肯定能再上一個臺階。
2.寫技術文章
大家想必都知道費曼技巧,這也是其中的一種應用了,把你自己弄懂的東西教給別人,讓別人也能看懂,在這個過程中你肯定還是要把一個完整的項目給做出來的,一整套下來,你會將自己理解的東西掌握的更透徹更深入。
也算是一種不錯的實操方式了,能讓你的基礎更加牢固。
只是要記住,在這個不斷做不斷輸出的過程中,做到下面這三點很重要:
讓編程成為一種習慣。
學練結合,從做項目中找知識漏洞。
思考更深層次,更底端的東西。
大家伙,我是老王,從事互聯(lián)網已經十多年,曾任職于順豐、國家電網等多家企業(yè),精通JAVAEE體系、高并發(fā)、高緩存、微服務等分布式架構體系。 我樂于把多年的學習經驗、學習資料等無償分享給新入門Java的朋友,希望可以幫助你們在互聯(lián)網大廠拿到高薪,有需要的隨時可以私我~