6. 軟件工程背后的思想是如何影響編程的

- 引入:軟件系統(tǒng)的特點在于其的復(fù)雜性,這里的復(fù)雜性并不是說軟件開發(fā)和解決問題的難度,而是一種內(nèi)在的屬性,對著系統(tǒng)規(guī)模的增加,想要達成相同程度效能的增加,需要追加的投入是冪律增加的。
- 不像其他工程領(lǐng)域的管理,一個人花一個月完成的項目,想要縮短到半月,只需要在加一個人就行了,但軟件領(lǐng)域卻不是這樣,越多的人反而可能會帶來更多的問題。
- 并且這種復(fù)雜性是無法解決的;“軟件工程沒有銀彈”。
- 擴展 《人月神話》
- 為什么軟件工程如此復(fù)雜?根源在于三重耦合 人與人 功能與功能 過去與未來
- 人與人的耦合,溝通成本冪率增加。軟件世界中所有都是人造的,所以當出問題之后,比如調(diào)用接口出問題,就需要去確定是接口方的問題還是自己的問題,首先就要去進行溝通(扯皮)。
- 比較:而物理世界中的工程師則不一樣,當出問題的時候,都要先反省是否是自己的問題,而不會去懷疑物理定律。
- 過去與未來的耦合。軟件開發(fā)極強的路徑依賴問題,迭代 版本號 向下兼容 這是只有軟件開發(fā)領(lǐng)域才有的事情(硬件也會出現(xiàn),比如芯片)
- 擴展《程序者窘境》
- 功能與功能的耦合。軟件工程中,如何去切割和劃分子系統(tǒng),也是人要考慮的,而人去開發(fā)開發(fā)/設(shè)計不好就會導(dǎo)致大量的耦合。
- 比較:而真實世界中很多事情則天然已經(jīng)有了模塊和層次的劃分,并且耦合較小,比如原子分子蛋白質(zhì)
- 這三重耦合還都不是孤立的,它們互相之間也會有影響,也會有耦合,最后呈現(xiàn)出來就是一個異常復(fù)雜的創(chuàng)造活動。

- 如何解決呢?解耦(解決復(fù)雜性問題的通用手段)
- 解決復(fù)雜性問題的通用手段:解耦。但是解耦也是有成本的。解耦的本質(zhì)在于在不損功能性的前提下,用性能去交換更低的復(fù)雜度?。更高的開發(fā)效率和更高的性能兩者必須取舍,找到平衡點。軟件工程就是要培養(yǎng)這種取舍與找平衡點的能力。(交通網(wǎng)案例)
- 如何解耦?解耦的三種工具(三個維度)
- 模塊化:比如函數(shù)/包的封裝(設(shè)計到變量作用域),微服務(wù)也算。指導(dǎo)思想(高內(nèi)聚,低耦合),第一要考慮的是如何模塊功能單一,功能和功能之間進行解耦,是技術(shù)驅(qū)動的
- 分層化:比如操作系統(tǒng),三層架構(gòu),TCP/IP協(xié)議,前后端,瀑布開發(fā)模型。分層化的第一優(yōu)先級是每層功能的完備性,重點是對每層的需求分析和了解,驅(qū)動分層的不是技術(shù)更可能是業(yè)務(wù),將需求到實現(xiàn)的過程進行解耦,使得開發(fā)人員只需要了解這一層的結(jié)構(gòu)。也相當于是人與人之間進行解耦
- 模式化:設(shè)計模式(23種、MVC),編程語言基本范式(面向?qū)ο?,過程式,函數(shù)式),編程原則(solid,crud),歷史和未來之間進行解耦。由高手總結(jié)出來的一些套路,新手能做的只是可以把功能實現(xiàn)出來,而是讓代碼質(zhì)量更高,耦合更小,面對不確定的未來,可以更少的修改,更少的產(chǎn)生bug,就需要用這些模式套路進行兜底了。
- 編程范式,之前有課
- 缺點舉例:每種解耦方式也是有代價的。模塊化需要犧牲性能,分層化需要花精力熟悉業(yè)務(wù),模塊化則會產(chǎn)生路徑依賴。
- 軟件工程的三個方向(對稱破缺)
- 領(lǐng)域驅(qū)動設(shè)計:用業(yè)務(wù)領(lǐng)域驅(qū)動的設(shè)計,把穩(wěn)定不變的核心業(yè)務(wù)提取出來(中臺),例子 淘寶、京東、美團這樣的超大型的軟件系統(tǒng),就會使用領(lǐng)域驅(qū)動設(shè)計。
- 敏捷開發(fā):(瀑布模型的反動)小步快跑,及時反饋,快速試錯;為了適應(yīng)未來的變化,放棄了需求到實現(xiàn)的解耦,使得開發(fā)變得更高效。
- 開源:最成功的的項目Linux內(nèi)核。內(nèi)核這種開發(fā)是效率優(yōu)先,為此犧牲解耦,別說什么分層和模塊化了,只要能提高效率,用goto都在所不惜,用復(fù)雜性換性能;開源就是在用一整個生態(tài)系統(tǒng)的多樣性去對抗復(fù)雜性。
- 對稱破缺:從萬事皆有可能,變成咬定青山不放松
- 復(fù)雜性科學(xué)相關(guān):面對復(fù)雜性問題是,唯一的工具就是解耦,解耦是有代價的
-------------------------------------------------
這個視頻很好,已整合進了個人知識體系
???????
詳細 請看個人小站 http://wangc.site/cbrain/share?nodeid=8b5deebbab3c9a00
標簽: