java想到哪兒寫到哪兒

ii_chengzi發表於2019-05-18

給公司新員工培訓,和網上的新手做交流,我最先強調的都是基礎。

基礎有什麼用?

1、 節省溝通成本

有天,java群裡來了個新人,上來就提了一個問題:

“我程式碼跑不起來,怎麼辦?”

這一看就是還沒入門,沒辦法提供具體的資訊。

於是有個有耐心的老鳥出來了,開始了一連串提問:異常棧看一下?有編譯期異常嗎?貼出你的main函式看看?

新人收到了問題並且丟擲了 你都在說什麼 異常。

“你還是截圖吧。”老鳥說。

這裡涉及到了 異常棧,編譯期,main函式 等等再基礎不過的知識,有那麼部分毫不客氣的新人就說了,為什麼你不講得通俗易懂點兒呢?

通俗易懂,是需要成本的。

異常 即是程式不期望的異常情況,它處理不了交給程式設計師自己來處理了。 是個再基礎不過的資料結構,出現它就說明棧頂的元素,是最後入棧的。那麼,看到你出錯後控制檯丟擲的那堆文字沒有?貼出來,距離XXXException最近的通常就是最關鍵的資訊。

你看,就算精簡為“控制檯丟擲的那堆文字”,比較起來,是不是“異常棧”更加節約雙方的時間,畢竟以當前IT業界的薪資水準,老鳥可能已經浪費了公司好幾十塊。

更何況,可能有人是連“控制檯”都無法理解的,這就涉及到了作用2。

 

2、方便他人界定你的水準

我見過一份簡歷,quartz、POI、easyUI、jquery等等,寫了一堆。這人自己可能覺著,這些名詞高階,厲害,可是呢,看看這份技能表:

 

 

就暴露出了他的問題,此人並不懂他所說的這些名詞是什麼。

至少,一個有基礎的程式設計師就不會寫上熟悉xml、json、dom4j技術,也不會把“線上支付”和servlet\jsp放在同一欄下面。他無需長篇累述自己的技能樹多麼豐滿,合適的內容,合理的排版,本身就代表了他的水準。

 

3、解決未知的問題

“有沒有例子可以參考?”

“有沒有影片教程可以看?”

“能不能幫我遠端一下?”

一般來說,捱了這三連懟的老鳥無不火從心起,但凡有例外,要麼脾氣太好要麼姑娘太好看。

合適的解決方案:搜尋關鍵字->檢視文件->閱讀原始碼->詢問老鳥關鍵字->*。

從來沒到過的問題如何解決呢?或者擴充套件一下,我寫的功能,如何適應未來千奇百怪的需求呢?當然,這其實本質還是個碼量和閱讀量的問題,篇幅和精力都不足夠支撐我講好這個問題,但凡我說好了,那等同我也寫完了一本《Effective Java》。

我把學習分為幾個階段:

基礎理解階段 ,你看到一個基礎知識點,開始理解它的含義,看到具體的例項能反應出它所對應的基礎知識。比如看到Animal cat=new Cat()能反應出它體現瞭如下知識點:宣告、例項化、引用、多型。

串聯階段 ,把知識點串聯起來,構建出它本源的樣子,比如上面的例子,結合JVM相關知識,腦海裡出現一張粗略的堆疊圖,就像這幅圖:

 

 

 

這樣的能力不光可以用於向本源推測,也可以主動的把知識點組合,玩味出新的結構,比如,新需求是“根據配置來產生動物”。

那麼,我們分析會有一個根據配置項來產生動物例項的構建工具。程式碼可能長下面的樣子:

Animal animal=AnimalFactory.createAnimal(“貓”);

在createAnimal裡,我們對字串進行if判斷,決定到底是new Cat還是new Dog

事實上,這樣的結構已經有人總結在了GoF裡。誒,GoF是什麼?忘了本段是說什麼的嗎?

進階階段 ,具備串聯知識點的能力之後,就應當有看到未知技術逆推具體實現的能力。比如hibernate,它的功能是什麼?核心在於“實現持久層和資料層的同步”,也就是說,資料表和JavaBean\POJO的對映。那麼,我們來思考,假如從來不存在hibernate類似的ORM框架,要如何實現這個功能呢?

首先,我們要有和資料庫溝通的工具和配置,java可以選用jdbc,資料庫相關配置可以使用xml、json、bean任意方式。我們也可以看到,hibernate底層就是jdbc,也有Configuration這個配置入口。

然後要有種配置方式讓資料表和Bean達成統一。為什麼?因為它們的資訊量不一致,包含的資訊是相交的關係,比如,它們都有類似的資料型別(varchar->String),又有互不相融的內容(索引和約束),得出結論,我們需要一個對映工具,來使相交的部分匹配,並且補充缺失的內容。於是,我們可以推論出,hibernate一定有個對映工具(xml和annotation)。

再後,為了適應多種不同的資料庫,每一條語句可能都有不同的表達,比如Oracle有Number(*,*)這個型別,對於mysql就不適用,我們需要設計一個資料庫的介面卡。在hibernate裡,這個部分叫做方言,Dialect。

經過這樣的分析過程,不管是實現新的需求,還是分析未知的框架,都具備了理論上的基礎。

就我個人的見解,達到這個階段的程式設計師,才能稱之為合格。

 

小結

道理說多了,來嚐嚐雞湯。

沒有人有義務幫助你。

樂於助人的老鳥只會幫助有價值的新手,不求反哺,至少要有成就感,是吧?

本就該在大學搞定的內容,為什麼要別人花費自己的青春和公司的人工來為你補習?

基礎是看上去艱澀玄乎,卻是能應用在工作裡的東西,切勿忽視。我有個高中老師常把一句話掛在嘴邊“現在你記住就好,以後你會懂。”有時候我想,要是那時候聽了這話,該多好。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31543790/viewspace-2644835/,如需轉載,請註明出處,否則將追究法律責任。

相關文章