Java 程式設計師每天都在做什麼?

程式設計師魚皮發表於2021-03-03

作為一名 在大、中、小微企業都待過 的 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 或者 YAPIPostman 等介面管理工具,甚至還可以直接使用命令列 curl 等。

postman

測試

在寫完程式碼之後,要經過非常非常非常充分的測試才能提交程式碼!這個階段也是非常花時間的,需要配合測試同學,提供一些測試的細節和補充說明,並且對測試中發現的問題進行修復。很多程式設計師應該都有這種感受:寫 bug 一分鐘,改 bug 一小時!

這些就是我目前在鵝廠的日常工作,其實和其他公司不會什麼區別,無非就是你負責的業務量級越大,你在設計、測試等環節上投入的時間和精力就要更多;業務團隊越大,你在需求溝通和合作上也要花更多的時間。這些工作看似和寫程式碼關係不大,但對於程式設計師的經驗積累以及職業素養、工程能力的提升是至關重要的!

優秀的程式設計師,不只是有能力寫得一手好程式碼,更多的是需要具備一些工程師素養,比如:

  1. 對技術有獨特的興趣和追求,持續學習
  2. 有全域性觀,總能站在一個更高、更全域性的視角去考慮問題
  3. 處理事情小心謹慎,而不是憑直覺和過去的經驗主觀臆斷
  4. 溝通能力強,能夠用方便他人理解的方式來描述問題
  5. 強大的設計架構能力
  6. 刨根問題,深究問題本質
  7. 程式碼潔癖,精益求精
  8. 不止技術,還注重業務底層邏輯,關心使用者
  9. 執行力強,有責任心
  10. 懂得利用自動化工具提升效率
  11. 善用繪圖、圖表來描述技術架構和問題
  12. 樂於分享,積極為他人指路

在工作之餘,我也在朝著成為一名優秀工程師的路上而努力。因此,我會利用公司提供的知識平臺、問答平臺和技術資源進行學習,並且多和身邊的技術大牛們交流。大公司技術好,大佬多,提供的資源也真的非常多,這是我認為很多同學應該去大廠的一個原因,而身在大廠的同學更應該利用好這些資源。

我還會積極參與一些公司內外的開源專案,和優秀的程式設計師朋友一起合作,互相學習進步,提升程式碼的水平。這裡也建議大家多看 GitHub 上的開源專案,先在本地執行並熟練使用它,然後嘗試分析原始碼和貢獻程式碼。

不會找開源專案?我之前分享過一篇文章,能幫到大家:【硬核乾貨】如何高效找到優質程式設計專案?

此外,提升個人影響力也是很重要的,我認識很多 Java 開發工作者都喜歡寫技術文章,並且一些朋友開通了自己的自媒體平臺來分享文章,甚至有一些大牛靠自媒體收入還實現了財富自由!在寫文章的過程中,我進一步鍛鍊了自己的文筆,向很多朋友學到了知識,也督促我來不斷輸入知識、提升自己。


以上就是我的 Java 開發日常,你可能會好奇,魚皮在哪家小微公司待過呢?這是個祕密!

Java 開發者的工作看似平淡,但只要你愛好程式設計,愛好這個行業,每一天都能過的充實而有意義!

相關文章