我是如何從通訊轉到Java軟體開發工程師的?
來源:程式設計師私房菜(ID:eson_15)
我的CSDN和公眾號的讀者裡面有絕大部分都是在校學生,有本科的,也有專科的,我在微信裡收到很多讀者的提問,大部分問題都跟如何學習程式設計有關,有換專業自學的、有迷茫不知道如何學習的、有報培訓班沒啥效果的等等,我能感受到他們的誠意和焦慮,所以我覺得我很有必要寫下這篇文章。
1. 本科的腳踏實地
高考之後填志願,那時候其實我也不懂,就覺得電子資訊工程好像還不錯,於是就填了。在大學四年,除了學校學了C語言之外,我沒有學習任何第二門程式語言,而且C語言也只是初級的水平。我在大學都幹了啥?
我在大一,就決定讀研,所以我一直在努力學習,高等數學、線性代數、概率論、大學物理、還有一些數電、模電、訊號與系統、通訊原理等等專業課。老實說,我非常認真,一部分是因為自己的學習習慣,另一部分也是因為自己要讀研,所以我每一步都走的很踏實。在我的同齡人裡,執行力和毅力能跟我比的,沒幾個,這點我不吹牛逼。
大學沒少拿獎學金,最起碼可以抵消我四年的學費,微控制器也玩了不少,51、52到後面的ARM9都玩過,當時還買了好幾塊板子,寫程式跑,那時候對嵌入式還蠻感興趣的。
但是畢業後,我有點後悔。為什麼呢?我沒怎麼學程式設計啊!除了會寫一些簡單的C程式碼,其他程式設計技能為零。
2. 研究生的覺悟
考入同濟之後,我的專業是電子與通訊工程。從研一開始,我很明確我自己想要什麼,研究生也是要上課的,基礎課、專業課等等。研究生也有課題,需要看各種論文,需要寫論文,其實還是蠻忙的。
我研究生對自己的唯一要求就是提升自己的程式設計技能。一開始我在看C++,語法看完了之後,看了一點基於C++的資料結構和演算法。我真正開始決定學Java是在研一下學期,當時在eBay跟一些大佬們聊了蠻多,倒不是學到了什麼牛逼的技術,而是開拓了自己的視野,開始有了自己的一些想法。
後來我在實驗室裡悶頭苦學了一年左右,從Java語法基礎開始,到集合框架原始碼(那時候還是基於JDK1.7的)、到網路程式設計(基礎)、到資料結構和演算法,學完了這些基礎知識後,開始學習Servlet/jsp(現在已經過時了)、再到Spring、Struts2、Hibernate(SSH框架,現在也過時了)、再到Spring、SpringMVC、Mybatis(SSM框架,這個現在還在用)、再到Java併發基礎、再到一些元件等等,再到後面我開始學習微服務相關的東東,學習Spring Boot,Spring Cloud等等。這期間,我做了4個專案實戰。我是如何自學的?
3. 我是如何自學Java的?
如果要說自學Java,我覺得我有資格說上幾句。我一開始看了一個星期左右的書,然後我把書扔在了一邊,看不進去啊!我自認為自己的腦袋瓜還算可以,但是我看不進去。這也是初學者的通病,有好多讀者也跟我說:武哥,我書也看了,可是感覺還是不會。我TM也是這麼過來的,哈哈。
所以我當時看了視訊,我看的是畢向東的Java視訊,現在已經有更加新的視訊了。找一個好視訊,從頭到尾認認真真跟著學一遍,做好筆記,那也是我開始寫部落格的開始。
人都有個尿性,如果你做一件事情,一直看不到明顯的效果,你就會慢慢懈怠,慢慢懷疑自己到底對不對,適不適合。程式設計也一樣,為什麼我不建議初學者上來就抱著別人跟你推薦的所謂的經典書籍去啃?什麼《Thinking in Java》、《Effective Java》等等,你啃的了嗎?你啃不了是對的,否則你就是神了。你啃不了,你就會放棄。我就很討厭那些貼吧論壇裡一上來就給一些初學者推薦很多經典書籍的人,顯得自己很博學很牛逼的樣子,其實沒啥卵用。
包括Java併發、SSH、SSM框架、元件等等,我全部看的視訊。當然,一些原始碼我是自己啃的。當你有了基礎,上路了,你再去看書,不僅僅就是看懂看不懂的問題了,那是真正的提升。
但是這些還不夠,你學了這些東西不能派上用場。必須要專案實戰,網上有很多免費的實戰視訊,但是我覺得不好,因為那時候我已經有基礎了,我知道如何去選擇我的學習資源了,我在這還是要強調一點,不要吝嗇給自己投資,我當時也買了好幾個專案實戰視訊跟著學習,提升很多實戰經驗。
當然了,我這邊也有很多優質的視訊資源,也許已經大家夠用了,不用像我當初那樣去花錢了,我那時候自學,就沒有遇到像我這樣懂得分享的人。所以缺視訊資源的讀者,可以找我要,我就是單純的分享,為了幫助更多的朋友。
但是有很多人堅持不下來。我在文章的開頭也說了,在同齡人裡,執行力和毅力能和我比的沒幾個,我也是從小白一步步過來的,花了整整一年左右的時間去自學。我做了好幾個專案,我敢說我在學校這一年學到的東西,不比別人在外面工作兩年的能力差。所以有很多人覺得工作年限長就牛逼,見識多,但是在我看來,這不一定。
我曾經好幾個月直接睡實驗室裡,每天除了看論文,完成導師的任務,其他時間全部用來學習,晚上搞到十一二點,否則一年時間不可能學那麼多東西,而且我大部分還寫成了部落格,要知道,寫部落格是很花時間的。如果你能像我這樣堅持,這樣嚴格要求自己,我不相信學不會一個東西。你就算今天學不會,你一個月之後呢?一個月不行,你一年總行了吧?就像馬雲爸爸說的:今天很殘酷,明天更殘酷,後天很美好。但是很多人都堅持不過明天,他永遠看不到美好。就像我考研一樣,沒有堅持付出,哪來的結果?
4. 遇到選擇,我如何取捨?
我當初研究生剛畢業,是去了華為,我的崗位就是Java軟體開發,結果進去之後做通訊了。我就納悶,我研究生讀的是通訊,我特地自己自學Java,結果又回到做通訊,這就很尷尬了。
所以後來我還是走了,有些讀者問我,你為何放棄華為的高薪?我說自己的興趣不在通訊,我有自己的打算,決定從華為離開的,肯定不是為了錢。最起碼,我現在過的比在華為好,我相信以後也會。
職場遇到選擇的時候,我個人覺得還是要結合自己的興趣,人生最重要的幾年可能就是剛畢業那幾年,那幾年也在絕大程度上決定我們以後從事的行業,所以在做選擇的時候,需要結合自己的興趣,綜合各方面因素權衡好。
5. 總結一下
自學一門技術,首先要會用,要先建立興趣,再想著去提升,去內化,否則,你堅持不下去。
自學一門技術,要有規劃,最起碼要知道你接下來要學哪些東西,不能走一步看一步。有了規劃就得有計劃,有了計劃,就得有執行。
學習的過程中,永遠不要吝嗇投資自己,該花錢就花錢,現在是知識付費時代,像CSDN GitChat達人課、極客時間等,裡面一些課程還是挺不錯的,還有些培訓機構的視訊也不錯。花錢提升自己,本來就沒毛病。
做任何事,離開了堅持二字,那都是扯淡。如果隨隨便便就能成功的,就能做好的事情,是個人都可以的話,那你也沒有什麼競爭力。有句話說的好:小聰明不如傻堅持。
不懂就要多問,不管我們是什麼樣的人,不管問誰,不管別人比自己牛逼或者弱,都得放低自己的姿態,虛心一點。如果哪天我們有點影響力了,那麼儘量以一個低姿態去多幫助那些初學者,幫助更多的人,因為我們也是那樣過來的,比自己牛逼的人,滿大街都是。人,不要膨脹,要懂得韜光養晦。
希望這篇文章能夠給那些初學者,或者有自學困惑的人帶來一點幫助,也希望我的讀者能從我這裡獲得一些正能量。
PS:如果覺得我的分享不錯,歡迎大家隨手點贊、轉發。
作者簡介:
倪升武,同濟大學碩士畢業,CSDN部落格專家,CSDN GitChat達人課作者,先後就職於eBay、愛奇藝、華為,目前正在科大訊飛從事軟體開發。
Java團長
專注於Java乾貨分享
掃描上方二維碼獲取更多Java乾貨
相關文章
- vb開發通訊軟體 (轉)
- 我是如何學習軟體開發的
- vb開發通訊軟體(cloud轉貼) (轉)Cloud
- 我是如何從Web開發轉向移動開發的?Web移動開發
- 從軟體開發工程師到管理者的飛躍工程師
- 從通訊開始聊聊訊息中介軟體
- 中洲軟訊招聘JAVA開發工程師Java工程師
- 從開源軟體開發中體會到的心得
- 專訪 | 我是如何從本科轉崗到年薪35萬演算法工程師的演算法工程師
- 中洲軟訊誠聘JAVA開發工程師Java工程師
- 開發者工具:我是如何從0到1來進行APP開發的?APP
- 從“天地一體”到“移動組網”,中國量子通訊產業是如何“煉成”的?產業
- 被‘辭職’後,我是如何從安卓開發轉型大資料開發的安卓大資料
- 軟體開發工程師工作總結(轉)工程師
- 從音樂到軟體 (轉)
- 軟體開發工程師常用的工具軟體工程師
- 我是如何從測試開發做到年薪50萬的?揭秘測試開發工程師成神之路工程師
- 如何從零開始寫一個即時通訊軟體(附原始碼)原始碼
- QT開發的即時通訊軟體(基於UDP)QTUDP
- 畢業兩年,我是如何從技術「轉型」到管理的?
- 急聘:高階java軟體開發工程師(北京)Java工程師
- 群碩軟體招聘JAVA開發工程師 上海Java工程師
- 從軟體工程師轉型到資料科學家 我是這樣走的軟體工程工程師資料科學
- IT行業從開發到架構、從技術到管理,這是我的肺腑之言行業架構
- 我是如何從 php 轉型寫 go 的PHPGo
- 快速軟體開發專案中的有效溝通(轉)
- 企業即時通訊APP開發,手機聊天軟體開發APP
- 超硬核的Java工程師分享,什麼是Java?為什麼我要做Java,我是如何學習Java的?Java工程師
- 軟體開發是什麼、如何做
- 軟體開發流變史:從瀑布開發到敏捷開發再到DevOps敏捷dev
- 軟體測試開發工程師的發展工程師
- 從Android到ReactNative開發(二、通訊與模組實現)AndroidReact
- 軟體測試工作3年,我是如何從剛入門進階到自動化測試的?
- 如何從軟體工程師轉型到人工智慧工程師?軟體工程工程師人工智慧
- 【北京招聘】 高階軟體開發工程師(JAVA/C++)工程師JavaC++
- Redis:我是如何與客戶端進行通訊的Redis客戶端
- 如何從零開發一個NuGet軟體包?
- 如何讓軟體開發從功能測試轉入應用測試?