任何一項(xiàng)新技術(shù)在誕生之初都是粗糙的揍很,比如從萊特兄弟的飛機(jī)上你幾乎看不到現(xiàn)代飛機(jī)的影子雷则,暴露的駕駛辆雾、簡陋的蒙皮,除了樣子有些類似外月劈,你很難再找到他們的共同點(diǎn)度迂。粗糙的1.0版本并不妨礙技術(shù)的發(fā)展,技術(shù)的推動者會持續(xù)地?cái)[弄這個(gè)新事物猜揪,制造新配件英岭、試驗(yàn)新材料、發(fā)展理論和解決問題湿右,一點(diǎn)點(diǎn)推動新技術(shù)向著成熟發(fā)展诅妹。
總結(jié)技術(shù)發(fā)展的機(jī)制,一般有兩種毅人,分別是內(nèi)部替換(internal replacement)和結(jié)構(gòu)深化(structural deepening)吭狡。內(nèi)部替換是指用更好的部件(子技術(shù))更換某一形成阻礙的部件。結(jié)構(gòu)深化是指尋找更好的部件丈莺、材料或者加入新組件划煮。一旦技術(shù)踏上這條道路,就會出現(xiàn)技術(shù)的不同版本缔俄,因?yàn)閮?nèi)部替換與結(jié)構(gòu)深化并沒有規(guī)定具體的變化路徑弛秋,相反它給出了各種各樣的可能性。這時(shí)達(dá)爾文理論中的變異和選擇就能在技術(shù)這個(gè)領(lǐng)域內(nèi)發(fā)揮作用了俐载,通過選擇更好的方案來解決其內(nèi)部設(shè)計(jì)問題蟹略,技術(shù)的不同版本將逐步得到改善。
當(dāng)一項(xiàng)技術(shù)涉及了商業(yè)或軍事的議題遏佣,總會有人來逼迫技術(shù)給予更多功能挖炬,技術(shù)人員就不得不去尋找更好的組件、更優(yōu)化的結(jié)構(gòu)状婶,不斷進(jìn)行組件間的調(diào)整和平衡意敛,這就是內(nèi)部替換。因此我們會看到技術(shù)會隨著發(fā)展而變得越加復(fù)雜膛虫。技術(shù)人員可以去尋求新的更好的部件或更好的材料去克服技術(shù)障礙草姻,也可以通過加入新的零部件或是添加零件系統(tǒng)來消除障礙,這樣舊的部分就被保留下來稍刀,新的部分加入進(jìn)來輔助舊部分完成工作撩独,這就是結(jié)構(gòu)深化,這種做法在我們的日常工作中更加常見,比如某個(gè)部件發(fā)熱嚴(yán)重跌榔,我們通常的做法不是更換這個(gè)部件而是為它安裝一套冷卻系統(tǒng)异雁。為了突破局限而不斷加入次級系統(tǒng),技術(shù)因此發(fā)展得越來越精致僧须。技術(shù)結(jié)構(gòu)就是這樣不斷被”加深“從而變成了重重疊疊的復(fù)合體纲刀。
這樣方式方法在軟件系統(tǒng)中也隨處可見,我們在考慮和設(shè)計(jì)軟件架構(gòu)時(shí)總會主動地增加次級系統(tǒng)或次級模塊來完成下面的目的:
- 加強(qiáng)基本性能——功能性
- 對改變或異常進(jìn)行監(jiān)視并作出反應(yīng)——異常處理
- 適應(yīng)更廣泛的任務(wù)范圍——可擴(kuò)展
- 增強(qiáng)安全性和可靠性——安全性担平、可靠性
一個(gè)成熟可商用的軟件系統(tǒng)就是這樣一步步地構(gòu)建起來示绊,替換舊組件、增加新模塊/系統(tǒng)總是不停地在發(fā)生暂论,而在軟件系統(tǒng)中我們也有一句類似的至理名言——“計(jì)算機(jī)科學(xué)中的所有問題都可以通過引入一個(gè)間接層解決”面褐。不難看出,技術(shù)的發(fā)展深深依賴于結(jié)構(gòu)的深化取胎。
個(gè)體技術(shù)的形成和發(fā)展的理論是否也同樣適用于技術(shù)體呢展哭?或者說我們通過簡單的加和就能獲得新的技術(shù)體了呢?對于這個(gè)問題闻蛀,作者的回答是域?qū)嶋H上并不是單個(gè)技術(shù)的加和匪傍,他們是連貫的整體,是關(guān)于設(shè)備觉痛、方法役衡、實(shí)踐的族群,它們的形成和發(fā)展具有個(gè)體技術(shù)不同的特征薪棒。技術(shù)體不是被發(fā)明出來的手蝎,而是類似于一種結(jié)晶的過程,可能通過跨度幾年甚至幾十年發(fā)展才能獲得俐芯。比如棵介,數(shù)字技術(shù)出現(xiàn)與上世紀(jì)40年代泼各,但直到現(xiàn)在它仍然在發(fā)展鞍时。那么域是如何進(jìn)化的呢?
域的形成有兩種模式:一是圍繞核心技術(shù)聯(lián)合而成的扣蜻,比如計(jì)算機(jī)自誕生起,它的相關(guān)技術(shù)如存儲系統(tǒng)及塘、程序語言莽使、外部設(shè)備就不斷地圍繞它聚集;一是從一個(gè)現(xiàn)象簇中建構(gòu)起來的笙僚,比如大家中學(xué)學(xué)過的電子芳肌、電磁波理論逐步地演化成電學(xué)、電氣學(xué)、無線電學(xué)等亿笤。由此作者提出了一個(gè)有趣的域生命周期:
- 誕生翎迁,解決母域中的特定問題,在理解和實(shí)踐中固話净薛、發(fā)展
- 青春期汪榔,解決發(fā)展中的阻礙,產(chǎn)生可行的技術(shù)并應(yīng)用于市場
- 成熟期肃拜,市場由狂熱走向冷靜痴腌,新的域以自己的方式深入地影響經(jīng)濟(jì),進(jìn)入穩(wěn)定成長階段
- 晚年燃领,鮮有重要理念產(chǎn)生士聪,有些域會被取代,但大多數(shù)還得以存在并服務(wù)于人類
這樣例子在我們的身邊數(shù)不勝數(shù)猛蔽,比如今天在前端開發(fā)領(lǐng)域絕對主流的JavaScript剥悟,它在誕生時(shí)只是Netscape公司需要讓網(wǎng)頁上的元素動起來,讓JavaScript 真正第一次得到重視是 Ajax 這門技術(shù)曼库。Ajax 的出現(xiàn)讓頁面的元素可以與遠(yuǎn)程的服務(wù)器進(jìn)行交互区岗,使得JavaScript開始變成了一門值得研究的技術(shù),前端的表現(xiàn)力得到了大幅度的提升凉泄。Node.js讓JavaScript轉(zhuǎn)正成一門正式的開發(fā)語言躏尉,其中的關(guān)鍵就在于V8 這個(gè)JavaScript 引擎,它的重點(diǎn)解決了JavaScript 執(zhí)行慢的問題后众。當(dāng)NPM 這個(gè)包管理器登場胀糜,從而降低了眾多開發(fā)者參與的門檻時(shí),JavaScript 終于迎來了屬于自己的爆發(fā)蒂誉,各種各樣的程序庫讓人眼花繚亂教藻。前端開發(fā)也由少數(shù)人的愛好,成為了一個(gè)專屬的職位右锨,像 React括堤、Angular、Vue 等框架的出現(xiàn)绍移,更是讓前端開發(fā)有了工程的味道悄窃。
接下來作者回到他經(jīng)濟(jì)學(xué)者的身份轧抗,討論技術(shù)體出現(xiàn)并發(fā)展時(shí)對經(jīng)濟(jì)有什么影響。一項(xiàng)新技術(shù)的到來會引起經(jīng)濟(jì)中的價(jià)格和生產(chǎn)網(wǎng)絡(luò)在各行各業(yè)伸展瞬测、重塑横媚,技術(shù)體也有類似的效果也會引起經(jīng)濟(jì)模式的擴(kuò)展性調(diào)整纠炮。已有產(chǎn)業(yè)去適應(yīng)新的技術(shù)體,從中提取灯蝴、選擇它們所需要的內(nèi)容恢口,并將其中部分零部件和新領(lǐng)域中的部分零件組合起來,有時(shí)還會創(chuàng)造次生產(chǎn)業(yè)穷躁,這就是經(jīng)濟(jì)的重新域定耕肩。回顧人類歷史折砸,每個(gè)時(shí)代的經(jīng)濟(jì)都會隨著新的技術(shù)體的到來而重塑看疗,如鐵路、電氣化睦授、大規(guī)模生產(chǎn)两芳、信息技術(shù)等滲透到經(jīng)濟(jì)當(dāng)中時(shí),舊結(jié)構(gòu)可能崩潰去枷,新結(jié)構(gòu)便取代了它的位置怖辆,新的產(chǎn)業(yè)替代舊產(chǎn)業(yè)。
域和經(jīng)濟(jì)共變和共創(chuàng)過程删顶,稱為“顛覆性改變”竖螃。
這也就是我們時(shí)常聽到的一個(gè)詞——產(chǎn)業(yè)升級。
作者在前面幾章談了那么多的標(biāo)準(zhǔn)工程逗余、結(jié)構(gòu)深化特咆、顛覆性改變與重新域定,實(shí)際上完整地闡述了一個(gè)更宏大的話題——?jiǎng)?chuàng)新录粱。創(chuàng)新存在于新的解決方案轉(zhuǎn)變?yōu)闃?biāo)準(zhǔn)工程的過程中腻格;創(chuàng)新存在于由發(fā)明引發(fā)的根本性新技術(shù)產(chǎn)生的過程中;創(chuàng)新存在于這些新技術(shù)在改變內(nèi)部組件或者結(jié)構(gòu)深化時(shí)啥繁,通過增加組件而獲得發(fā)展的過程中歐給你菜职;創(chuàng)新還存在于技術(shù)體從出現(xiàn)到隨時(shí)間而發(fā)展并改變與之遭遇的產(chǎn)業(yè)過程中。我們總是不斷在現(xiàn)有的工具箱中的零部件或?qū)嵺`去發(fā)現(xiàn)或組合新的解決方案旗闽;或者如何不斷將實(shí)踐過程與新的工具酬核、新的技術(shù)體、新的域組合起來适室,這些活動貫穿在所有的經(jīng)濟(jì)活動之中嫡意。
這兩個(gè)章節(jié)給予的啟示是在于結(jié)構(gòu)深化的理解和應(yīng)用,其實(shí)相比更換新的技術(shù)組件這種“內(nèi)部替換”捣辆,研發(fā)團(tuán)隊(duì)更加傾向與新增組件來完善已有功能鹅很,因?yàn)樾碌募夹g(shù)組件的更替有時(shí)不容易把控還需要付出學(xué)習(xí)成本,通常團(tuán)隊(duì)只有在沒有辦法的情況下去追求更新技術(shù)組件罪帖,在做這種選擇時(shí)團(tuán)隊(duì)需要承受相應(yīng)的風(fēng)險(xiǎn)促煮。而新增組件來完善功能則是一種非常通用與有效的方法,這不單單是在軟件領(lǐng)域在其他工程領(lǐng)域也是這樣整袁。因此不能簡單地把新增組件這樣一個(gè)活動看作是是一個(gè)修修補(bǔ)補(bǔ)的方案菠齿,相反要看作一個(gè)關(guān)鍵的活動加以重視,因?yàn)橥ㄟ^“結(jié)構(gòu)深化”我們不僅能解決原有障礙坐昙,還能增加整個(gè)系統(tǒng)的可靠性與穩(wěn)定性绳匀,它對于推動我們內(nèi)部技術(shù)的發(fā)展和演進(jìn)具有非常重要的作用。