本文轉自(http://www.cnblogs.com/anrainie/p/5606570.html)html
給公司新員工培訓,和網上的新手作交流,我最早強調的都是基礎。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。
通過這樣的分析過程,不論是實現新的需求,仍是分析未知的框架,都具有了理論上的基礎。
就我我的的看法,達到這個階段的程序員,才能稱之爲合格。
小結
道理說多了,來嚐嚐雞湯。
沒有人有義務幫助你。
樂於助人的老鳥只會幫助有價值的新手,不求反哺,至少要有成就感,是吧?
本就該在大學搞定的內容,爲何要別人花費本身的青春和公司的人工來爲你補習?
基礎是看上去艱澀玄乎,倒是能應用在工做裏的東西,切勿忽視。我有個高中老師常把一句話掛在嘴邊「如今你記住就好,之後你會懂。」有時候我想,要是那時候聽了這話,該多好。