[轉]基礎知識漫談(1): 想到哪兒寫到哪兒

[轉]基礎知識漫談(1): 想到哪兒寫到哪兒

 本文轉自(http://www.cnblogs.com/anrainie/p/5606570.htmlhtml

1、想到哪兒寫到哪兒

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

基礎有什麼用?mysql

一、節省溝通成本jquery

有天,java羣裏來了個新人,上來就提了一個問題:程序員

「我代碼跑不起來,怎麼辦?」sql

這一看就是還沒入門,沒辦法提供具體的信息。數據庫

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

新人收到了問題而且拋出了你都在說什麼異常。數據結構

「你仍是截圖吧。」老鳥說。框架

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

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

異常便是程序不指望的異常狀況,它處理不了交給程序員本身來處理了。是個再基礎不過的數據結構,出現它就說明棧頂的元素,是最後入棧的。那麼,看到你出錯後控制檯拋出的那堆文字沒有?貼出來,距離XXXException最近的一般就是最關鍵的信息。

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

更況且,可能有人是連「控制檯」都沒法理解的,這就涉及到了做用2。

 

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

我見過一份簡歷,quartz、POI、easyUI、jquery等等,寫了一堆。這人本身可能覺着,這些名詞高端,厲害,但是呢,看看這份技能表:

 

 

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

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

 

三、解決未知的問題

「有沒有例子能夠參考?」

「有沒有視頻教程能夠看?」

「能不能幫我遠程一下?」

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

合適的解決方案:搜索關鍵字->查看文檔->閱讀源碼->詢問老鳥關鍵字->*。

歷來沒到過的問題如何解決呢?或者擴展一下,我寫的功能,如何適應將來千奇百怪的需求呢?固然,這其實本質仍是個碼量和閱讀量的問題,篇幅和精力都不足夠支撐我講好這個問題,但凡我說好了,那等同我也寫完了一本《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。

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

就我我的的看法,達到這個階段的程序員,才能稱之爲合格。

 

小結

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

沒有人有義務幫助你。

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

本就該在大學搞定的內容,爲何要別人花費本身的青春和公司的人工來爲你補習?

基礎是看上去艱澀玄乎,倒是能應用在工做裏的東西,切勿忽視。我有個高中老師常把一句話掛在嘴邊「如今你記住就好,之後你會懂。」有時候我想,要是那時候聽了這話,該多好。

相關文章
相關標籤/搜索