掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
張大胖學(xué)了Java語(yǔ)言,學(xué)了Web基礎(chǔ)知識(shí),又學(xué)了SpringBoot, MyBatis,Vue等框架, 他成了一個(gè)"全沾"程序員。

創(chuàng)新互聯(lián)建站專注于鄲城網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供鄲城營(yíng)銷型網(wǎng)站建設(shè),鄲城網(wǎng)站制作、鄲城網(wǎng)頁(yè)設(shè)計(jì)、鄲城網(wǎng)站官網(wǎng)定制、成都微信小程序服務(wù),打造鄲城網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供鄲城網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
[[334243]]
他覺(jué)得這樣也挺好,前后端通吃,可以在編碼的天地中自由地飛翔了。
可是他在網(wǎng)上、群里經(jīng)常聽到大家說(shuō)計(jì)算機(jī)基礎(chǔ)很重要,尤其以碼農(nóng)翻身為甚, 像什么:
勿以浮沙筑高臺(tái)
基礎(chǔ)不牢,地動(dòng)山搖
沉下去有多深,彈起來(lái)就有多高
......
張大胖不以為然嗤之以鼻,他認(rèn)為除了在面試時(shí)會(huì)用到計(jì)算機(jī)底層的基礎(chǔ)知識(shí),別的地方根本用不到,工作中主要是實(shí)現(xiàn)業(yè)務(wù),連個(gè)稍微復(fù)雜一點(diǎn)兒的算法都用不到。
他決定去請(qǐng)教一下軟件大師,問(wèn)問(wèn)到底是怎么回事。
張大胖:大師,我覺(jué)得現(xiàn)在的編程已經(jīng)變得非常輕松了,利用現(xiàn)有的框架和類庫(kù)開發(fā)軟件非常容易,高中生編程都沒(méi)有任何問(wèn)題。
大師:你覺(jué)得為什么會(huì)這樣?
張大胖:就是不用接觸底層的那些細(xì)節(jié)了,直接就可以面向業(yè)務(wù)開發(fā)了。
大師:你算是說(shuō)到點(diǎn)子上了,這就是抽象帶來(lái)的好處啊。
張大胖:抽象?我似乎聽說(shuō)過(guò)一句話,說(shuō)計(jì)算機(jī)行業(yè)的任何問(wèn)題,都可以通過(guò)一個(gè)抽象層來(lái)解決。
大師:是啊,就說(shuō)計(jì)算機(jī)編程語(yǔ)言吧,就是不斷抽象,逐漸遠(yuǎn)離計(jì)算機(jī)硬件的一個(gè)過(guò)程,想當(dāng)年我用匯編編程, 想在屏幕上輸出一個(gè)Hello World都累得要死,寫個(gè)大程序更是要累得吐血了。
張大胖:嗯,我現(xiàn)在用的就是最高層的Java,根本不用考慮什么匯編語(yǔ)言,機(jī)器語(yǔ)言,連指針都用不上!
大師:再比如說(shuō),Web編程,我用CGI那會(huì)兒真是痛不欲生。
張大胖:哈哈,我還是站在最高層。
大師:網(wǎng)絡(luò)編程也是如此。
張大胖:哈哈, 我只用HTTP,根本不管底層的東西。
大師:還有對(duì)數(shù)據(jù)的操作,也是一層層地抽象。
張大胖:大師,我發(fā)現(xiàn)我一直是站在巔峰啊!
大師:這有什么好得瑟的,你站得越高,越容易出現(xiàn)難以解決的抽象泄露的問(wèn)題。
張大胖:抽象的泄露?
大師:對(duì), 這是Stack Overflow的創(chuàng)始人Joel Spolsky提出來(lái)的一個(gè)理論:所有重大的抽象機(jī)制在某種程度上都是有泄露的!
張大胖: 不對(duì)吧! 這種分層的抽象,好處不就是每一層都可以屏蔽下層的變化嘛,我站在高層編程,根本不用理會(huì)底層, 為什么會(huì)泄露?
大師:我來(lái)給你舉幾個(gè)例子,你就明白了。外國(guó)有個(gè)程序員,她使用Ruby語(yǔ)言通過(guò)HTTP向本地的一個(gè)消息隊(duì)列發(fā)送消息, 這抽象層次很高吧! 但是每次發(fā)送消息都得耗費(fèi)40ms,這是不應(yīng)該的, 時(shí)間太長(zhǎng)了。 她查來(lái)查去,發(fā)現(xiàn)Ruby的類庫(kù)沒(méi)有設(shè)置TCP_NODELAY, 但是本地的HAProxy卻使用了TCP delayed acknowledgement,于是雙方互相等待,出現(xiàn)了延時(shí)。
張大胖:我聽不懂!
大師:你站在抽象的巔峰,這些TCP的細(xì)節(jié)怎么能聽懂呢?我給你舉個(gè)簡(jiǎn)單例子吧, 比如你用了Hibernate這個(gè)ORM工具,它是一個(gè)抽象層,隱藏了SQL, 但是當(dāng)出現(xiàn)Hibernate性能問(wèn)題的時(shí)候,你怎么辦?
張大胖:那我得去看Hibernate 是怎么把對(duì)象變成SQL語(yǔ)句的,然后慢慢調(diào)優(yōu)。
大師:對(duì)啊,你看Hibernate這個(gè)抽象層沒(méi)法完美地隱藏底層的信息,發(fā)生泄露了。 SQL 也是個(gè)抽象層,隱藏了讀數(shù)據(jù)庫(kù)表查詢處理的細(xì)節(jié),如果SQL語(yǔ)句出現(xiàn)性能問(wèn)題,你怎么辦?
張大胖:那...... 我只好去分析SQL的查詢計(jì)劃,如何利用索引,還得慢慢調(diào)優(yōu)。
大師:你看SQL這個(gè)看似完美的抽象層也泄露了不是?
張大胖:有道理,哎呀,這抽象層泄露的代價(jià)很高啊,我得學(xué)習(xí)這么多底層的東西。
大師:所以Joel Spolsky說(shuō)“抽象只能節(jié)省你的工作時(shí)間,不能節(jié)省你的學(xué)習(xí)時(shí)間”, 用高層的抽象來(lái)工作,會(huì)比較快,但是你還得學(xué)習(xí)底層的東西,那是跑不掉的。
張大胖:明白明白了,為了能繼續(xù)好好地搬磚,我得趕緊去學(xué)學(xué)計(jì)算機(jī)的底層基礎(chǔ)知識(shí)了。
(完)
如需轉(zhuǎn)載,請(qǐng)通過(guò)作者微信公眾號(hào)coderising獲取授權(quán)。

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流