我到底該學習什麼程式語言?
相信幾乎所有的開發人員,都會有這樣的感慨,我到底應該學習哪一門程式語言,我應該選擇什麼樣的技術,這很正常,包括我自己,經常會出這樣的疑問,那麼作為一個過來人,我來談談我的看法
個人經歷
我從大一開始接觸程式設計,到現在為止已經很多年了,學習過的程式語言或者技術包括
- C語言
- C++
- JAVA
- C#
- 彙編
- GO
- PHP
- Android
- React
- Vue
- Angularjs
- Python
- Laravel
- ThinkPHP
- ZendFramework
- linux程式設計
- 網路程式設計
- 3d遊戲引擎
- Javascript
- HTML
- Spring
- 還有其它的,想不起來了。。。。。
總的來說,學的的東西,還是蠻多的,絕大部分的技術,我都深入鑽研過,也花費了不少的時間,但是現在仔細想來,有的真的不值得,幸虧後來浪子回頭。
早期學習
早期學習程式設計的時候,我和大家的感覺都是一樣的,看到什麼新鮮的東西,都想插一腳,當時也是這麼做的,然後這個學一下那個學一下,但是學到最後,感覺還是很空虛,還是沒學到啥,很多東西還是不懂,因為你停留在了語言的層面,而沒有深入到某一個語言或者是工具的本質,你的計算機基礎知識還不夠,你缺乏基本功,所以很難看透問題的本質。
提升程式設計素養
今年前段時間,我去面試其他人,大部分時間我都不問招聘崗位的問題,我會問一些基礎的程式設計問題,比如:你可以寫出一個連結串列嗎?假如說這個都不會,那就沒有問下去的必要了。如果他回答了這些基本的問題,我會問他,看過一些書籍麼?看過哪些書籍,從他看的書籍,我就可以看出來,面試人的基本現狀。我不要求你需要會崗位的某些技能,但是你的程式設計素養告訴我,你是不是具備快速學習的能力。優秀的開發人員,可以在短時間(一週或者幾天)上手一門程式設計,或者是掌握某個東西的精髓,這不是在開玩笑。
不管你學習哪一門程式設計,你的眼光應該不限於當前領域,比如說,我和我同事聊天的時候,我說每一個程式設計人員,都應該學習資料結構,基本的演算法知識,今年面試前端的時候,我基本都會提到一個基本的問題,怎麼來遍歷頁面上的dom,很可惜,沒一個人能給我答案。
當看到別人簡歷上面出現React的時候,我會提出一個問題,React的setState方法為什麼不會立即起作用,你別說,很神奇,面試的人答案只有一個:效能優化,不知道是哪個講師告訴你的,真的是誤人子弟。演算法不是那麼高深的問題,它應該滲透到我們我們寫的每一個程式中,它不是某個具體的東西,而是一種抽象思維(在這之前,你首先需要學習具體的基本資料結構,列表,棧,二叉樹等等)。
我總是推薦別人學習C語言,有人可能會說,我又用不到,學它幹啥。這句話沒錯,你確實沒用到,但是你知道嘛?你用的軟體,包括但不限於Linux,Redis,Nginx等等都使用C寫的,為什麼要用它呢,因為它的效率,你可以完全掌控你的程式,超乎你想象,你有完全的記憶體控制權,你自己負責垃圾回收,總之你自己就是程式的上帝,但是這也賦予了你更多的責任,你有義務瞭解更多的程式設計知識,計算機知識,這樣你的程式才能更好的執行,最重要的是它會培養你一種程式思維,學會站在計算機的角度思考問題,舉個例子:
為什麼JAVA的String 初始化了之後,不能變的更長,如果你學習了C語言,你可以很輕鬆的回答這個問題,這是記憶體分配的問題,真正的程式設計師,不是你可以做什麼,而是,也許我可以搞個東西,比這個更好
上班很累,但是要狠
不管你是剛出校門,還是畢業多年的老油條,上班沒有不累的,大家都很累,自己沒有時間學習。對於這個問題,我只能說,你真的是因為忙沒時間?你每天抽不出1個小時看看書?你每天耍手機的時間加在一起,你想過有多少時間?中午休息的時候,也可以看哈文件,博文啥的,看看別人的經驗分享,都可以,真正技術好的,不是因為他真的很聰明,你看他12點之後還在幹嘛?多年前,我學習Android的時候,有個Android大神,叫做羅昇陽,它寫了很多高質量的部落格,比人是晚上熬出來的啊(這哥們兒,寫了一本Android的書,很可惜,銷量很差,最後這哥們兒把部落格給停更了,再也不寫部落格了,因為太痛心了,熬夜給大家寫部落格,卻沒有換來丁點兒的回報,因為別人都不買它的書,看它的部落格去了(白嫖),這件事給我影響深刻,然後我又去淘寶京東上面搜尋了其它的一些關於android的書籍,銷量賊高,但是我看了一下目錄,質量啊,真的真的令人苦笑不已)
當初我學習linux程式設計的時候,也是每次都搞到凌晨,那麼厚的書,想想都覺得可怕,你不對自己狠點兒,又想學到東西,怎麼可能啊。
多實踐
實踐才是檢驗真理的唯一標準啊,光看或者是聽,起不到多大的作用的,不要總把手插在褲兜兒裡面(裝酷的時候,我支援),在寫這一篇部落格之前,我也寫了幾篇部落格,每一篇我都寫了例子,但是又有多少,看一遍就算了,多少人下載下來親自執行下,就不得而知了,這不是一種學習的態度,勤加練習才是王道,你覺得你是天才嗎?天才也不是這麼玩的啊。
如何學習一門程式語言
程式語言種類繁多,你不需要學習那麼多,但是你一定要知道如何學習一門程式語言,要有一定的學習目標,下面舉個例子:
- 如何定義變數
- 如何定義函式
- 如何定義類
- 如何實現繼承
- 如何實現多型
- 如何定義和操作字串
- 是否支援閉包
- 如何呼叫父類的函式
- 是否支援預設引數
- 引數的引用,值傳遞
- 如何實現程式碼模組化
- 如何匯入第三方程式碼
- 三元表示式
14.當前語言提供了哪些功能
15.當前語言有些流行框架和工具
16.變數的作用域,是否支援全域性變數
上面只是給大家舉個例子,學一門程式語言的時候,一定要有目標,不能到處撞,開始學習一門語言的時候,你不需要學習比較高階的語言特性,因為暫時你還用不到,這些東西只會給你增加煩惱,在學習完這些基本的語言知識外,你可以寫一些程式碼了,做做專案。
如果你是一個程式設計能老手,這面的這個過程,它一天的時間就搞定了,這一點都不誇張,當初為了學習Unity3d(後來沒學了),我學習C#的時候,我真的覺得基本的知識,就只需要一天,沒有必要浪費那麼多時間,專案搞起來。
迴歸正途
上面羅裡吧嗦了一大推,我到底該學習什麼程式語言?如果你認認真真的看了我上面說的,我想問你一個問題,你是否真的學好了自己領域的東西,如果你真的學好了,那麼你也不需要考慮這個問題,因為,只要你想,你認認真真的學習一個月,可以抵得上一般的人幾年的工作經驗,你可能覺得很誇張,但是不然,你的基礎在那裡,上面都是我的真心話,每個人都有自己的選擇,希望你能夠有所收穫,祝您週末愉快。