[轉]基礎知識漫談(1): 想到哪兒寫到哪兒
本文轉自(http://www.cnblogs.com/anrainie/p/5606570.html)
一、想到哪兒寫到哪兒
給公司新員工培訓,和網上的新手做交流,我最先強調的都是基礎。
基礎有什么用?
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。
經過這樣的分析過程,不管是實現新的需求,還是分析未知的框架,都具備了理論上的基礎。
就我個人的見解,達到這個階段的程序員,才能稱之為合格。
小結
道理說多了,來嘗嘗雞湯。
沒有人有義務幫助你。
樂于助人的老鳥只會幫助有價值的新手,不求反哺,至少要有成就感,是吧?
本就該在大學搞定的內容,為什么要別人花費自己的青春和公司的人工來為你補習?
基礎是看上去艱澀玄乎,卻是能應用在工作里的東西,切勿忽視。我有個高中老師常把一句話掛在嘴邊“現在你記住就好,以后你會懂。”有時候我想,要是那時候聽了這話,該多好。
文章列表