分享我的 Java 實習和工作心得
作為一名 在大、中、小微企業都待過 的 Java 開發者,今天和大家分享下自己在不同公司的工作日常和收獲。包括一些個人積累的工作提升經驗,以及一些 Java 學習的方法和資源。
先從我的第一份 Java 開發實習工作說起吧~
實習生工作日常
我是在大二暑期開始了我人生的第一次實習,崗位正是 Java 開發,還混了個 title 叫 “助理 Java 工程師”!
這家公司屬于一家中型企業,作為第一份實習,我已經很滿足了。
剛進入公司的第一天,在導師和運維同學的幫助下,搞好辦公裝置,安裝開發環境,本以為第二天就能開始寫代碼。但是整整兩周,我都沒有寫下一行 Java 代碼!而是先花了一周的時間熟悉企業的業務、我要參與的項目源碼(Spring 全家桶 + Dubbo)、以及公司的各種辦公套件和研發流程。這些幾乎是每位剛剛進入新公司的同學都要做的事情。

然後我就開始接需求了,面對前人留下的 xx 一樣的代碼和複雜的業務,我根本無從下手。那麼這一周我做了些什麼呢?在導師的指導下,我針對這個需求涉及的業務流程畫了一個很完整的流程圖,并且在流程圖上進行了詳細的标注。畫完流程圖之後,我突然感覺思路清晰了很多,接下來就是寫僞代碼,終于在一周後,我才正式開始寫 Java 代碼了。
在此之前,我基本都是跟着視訊教程寫寫簡單的 Demo 程式,或者自己為了學習做做簡單的小項目。從來沒有像這次一樣在寫代碼前進行如此精心的設計,第一次有了自己走出校園的感覺,這種體驗和成長是在學校無法感受到的。這也是為什麼我建議計算機專業的同學在學了一些開發技術後,趁早去找一份實習,不用擔心自己的經驗不足,通過面試和企業工作的磨練才能讓你積累更多的經驗、提升技術,也能幫助你明确自己的目标。現在也有很多幫助大學生找實習的平台,像 牛客網、實習僧 都是很不錯的。
實習的這家公司雖然不大,但是團隊的氛圍非常好。也正因為公司不大,和技術主管、CTO 等大佬的交流機會也非常多,我們每天開工前都會開站會(靈活開發)來讨論工作,并且定期地舉辦技術分享。
整個實習過程真的非常愉快,學到了很多技術和業務知識,也開拓了眼界,明确了我今後的職業發展方向。最爽的事是工作不忙的時候也摸魚兒刷了一些算法,真的非常感謝公司和這段實習經曆!
然後分享我目前在 騰訊 做 Java 開發的日常。
鵝廠工作日常
沒錯,鵝廠并不是隻有 C++ 這一門後端開發語言,其實鵝廠的 Java 程式員數量也是很多的!
我從大三暑假開始就在騰訊實習,并通過答辯轉正,雖然隻畢業半年,但至今累積在鵝廠寫 Java 已經一年半多了,那除了偶爾摸魚外,我平時的工作都做些什麼呢?
起初我以為大廠程式員的工作日常也就是寫代碼、造輪子,在大公司,就得寫更多的代碼!
結果在剛入職時,由于經驗不足,再加上年輕氣盛,有着莫名的自信。剛拿到需求後,我覺得特别簡單,不就是 CRUD(增删改查)麼?于是,我就懶得設計方案了,沒怎麼思考就直接上手寫代碼了,結果不斷翻車,出現了很多細節問題,比如資料沒有通路權限擷取不到、和其他部門的同學接口字段沒對齊等等,甚至還出現需求了解錯誤的情況!最後導緻的結果就是做了很多無用功,把本來幾天就能做完的需求一拖再拖,一度以為自己要被勸退了! o(╥﹏╥)o
經曆了一次次的翻車後,我開始思考自己的問題到底出在哪裡,為什麼我總感覺自己什麼都知道、可以寫出代碼,但寫出的代碼卻經常錯誤連篇呢?
我向導師和其他的同僚請教後發現,其實大家更多的時間并不是在寫代碼,而是在 開會讨論、核對需求、溝通對齊、設計技術方案、測試等。寫代碼的時間其實很少很少!
導師對我說:“其實寫代碼并不難,關鍵是要明确為什麼要寫代碼、怎麼寫代碼、寫什麼代碼。”
原來,相比寫代碼,更重要的是寫代碼前的技術方案設計和寫代碼後的測試!
技術方案設計
當程式員确認完需求後,要先根據需求來給出一個清晰明确的技術方案,一方面是證明需求的可行性,另一方面是對自己之後的代碼實作有一個大緻思路。很多的問題其實是可以在設計階段去發現和規避的,而不是等你寫代碼的時候,才發現之前的設計有問題、甚至是需求本身就不合理!到時候耽誤了項目上線,背鍋的就是程式員自己!
之前有朋友問,在大公司,萬一寫着寫着代碼,沒思路了、寫不出來了怎麼辦?這種問題其實就是可以通過前期的技術方案設計來規避的。畢竟老闆才不關心你代碼寫的怎麼樣,他隻關心你的技術方案,換句話說,是關心你能不能按時完成項目!
此前,我即使畫了一些流程圖,目的也僅僅是在于幫助自己寫代碼。覺得代碼能寫出來後,我就不再去考慮方案設計了。
而在意識到技術方案的重要性後,我會在了解需求後,先寫一份詳盡的技術方案,包括需求的合理性分析、選用什麼技術來實作指定的功能、怎麼設計庫表結構、怎麼設計類之間的關系(用哪種設計模式)、怎麼設計接口、計劃工期是多久、有沒有什麼風險點等等。
開發
設計好方案後,就要投入開發。
基本就是先利用一些資料庫管理軟體或者登陸伺服器去配置一些庫表,然後選用一些 Java 類庫和工具來編寫業務代碼。說是編寫代碼,其實 80% 以上都是複制粘貼!複制别人的,複制自己的,積累的代碼多了之後,簡直爽的飛起!不能複制粘貼的,也可以用一些代碼生成工具、甚至是低代碼工具來偷偷懶。誰說 CRUD 工程師就沒有技術?哼,咱偷懶也要有水準。
寫代碼的過程中,你要遵循一定的規範,不斷地将重複的代碼進行抽象、封裝和複用,可以利用一些設計模式,并且要多多編寫注釋,提高代碼的可讀性和可維護性。
關于代碼規範,建議參考 Google 開源的 Java 代碼規範或者阿裡巴巴的 Java 代碼規範,非常專業!
寫好代碼後,你要再次檢查自己的代碼,可以利用一些代碼格式化和代碼檢查工具來提前發現一些規範問題以及 bug,還要在本地編寫單元測試來最細粒度地保證代碼的可運作性和正确性。
Java 的單元測試類庫一般用
JUnit
就行了,本地自己測試請求接口的話可以直接用 IDEA 自帶的測試插件,也可以選用
Swagger
或者
YAPI
、
Postman
等接口管理工具,甚至還可以直接使用指令行
curl
等。
測試
在寫完代碼之後,要經過非常非常非常充分的測試才能送出代碼!這個階段也是非常花時間的,需要配合測試同學,提供一些測試的細節和補充說明,并且對測試中發現的問題進行修複。很多程式員應該都有這種感受:寫 bug 一分鐘,改 bug 一小時!
這些就是我目前在鵝廠的日常工作,其實和其他公司不會什麼差別,無非就是你負責的業務量級越大,你在設計、測試等環節上投入的時間和精力就要更多;業務團隊越大,你在需求溝通和合作上也要花更多的時間。這些工作看似和寫代碼關系不大,但對于程式員的經驗積累以及職業素養、工程能力的提升是至關重要的!
優秀的程式員,不隻是有能力寫得一手好代碼,更多的是需要具備一些工程師素養,比如:
- 對技術有獨特的興趣和追求,持續學習
- 有全局觀,總能站在一個更高、更全局的視角去考慮問題
- 處理事情小心謹慎,而不是憑直覺和過去的經驗主觀臆斷
- 溝通能力強,能夠用友善他人了解的方式來描述問題
- 強大的設計架構能力
- 刨根問題,深究問題本質
- 代碼潔癖,精益求精
- 不止技術,還注重業務底層邏輯,關心使用者
- 執行力強,有責任心
- 懂得利用自動化工具提升效率
- 善用繪圖、圖表來描述技術架構和問題
- 樂于分享,積極為他人指路
在工作之餘,我也在朝着成為一名優秀工程師的路上而努力。是以,我會利用公司提供的知識平台、問答平台和技術資源進行學習,并且多和身邊的技術大牛們交流。大公司技術好,大佬多,提供的資源也真的非常多,這是我認為很多同學應該去大廠的一個原因,而身在大廠的同學更應該利用好這些資源。
我還會積極參與一些公司内外的開源項目,和優秀的程式員朋友一起合作,互相學習進步,提升代碼的水準。這裡也建議大家多看 GitHub 上的開源項目,先在本地運作并熟練使用它,然後嘗試分析源碼和貢獻代碼。
不會找開源項目?我之前分享過一篇文章,能幫到大家:【硬核幹貨】如何高效找到優質程式設計項目?
此外,提升個人影響力也是很重要的,我認識很多 Java 開發工作者都喜歡寫技術文章,并且一些朋友開通了自己的自媒體平台來分享文章,甚至有一些大牛靠自媒體收入還實作了财富自由!在寫文章的過程中,我進一步鍛煉了自己的文筆,向很多朋友學到了知識,也督促我來不斷輸入知識、提升自己。
以上就是我的 Java 開發日常,你可能會好奇,魚皮在哪家小微公司待過呢?這是個秘密!
Java 開發者的工作看似平淡,但隻要你愛好程式設計,愛好這個行業,每一天都能過的充實而有意義!