作為一名 在大识藤、中砚著、小微企業(yè)都待過 的 Java 開發(fā)者,今天和大家分享下自己在不同公司的工作日常和收獲痴昧。包括一些個人積累的工作提升經(jīng)驗稽穆,以及一些 Java 學(xué)習(xí)的方法和資源。
先從我的第一份 Java 開發(fā)實習(xí)工作說起吧~
實習(xí)生工作日常
我是在大二暑期開始了我人生的第一次實習(xí)赶撰,崗位正是 Java 開發(fā)舌镶,還混了個 title 叫 “助理 Java 工程師”!
這家公司屬于一家中型企業(yè)豪娜,作為第一份實習(xí)餐胀,我已經(jīng)很滿足了。
剛進入公司的第一天瘤载,在導(dǎo)師和運維同學(xué)的幫助下否灾,搞好辦公設(shè)備,安裝開發(fā)環(huán)境鸣奔,本以為第二天就能開始寫代碼墨技。但是整整兩周惩阶,我都沒有寫下一行 Java 代碼!而是先花了一周的時間熟悉企業(yè)的業(yè)務(wù)健提、我要參與的項目源碼(Spring 全家桶 + Dubbo)琳猫、以及公司的各種辦公套件和研發(fā)流程。這些幾乎是每位剛剛進入新公司的同學(xué)都要做的事情私痹。
然后我就開始接需求了脐嫂,面對前人留下的 xx 一樣的代碼和復(fù)雜的業(yè)務(wù),我根本無從下手紊遵。那么這一周我做了些什么呢账千?在導(dǎo)師的指導(dǎo)下,我針對這個需求涉及的業(yè)務(wù)流程畫了一個很完整的流程圖暗膜,并且在流程圖上進行了詳細(xì)的標(biāo)注匀奏。畫完流程圖之后,我突然感覺思路清晰了很多学搜,接下來就是寫偽代碼娃善,終于在一周后,我才正式開始寫 Java 代碼了瑞佩。
在此之前聚磺,我基本都是跟著視頻教程寫寫簡單的 Demo 程序,或者自己為了學(xué)習(xí)做做簡單的小項目炬丸。從來沒有像這次一樣在寫代碼前進行如此精心的設(shè)計瘫寝,第一次有了自己走出校園的感覺,這種體驗和成長是在學(xué)校無法感受到的稠炬。這也是為什么我建議計算機專業(yè)的同學(xué)在學(xué)了一些開發(fā)技術(shù)后焕阿,趁早去找一份實習(xí),不用擔(dān)心自己的經(jīng)驗不足首启,通過面試和企業(yè)工作的磨練才能讓你積累更多的經(jīng)驗暮屡、提升技術(shù),也能幫助你明確自己的目標(biāo)∫闾遥現(xiàn)在也有很多幫助大學(xué)生找實習(xí)的平臺栽惶,像 牛客網(wǎng)疾嗅、實習(xí)僧 都是很不錯的外厂。
實習(xí)的這家公司雖然不大,但是團隊的氛圍非常好代承。也正因為公司不大汁蝶,和技術(shù)主管、CTO 等大佬的交流機會也非常多,我們每天開工前都會開站會(敏捷開發(fā))來討論工作掖棉,并且定期地舉辦技術(shù)分享墓律。
整個實習(xí)過程真的非常愉快,學(xué)到了很多技術(shù)和業(yè)務(wù)知識幔亥,也開拓了眼界耻讽,明確了我今后的職業(yè)發(fā)展方向。最爽的事是工作不忙的時候也摸魚兒刷了一些算法帕棉,真的非常感謝公司和這段實習(xí)經(jīng)歷针肥!
然后分享我目前在 騰訊 做 Java 開發(fā)的日常。
鵝廠工作日常
沒錯香伴,鵝廠并不是只有 C++ 這一門后端開發(fā)語言慰枕,其實鵝廠的 Java 程序員數(shù)量也是很多的!
我從大三暑假開始就在騰訊實習(xí)即纲,并通過答辯轉(zhuǎn)正具帮,雖然只畢業(yè)半年,但至今累積在鵝廠寫 Java 已經(jīng)一年半多了低斋,那除了偶爾摸魚外蜂厅,我平時的工作都做些什么呢?
起初我以為大廠程序員的工作日常也就是寫代碼膊畴、造輪子掘猿,在大公司,就得寫更多的代碼巴比!
結(jié)果在剛?cè)肼殨r术奖,由于經(jīng)驗不足礁遵,再加上年輕氣盛轻绞,有著莫名的自信。剛拿到需求后佣耐,我覺得特別簡單政勃,不就是 CRUD(增刪改查)么?于是兼砖,我就懶得設(shè)計方案了奸远,沒怎么思考就直接上手寫代碼了,結(jié)果不斷翻車讽挟,出現(xiàn)了很多細(xì)節(jié)問題懒叛,比如數(shù)據(jù)沒有訪問權(quán)限獲取不到、和其他部門的同學(xué)接口字段沒對齊等等耽梅,甚至還出現(xiàn)需求理解錯誤的情況薛窥!最后導(dǎo)致的結(jié)果就是做了很多無用功,把本來幾天就能做完的需求一拖再拖,一度以為自己要被勸退了诅迷! o(╥﹏╥)o
經(jīng)歷了一次次的翻車后佩番,我開始思考自己的問題到底出在哪里,為什么我總感覺自己什么都知道罢杉、可以寫出代碼趟畏,但寫出的代碼卻經(jīng)常錯誤連篇呢?
我向?qū)熀推渌耐抡埥毯蟀l(fā)現(xiàn)滩租,其實大家更多的時間并不是在寫代碼赋秀,而是在 開會討論、核對需求持际、溝通對齊沃琅、設(shè)計技術(shù)方案、測試等蜘欲。寫代碼的時間其實很少很少益眉!
導(dǎo)師對我說:“其實寫代碼并不難,關(guān)鍵是要明確為什么要寫代碼姥份、怎么寫代碼郭脂、寫什么代碼〕呵福”
原來展鸡,相比寫代碼,更重要的是寫代碼前的技術(shù)方案設(shè)計和寫代碼后的測試埃难!
技術(shù)方案設(shè)計
當(dāng)程序員確認(rèn)完需求后莹弊,要先根據(jù)需求來給出一個清晰明確的技術(shù)方案,一方面是證明需求的可行性涡尘,另一方面是對自己之后的代碼實現(xiàn)有一個大致思路忍弛。很多的問題其實是可以在設(shè)計階段去發(fā)現(xiàn)和規(guī)避的,而不是等你寫代碼的時候考抄,才發(fā)現(xiàn)之前的設(shè)計有問題细疚、甚至是需求本身就不合理!到時候耽誤了項目上線川梅,背鍋的就是程序員自己疯兼!
之前有朋友問,在大公司贫途,萬一寫著寫著代碼吧彪,沒思路了、寫不出來了怎么辦丢早?這種問題其實就是可以通過前期的技術(shù)方案設(shè)計來規(guī)避的姨裸。畢竟老板才不關(guān)心你代碼寫的怎么樣,他只關(guān)心你的技術(shù)方案,換句話說啦扬,是關(guān)心你能不能按時完成項目中狂!
此前,我即使畫了一些流程圖扑毡,目的也僅僅是在于幫助自己寫代碼胃榕。覺得代碼能寫出來后,我就不再去考慮方案設(shè)計了瞄摊。
而在意識到技術(shù)方案的重要性后勋又,我會在理解需求后,先寫一份詳盡的技術(shù)方案换帜,包括需求的合理性分析楔壤、選用什么技術(shù)來實現(xiàn)指定的功能、怎么設(shè)計庫表結(jié)構(gòu)惯驼、怎么設(shè)計類之間的關(guān)系(用哪種設(shè)計模式)蹲嚣、怎么設(shè)計接口、計劃工期是多久祟牲、有沒有什么風(fēng)險點等等隙畜。
如需課件源碼軟件等資料添加小助手vx:ma-xiaoguo(備注:果果)
開發(fā)
設(shè)計好方案后,就要投入開發(fā)说贝。
基本就是先利用一些數(shù)據(jù)庫管理軟件或者登陸服務(wù)器去配置一些庫表议惰,然后選用一些 Java 類庫和工具來編寫業(yè)務(wù)代碼。說是編寫代碼乡恕,其實 80% 以上都是復(fù)制粘貼言询!復(fù)制別人的,復(fù)制自己的傲宜,積累的代碼多了之后运杭,簡直爽的飛起!不能復(fù)制粘貼的蛋哭,也可以用一些代碼生成工具县习、甚至是低代碼工具來偷偷懶涮母。誰說 CRUD 工程師就沒有技術(shù)谆趾?哼,咱偷懶也要有水平叛本。
寫代碼的過程中沪蓬,你要遵循一定的規(guī)范,不斷地將重復(fù)的代碼進行抽象来候、封裝和復(fù)用跷叉,可以利用一些設(shè)計模式,并且要多多編寫注釋,提高代碼的可讀性和可維護性云挟。
關(guān)于代碼規(guī)范梆砸,建議參考 Google 開源的 Java 代碼規(guī)范或者阿里巴巴的 Java 代碼規(guī)范,非常專業(yè)园欣!
寫好代碼后帖世,你要再次檢查自己的代碼,可以利用一些代碼格式化和代碼檢查工具來提前發(fā)現(xiàn)一些規(guī)范問題以及 bug沸枯,還要在本地編寫單元測試來最細(xì)粒度地保證代碼的可運行性和正確性日矫。
Java 的單元測試類庫一般用 JUnit
就行了,本地自己測試請求接口的話可以直接用 IDEA 自帶的測試插件绑榴,也可以選用 Swagger
或者 YAPI哪轿、Postman
等接口管理工具,甚至還可以直接使用命令行 curl 等翔怎。
測試
在寫完代碼之后窃诉,要經(jīng)過非常非常非常充分的測試才能提交代碼!這個階段也是非吵嗵祝花時間的褐奴,需要配合測試同學(xué),提供一些測試的細(xì)節(jié)和補充說明于毙,并且對測試中發(fā)現(xiàn)的問題進行修復(fù)敦冬。很多程序員應(yīng)該都有這種感受:寫 bug 一分鐘,改 bug 一小時唯沮!
這些就是我目前在鵝廠的日常工作脖旱,其實和其他公司不會什么區(qū)別,無非就是你負(fù)責(zé)的業(yè)務(wù)量級越大介蛉,你在設(shè)計萌庆、測試等環(huán)節(jié)上投入的時間和精力就要更多;業(yè)務(wù)團隊越大币旧,你在需求溝通和合作上也要花更多的時間践险。這些工作看似和寫代碼關(guān)系不大,但對于程序員的經(jīng)驗積累以及職業(yè)素養(yǎng)吹菱、工程能力的提升是至關(guān)重要的巍虫!
優(yōu)秀的程序員,不只是有能力寫得一手好代碼鳍刷,更多的是需要具備一些工程師素養(yǎng)占遥,比如:
對技術(shù)有獨特的興趣和追求,持續(xù)學(xué)習(xí)
有全局觀输瓜,總能站在一個更高瓦胎、更全局的視角去考慮問題
處理事情小心謹(jǐn)慎芬萍,而不是憑直覺和過去的經(jīng)驗主觀臆斷
溝通能力強,能夠用方便他人理解的方式來描述問題
強大的設(shè)計架構(gòu)能力
刨根問題搔啊,深究問題本質(zhì)
代碼潔癖柬祠,精益求精
不止技術(shù),還注重業(yè)務(wù)底層邏輯负芋,關(guān)心用戶
執(zhí)行力強瓶盛,有責(zé)任心
懂得利用自動化工具提升效率
善用繪圖、圖表來描述技術(shù)架構(gòu)和問題
樂于分享示罗,積極為他人指路
如需課件源碼軟件等資料添加小助手vx:ma-xiaoguo(備注:果果)
惩猫!關(guān)注UP主 日常更新分享Java基礎(chǔ)編程技術(shù)!
在工作之余蚜点,我也在朝著成為一名優(yōu)秀工程師的路上而努力轧房。因此,我會利用公司提供的知識平臺绍绘、問答平臺和技術(shù)資源進行學(xué)習(xí)奶镶,并且多和身邊的技術(shù)大牛們交流。大公司技術(shù)好陪拘,大佬多厂镇,提供的資源也真的非常多,這是我認(rèn)為很多同學(xué)應(yīng)該去大廠的一個原因左刽,而身在大廠的同學(xué)更應(yīng)該利用好這些資源捺信。
我還會積極參與一些公司內(nèi)外的開源項目,和優(yōu)秀的程序員朋友一起合作欠痴,互相學(xué)習(xí)進步迄靠,提升代碼的水平。這里也建議大家多看 GitHub 上的開源項目喇辽,先在本地運行并熟練使用它掌挚,然后嘗試分析源碼和貢獻(xiàn)代碼。