基础知识漫谈(1): 想到哪儿写到哪儿
一、想到哪兒寫(xiě)到哪兒
給公司新員工培訓(xùn),和網(wǎng)上的新手做交流,我最先強(qiáng)調(diào)的都是基礎(chǔ)。
基礎(chǔ)有什么用?
1、節(jié)省溝通成本
有天,java群里來(lái)了個(gè)新人,上來(lái)就提了一個(gè)問(wèn)題:
“我代碼跑不起來(lái),怎么辦?”
這一看就是還沒(méi)入門(mén),沒(méi)辦法提供具體的信息。
于是有個(gè)有耐心的老鳥(niǎo)出來(lái)了,開(kāi)始了一連串提問(wèn):異常棧看一下?有編譯期異常嗎?貼出你的main函數(shù)看看?
新人收到了問(wèn)題并且拋出了你都在說(shuō)什么異常。
“你還是截圖吧。”老鳥(niǎo)說(shuō)。
這里涉及到了異常棧,編譯期,main函數(shù)等等再基礎(chǔ)不過(guò)的知識(shí),有那么部分毫不客氣的新人就說(shuō)了,為什么你不講得通俗易懂點(diǎn)兒呢?
通俗易懂,是需要成本的。
異常即是程序不期望的異常情況,它處理不了交給程序員自己來(lái)處理了。棧是個(gè)再基礎(chǔ)不過(guò)的數(shù)據(jù)結(jié)構(gòu),出現(xiàn)它就說(shuō)明棧頂?shù)脑?#xff0c;是最后入棧的。那么,看到你出錯(cuò)后控制臺(tái)拋出的那堆文字沒(méi)有?貼出來(lái),距離XXXException最近的通常就是最關(guān)鍵的信息。
你看,就算精簡(jiǎn)為“控制臺(tái)拋出的那堆文字”,比較起來(lái),是不是“異常棧”更加節(jié)約雙方的時(shí)間,畢竟以當(dāng)前IT業(yè)界的薪資水準(zhǔn),老鳥(niǎo)可能已經(jīng)浪費(fèi)了公司好幾十塊。
更何況,可能有人是連“控制臺(tái)”都無(wú)法理解的,這就涉及到了作用2。
?
2、方便他人界定你的水準(zhǔn)
我見(jiàn)過(guò)一份簡(jiǎn)歷,quartz、POI、easyUI、jquery等等,寫(xiě)了一堆。這人自己可能覺(jué)著,這些名詞高端,厲害,可是呢,看看這份技能表:
?
?
就暴露出了他的問(wèn)題,此人并不懂他所說(shuō)的這些名詞是什么。
至少,一個(gè)有基礎(chǔ)的程序員就不會(huì)寫(xiě)上熟悉xml、json、dom4j技術(shù),也不會(huì)把“在線支付”和servlet\jsp放在同一欄下面。他無(wú)需長(zhǎng)篇累述自己的技能樹(shù)多么豐滿,合適的內(nèi)容,合理的排版,本身就代表了他的水準(zhǔn)。
?
3、解決未知的問(wèn)題
“有沒(méi)有例子可以參考?”
“有沒(méi)有視頻教程可以看?”
“能不能幫我遠(yuǎn)程一下?”
一般來(lái)說(shuō),挨了這三連懟的老鳥(niǎo)無(wú)不火從心起,但凡有例外,要么脾氣太好要么姑娘太好看。
合適的解決方案:搜索關(guān)鍵字->查看文檔->閱讀源碼->詢問(wèn)老鳥(niǎo)關(guān)鍵字->*。
從來(lái)沒(méi)到過(guò)的問(wèn)題如何解決呢?或者擴(kuò)展一下,我寫(xiě)的功能,如何適應(yīng)未來(lái)千奇百怪的需求呢?當(dāng)然,這其實(shí)本質(zhì)還是個(gè)碼量和閱讀量的問(wèn)題,篇幅和精力都不足夠支撐我講好這個(gè)問(wèn)題,但凡我說(shuō)好了,那等同我也寫(xiě)完了一本《Effective Java》。
我把學(xué)習(xí)分為幾個(gè)階段:
基礎(chǔ)理解階段,你看到一個(gè)基礎(chǔ)知識(shí)點(diǎn),開(kāi)始理解它的含義,看到具體的實(shí)例能反應(yīng)出它所對(duì)應(yīng)的基礎(chǔ)知識(shí)。比如看到Animal cat=new Cat()能反應(yīng)出它體現(xiàn)了如下知識(shí)點(diǎn):聲明、實(shí)例化、引用、多態(tài)。
串聯(lián)階段,把知識(shí)點(diǎn)串聯(lián)起來(lái),構(gòu)建出它本源的樣子,比如上面的例子,結(jié)合JVM相關(guān)知識(shí),腦海里出現(xiàn)一張粗略的堆棧圖,就像這幅圖:
?
?
?
這樣的能力不光可以用于向本源推測(cè),也可以主動(dòng)的把知識(shí)點(diǎn)組合,玩味出新的結(jié)構(gòu),比如,新需求是“根據(jù)配置來(lái)產(chǎn)生動(dòng)物”。
那么,我們分析會(huì)有一個(gè)根據(jù)配置項(xiàng)來(lái)產(chǎn)生動(dòng)物實(shí)例的構(gòu)建工具。代碼可能長(zhǎng)下面的樣子:
Animal animal=AnimalFactory.createAnimal(“貓”);
在createAnimal里,我們對(duì)字符串進(jìn)行if判斷,決定到底是new Cat還是new Dog
事實(shí)上,這樣的結(jié)構(gòu)已經(jīng)有人總結(jié)在了GoF里。誒,GoF是什么?忘了本段是說(shuō)什么的嗎?
進(jìn)階階段,具備串 聯(lián)知識(shí)點(diǎn)的能力之后,就應(yīng)當(dāng)有看到未知技術(shù)逆推具體實(shí)現(xiàn)的能力。比如hibernate,它的功能是什么?核心在于“實(shí)現(xiàn)持久層和數(shù)據(jù)層的同步”,也就是 說(shuō),數(shù)據(jù)表和JavaBean\POJO的映射。那么,我們來(lái)思考,假如從來(lái)不存在hibernate類似的ORM框架,要如何實(shí)現(xiàn)這個(gè)功能呢?
首先,我們要有和數(shù)據(jù)庫(kù)溝通的工具和配置,java可以選用jdbc,數(shù)據(jù)庫(kù)相關(guān)配置可以使用xml、json、bean任意方式。我們也可以看到,hibernate底層就是jdbc,也有Configuration這個(gè)配置入口。
然后要有種配置方式讓數(shù)據(jù)表和Bean達(dá)成統(tǒng)一。為什 么?因?yàn)樗鼈兊男畔⒘坎灰恢?#xff0c;包含的信息是相交的關(guān)系,比如,它們都有類似的數(shù)據(jù)類型(varchar->String),又有互不相融的內(nèi)容(索 引和約束),得出結(jié)論,我們需要一個(gè)映射工具,來(lái)使相交的部分匹配,并且補(bǔ)充缺失的內(nèi)容。于是,我們可以推論出,hibernate一定有個(gè)映射工具 (xml和annotation)。
再后,為了適應(yīng)多種不同的數(shù)據(jù)庫(kù),每一條語(yǔ)句可能都有不同的表達(dá),比如Oracle有Number(*,*)這個(gè)類型,對(duì)于mysql就不適用,我們需要設(shè)計(jì)一個(gè)數(shù)據(jù)庫(kù)的適配器。在hibernate里,這個(gè)部分叫做方言,Dialect。
經(jīng)過(guò)這樣的分析過(guò)程,不管是實(shí)現(xiàn)新的需求,還是分析未知的框架,都具備了理論上的基礎(chǔ)。
就我個(gè)人的見(jiàn)解,達(dá)到這個(gè)階段的程序員,才能稱之為合格。
?
小結(jié)
道理說(shuō)多了,來(lái)嘗嘗雞湯。
沒(méi)有人有義務(wù)幫助你。
樂(lè)于助人的老鳥(niǎo)只會(huì)幫助有價(jià)值的新手,不求反哺,至少要有成就感,是吧?
本就該在大學(xué)搞定的內(nèi)容,為什么要?jiǎng)e人花費(fèi)自己的青春和公司的人工來(lái)為你補(bǔ)習(xí)?
基礎(chǔ)是看上去艱澀玄乎,卻是能應(yīng)用在工作里的東西,切勿忽視。我有個(gè)高中老師常把一句話掛在嘴邊“現(xiàn)在你記住就好,以后你會(huì)懂。”有時(shí)候我想,要是那時(shí)候聽(tīng)了這話,該多好。
?
轉(zhuǎn)載于:https://www.cnblogs.com/zhao1949/p/5613078.html
總結(jié)
以上是生活随笔為你收集整理的基础知识漫谈(1): 想到哪儿写到哪儿的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: VMWare虚拟机下为Ubuntu 12
- 下一篇: 公务员在哪个银行贷款利率最低