做爲一名 在大、中、小微企業都待過 的 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 開發者的工做看似平淡,但只要你愛好編程,愛好這個行業,每一天都能過的充實而有意義!