java開發入職半年,對未來迷茫?那你該看看這篇文章
- 2020 年 3 月 26 日
- 筆記
今天我們討論的是入職半年對未來的一些規劃,如果你有更好的建議,歡迎下方留言評論哦。
網友一:
關於面試,關於技術的,我只能說有些路只能靠自己去走,沒人可以幫到自己,哪怕偶爾幫一到兩次,但是技術的路這麼長,總歸需要自己獨自成長的。附一張自己藏書的照片,與各位共勉

————————————————-
工作三年多,就個人方面而言,很多的工作都是面試造核彈,工作擰螺絲。但是不要因為自己是個擰螺絲的就不學哪些難啃的技術。當項目出問題的時候,就是考驗技術沉澱的時候。我也迷茫過好長一段時間,學了忘,學了沒用,到底應該怎麼成長才能成為一個別人眼中的大神,大牛。
個人建議,在JAVA方面,先學好JAVA SE。不管如何,基礎才是上層建築的一切。推薦去看jdk源碼,推薦1.6或者1.7版本。因為1.8版本的源碼中會有很多lambda表達式。如果這塊不了解,看起來和看天書沒啥區別。先看我們日常開發中最常用的類,util包下面的,list,map,剛開始看的時候肯定會非常的難受,舉個例子,arraylist。很多基礎操作已經寫在父類中了。點來點去的會看暈。那麼就先看list介面。看看它都定義了哪些操作,然後看abstractlist。看看其中實現了哪部分操作,哪些方法留給子類去實現了。剛開始看的時候力求每塊程式碼都看懂,多問問自己為什麼。作者為什麼要這麼寫,用意在哪裡,優點在哪裡。看源碼是一件很痛苦的事情,但是堅持下來會發現自己每天都在學習,每天都在成長,我自己hashmap源碼看了足足一個月才大致理解其中的思想。我看jdk源碼已經堅持了兩年了,雖然做不到每天都看。但是有空就會點進去看看,並且把自己理解的程式碼和自己的理解都整理成筆記。我記得有人說過,閱讀優秀書籍就如同在和優秀的人面對面交流。在閱讀源碼同樣適用,在看jdk源碼就是和一群頂級的JAVA開發者交流。我們去看,去理解,去體會,潛移默化,我們會模仿他們的寫法,理解他們的思想。一個小建議,看源碼的時候最好準備一份類圖。比如util包,就去搜一下collect的類圖。從頂向下看也行,從低向上看也沒什麼問題,不過一開始看的時候,最好就鑽研其中的一個類,因為很多時候我們會發出疑問,為何要這樣設計,感覺這段程式碼沒啥用啊之類的。雖然從頂向下看這些問題會不在存在,但是剛工作半年確實理解不了。容易讓人放棄。
看源碼最重要的不是學習技巧,而是思想,換位思考,假如我們是jdk的開發者,我會怎麼寫,如何設計一個類,哪些方法是共有的,那些方法需要提取成共有方法,哪些方法可以使用模板模式,抽象兩個字說起來簡單,但是想要做好抽象好難啊。當你把你自己經常用的類看完之後,那麼就可以按照包去讀源碼,四大包,lang,io,net,util包。
源碼閱讀一定程度之後,你就會發現繼續閱讀對於自己的提升好像不是很大了,這個時候,閱讀源碼將會成為你的一個習慣。你看到優秀的開源框架就會忍不住去閱讀,不要剋制自己。勇敢的去讀吧。書讀百遍,其義自見。
後面說一點學習技術過程中自己遇到的問題,希望能幫助到你。剛開始的時候,我會著急,會恐慌,這麼多類我哪裡學習的完啊,外面技術日益月新,我還在研究這個。怎麼辦,說不要著急有點站著說話不腰疼了,想學就去學。但是一定要有自己堅持的事情,哪怕因為某一段時間忙,沒空。總會有空,有空就去研究,就去寫筆記。水滴穿石這個道理永遠不過時。技術這麼多,我們確實學不過來。而且我們也不需要要求自己每一個技術都很精通。但是在用的時候我們要做到快速上手,快速精通。這個就靠內功了。我對於內功的理解就是基礎+思想,基礎就是我們對於電腦體系的理解和世界觀,思想就是方法論或者說是經驗。
在閱讀到並發包的時候,結合JAVA並發編程實戰這本書去閱讀。你會看到不一樣的並發世界,雖然很多人詬病翻譯不好。但是我通過閱讀源碼發現翻譯不好的地方不也是人生一大趣事。
後面就可以去學習jvm方面的一些知識,這個不衝突。你也可以繼續閱jvm源碼。jvm個人推薦深入理解jvm,那本藍色的書,作者姓周來著。在地鐵上突然想不起來叫啥了。還有一本深入g1 gc這個是主要講解g1垃圾回收器的。jvm方面我研究的也不是很深就不展開說了。對了,有一本阿里出版的,揭秘JAVA虛擬機,紅色的封面,有一頭熊咆哮的這本書需要一些彙編基礎,但是要求不高,看著很過癮,很帶勁。
電腦基礎方面,我推薦
1.編碼:隱匿在電腦背後的語言,個人十分推崇這本書,作者用燈泡,導線,開關實現計算底層的東西,不要被嚇住了,作者寫的淺顯易懂。設想我們自己乳溝對於電腦的理解達到作者這個地步,那麼真的可以做到手中無劍的地步了。
2.電腦是如何跑起來的,給自己的奶奶講解什麼是電腦的必備書籍,和編碼那本書有著異曲同工之妙。
3.同上,如何系列的,都是一個日本作者寫的,好幾本,程式是如何跑起來的,網路是如何鏈接的。都是很不錯的書籍
4.好吧,我也要說數據結構。不是說這個不重要。而是這個太重要了,我不知道該怎麼去描述,自己能力有限,對於這塊不敢過多言語。關於數據結構的書很多,我個人閱讀是大學的那本JAVA實現的數據結構
5.演算法 每次提到這個就想起來我買的那本演算法導論,都是淚。推薦你去看演算法 第四版,封面是紅色,入門門檻比較低。
技術這條路有的時候很孤獨,或許就你一個人在路上。但是一定要堅信,付出總會有收穫
網友二:
關注這個問題有一段時間了,過來聊一下自己的體會。
1.心態上:不要太相信自我驅動。好的平台和環境,會大大提升你的成長速度
我看題主的描述,公司使用的技術相對整個大環境來說,還是比較落後的。你算是很努力的人了,私底下用功學習,騎驢找馬,期望他日能去更好的平台。實際情況是,努力很重要,但最好不要太相信個人的努力。不知道你有沒有這種體會:知道某些技術很重要,但是你不敢去碰它,或者不知道如何入手,又或者怎麼學都學不深入,到頭來還是只知道個別單詞的中文意思。這些都是因為你始終僅靠自我驅動去學習,缺少相匹配的外在驅動或者環境鞭策。在岸上學習游泳,不保證下河不會淹死。
以我個人為例,之前覺得redis、SpringBoot這些很高大上。攔截器?算了吧,似乎根本用不上,不敢不敢。但是呢,去了北京,項目剛好用到。只好硬著頭皮上了,什麼都自己寫,結果發現其實也沒那麼可怕。這個經歷,讓我瞬間開了眼界,膽子也大了不少。現在不管什麼新技術,都樂於去了解。
所以,只有當外部環境和自我驅動相匹配時,你的成長才能效率max。
2.學習上:不要一直糾結於某個技術點,要「走三步退兩步」
現在框架越來越多,且不說原理,就說很多配置的意義以及它為什麼能實現各自的功能,你是否了解?
我剛學習SSM時,對於很多配置其實稀里糊塗的。比如web.xml中配置ContextLoaderListener的作用是什麼,它是怎麼實現的?DispatcherServlet是幹嘛的,為什麼還要配置contextConfigLocation。load-on-startup又是幹嘛的,不配會怎樣?為什麼用了SpringMVC就不用設置utf-8了,亂碼問題莫名其妙就解決了?
這些問題,其實你鑽研框架本身,可能得不到答案。因為它的實現都是被封裝了的。此時你如果「退兩步」,回去看JavaWeb階段的監聽器,過濾器,就能理解得更好。另外,SpringMVC的攔截器和過濾器很相似,啥區別呢?你如果不了解過濾器,區別從何談起。所以我一直覺得,學習應該是滾動來回地去學。不要糾結於某一點,這樣會將你的眼光局限住。應該開放心態,多接觸,然後回頭潛心研究。你會注意到之前忽略的一些細節。而這些細節,會在以後的學習和實戰中發揮作用。知其然知其所以然,會讓你debug都比別人快一分鐘。
3.該學習哪些技術,如何學習?
老實說,你要是一直待在現在的公司,很難說有長足的進步。它能提供給你的就這麼多。你靠自我驅動,能彌補的僅僅是對新技術膚淺的了解。所以你陷入了一個惡性循環:公司技術落後→自我驅動學習不深入→無法應對更高平台的面試→換不了環境→公司技術落後→自我驅動學習不深入→…
你可以適當了解一些新技術,比如SpringCloud,消息隊列就很好嘛。我知道我說得再多,你都無法對這些技術產生強烈的學習慾望,你還是覺得這些技術很陌生,離自己很遠。有一種辦法,你或許可以試試:面試驅動法。你可以試著投投簡歷,請個假出去面試,看看市場需要什麼技術。等你被問懵逼時,就知道奮發圖強去攻克他了。幾十塊錢趕一場面試,然後能找到前進方向,很值得!
大家都說面向工資編程,而我也要說,一定要面向市場學習,不要閉門造車。
回來學習下這些技術,然後找一些網上開源的項目去看看這些技術是如何被運用在項目里的。或者看看網上的項目影片,有些也是挺不錯的,能幫你快速建立對該技術的感性認識,不至於面試時只能說「這個單詞我會拼」。影片的話,其實某二手平台上很多人賣盜版的…你自己看著辦。
我的建議還是好好提升一下,然後抓緊時間跳槽。
加油~