
深入Java開發(fā)之前,您需要了解的一切。
有許多工具,方法,環(huán)境和特性改變了你編寫代碼的方式,并且通常來說這些東西是你在學校期間沒有遇到過的。 雖然它是你邁出了Java開發(fā)世界的第一步,但真正的學習實際上是發(fā)生在工作中的。
在接下來的文章中,我們將介紹一些你可以獲取更多經(jīng)驗的關鍵因素。 這其中可能會包括一些哲學思想在里面。準備好你的筆記本,讓我們一起回到在學校的時光。
恭喜,你即將瘋狂
在學習如何編碼時,我們面臨的問題很純粹:理解算法如何工作,確定要使用的合適的數(shù)據(jù)結構,并知道如何修復我們自己寫的代碼。?然而,現(xiàn)實世界有很多我們從來沒有遇到過的新問題:調(diào)整你的代碼以適應團隊的編碼標準,理解別人的代碼,并找到附近最好的學習榜樣。
我們寫的第一行代碼可能不同于第10000行,因為我們在開發(fā)過程中不斷的學習和調(diào)整。 作為這個過程的一部分,我們可能會失敗或迷惑,這是必然的,因為它是任何學習曲線的一部分。 但有一些事情我們可以提前準備,去嘗試把我們將要面對的代碼,DB或應用程序的破壞力最小化。
Write, Merge, Debug, Repeat
每個工程師都知道編碼是工作的重要組成部分,但編碼它也可能是工作中最簡單的部分。真正的挑戰(zhàn)是圍繞編碼的其它因素。 有許多關于編碼之外的挑戰(zhàn)主題,但我們決定專注于真正可以提前學習的事情,從下面的事情開始:
1、 Merging Files
這聽起來可能是基本的能力,但這其中會出現(xiàn)各種問題。 你遇到的最常見的操作之一可能是合并。 它是將兩個(或更多)開發(fā)歷史,文本文件,數(shù)組或任何其他對象連接在一起的動作。 例如,提交一個完整的分支是相當簡單的,但如果你只想提交該分支中的一部分呢? 但在你學會如何合并文件之前你最好想好如何面對別人的冷嘲熱諷。 這就是為什么需要了解合并的過程中究竟發(fā)生了什么事如此重要的原因。必須要能夠看到和理解代碼,然后才提交。
你可以用手動方法查看文件究竟做了哪些修改,看看變動的代碼可能會怎樣影響已有的代碼,或者你可以選擇一個工具來幫助你發(fā)現(xiàn)代碼的變更。 有很多工具,你可以使用,IntelliJ IDEA’s conflict resolution tool, KDiff3, Meld, Guiffy, Kompare 和其它工具。
2、 Understanding the Debugging Process
一旦你的代碼公開了,被人使用了,或運行在你的開發(fā)環(huán)境,如何查看它是否真的按照預期工作呢? 這就需要查看調(diào)試信息,但為了使調(diào)試信息更有用,你需要關注你的日志
你可以選擇下面的日志級別:
Trace – 最詳細的信息
Debug – 寫入日志文件的詳細信息
Info – 運行時的事件信息,可以輸出到控制臺
Warning – 可能出現(xiàn)潛在問題的信息
Error – 不可預計的情況
Fatal – 嚴重錯誤
雖然有框架為你寫這些消息,重要的是盡可能多的信息,以了解如何處理和解決不同的問題。
首先,你需要確定每個消息的正確級別。 例如,使用Debug記錄在程序中發(fā)生的任何事情,以便在將代碼發(fā)送到生產(chǎn)之前更好地調(diào)試代碼并了解發(fā)生了什么。 使用信息來了解用戶創(chuàng)建的操作,并使用警告來標記可能最終作為錯誤的事件,如果您想要跟蹤他們當然。
其次確保您根據(jù)需要為您的日志提供盡可能多的信息。 當然,現(xiàn)在你知道這是什么意思:
publicvoiddoSomething(){// your awesome codelogger.debug("Forgot the keys inside the car, BRB");}
但是你必須考慮你的同事試圖理解你的代碼。 你不想讓他們在你的假期問你什么車,你不想找到自己2年從今天想知道你在想什么,而寫這個。 以你想要的方式處理你的代碼 - 盡可能多的信息,所以其他人將知道如何處理它。
此外,如果你練習良好的日志技能,你必然會使每個人都這樣做。
3、 Using Exceptions for Your Advantage
Java中有很多異常,最近我們發(fā)布了一些提示和見解的集合,用于處理大量的Java異常。但是如何在開發(fā)階段為自己的好處使用例外呢?通過斷點。
您可以手動為拋出的異常設置斷點,并標記在開發(fā)中運行應用程序時執(zhí)行應暫停的位置。每當執(zhí)行斷點時,將在調(diào)試器控制臺中打印一條消息,并提供所需的相關信息。
它像一個為您的應用程序的暫停按鈕,讓您檢查和看到到底發(fā)生了什么。有一些不同類型的斷點,當你的應用程序到達某個特定的方法,類,變量或代碼行時,它們會停止執(zhí)行,所以你可以根據(jù)自己的需要進行游戲和測試。
另一方面,如果你正在尋找一個工具,它將幫助你知道你的代碼在生產(chǎn)中什么時候,在哪里和為什么打斷,你可以嘗試OverOps。它是唯一的工具,為每個異常,記錄的警告和錯誤顯示整個調(diào)用堆棧的完整的源代碼和變量狀態(tài)。一探究竟。
4、 Handling a Production Environment
經(jīng)過所有的艱苦努力,你已經(jīng)部署了你的代碼,它在生產(chǎn)中。 如果你寫了有意義的日志消息,你將能夠知道什么時候拋出異常,但有時會更難理解為什么它實際發(fā)生。
在轉(zhuǎn)移到生產(chǎn)時,你必須記住的一件事是這種差距。 我們不是在談論鐵路乘客和火車,我們在談論你的當?shù)丨h(huán)境與生產(chǎn)。 這是許多錯誤的食譜,會浪費你的時間,試圖找出他們來自哪里,為什么。
你需要了解為什么這些環(huán)境是不同的,以及如何處理這個差距。 如果你正在尋找一些高級Java調(diào)試技術,請查看這篇文章。 另一種為多個環(huán)境配置應用程序的方法可以使用Docker實現(xiàn),您可以在這里閱讀快速指南。
5、 Thinking About Future Teammates
我們?yōu)槟峁┝?個字:向后兼容性。 想象一下:你的機器上安裝了Java 8,而生產(chǎn)運行的是Java 6,你不明白為什么會出現(xiàn)問題。 或者,也許有一個客戶正在運行舊版本的應用程序,并且您的最新功能不適用于他們。 這是一個粘性的情況,可以很容易地避免。
你需要記住,每個團隊都有一個過去,以及在你到達之前很久的決定的列表。 這就是為什么你必須考慮過去,以前進(我們說,我們將獲得哲學,對嗎?)。
在編寫新代碼時,花時間測試,識別并修復可能會破壞應用程序舊版本的任何內(nèi)容。 它會幫助你一路上,并將使每個人都更開心,因為他們不必面對老的或甚至令人驚訝的bug,大型客戶不愿意更新他們的應用程序版本。
What Else?
工作中最困難的部分是進入?yún)^(qū)域。我們現(xiàn)在談論的不是咖啡的早晨提神起來杯,我們正在談論的生產(chǎn)力黑客,這將提高您的工作和幫助你做到這一點甚至更好。
有很多東西你可以使用,如特殊的bash腳本,自制的命令行黑客,甚至特殊的工具,以幫助你更好地監(jiān)控一切。 如果你正在尋找一些提示和技巧,請查看我們從Java社區(qū)收集的一些生產(chǎn)力提示。
Final Thoughts
最難的部分是開始。 無論是新工作的第一天,還是新的博客文章 - 在這個過程中有很多研究和學習。 不要害怕提出盡可能多的問題,因為這是了解團隊,代碼和應用程序如何工作的最好方法。