神奇的7+/-2法則:在沒有充分理由的情況下不要讓程式設計師的大腦超載 - javiercasas
心理學中有一篇很古老但非常重要的論文:喬治·米勒的著作《神奇的數字 7 +/- 2;我們資訊加工能力的侷限》,它測量了大腦處理資訊的極限,並給出一個數字:人腦中可以同時晃動5到9個概念。在不得重複練習的情形下(如看電視字幕),在短時記憶內,一般人平均只能記下 7 個專案(如 7 位數字、7 個地名),是故從電話簿上查到電話號碼後,待要撥號時往往會不復記憶;短時記憶的量雖不能增加,但此 7 個事項的性質則可經由心理運作使之擴大。
他的主要觀點之一就是資訊編碼的概念。他認為編碼最簡單的方式是將輸入資訊歸類,然後加以命名,最後儲存的是這個命名而非輸入資訊本身。編碼是一個主動的轉換過程,對經驗並非嚴格地匹配,因此編碼以及之後的解碼往往會導致錯誤發生。
對於我們這些軟體開發人員來說,有兩個對我們來說非常重要的含義:
- 簡單的構造(模型,實現,設計,模式......)更好,因為它們需要較少的概念來描述它們。
- 構造良好的抽象具有非常少的特殊規則並且沒有驚喜地構成更好,因為它們需要較少的概念來描述它們。
反面例子:Abstract Factory pattern抽象工廠的定義:
A Factory that is Abstractwhich implements a createProductAmethod that uses new to <<construct>>a ProductA1 that has a ProductA<<interface>>.
一個工廠是一個抽象, 它實現了一個createProductA方法,這個方法使用使用ProductA介面構造new一個的ProductA。
這個定義中涉及概念:
- AbstractFactory介面
- <<creates>>動作
- Factory1(or ConcreteFactory)
- ProductA 和ProductB介面
- ProductA1和ProductB1類
- new關鍵字
- 抽象工廠圖
- 工廠序列圖
簡單的構造
正如霍爾所說:
構建軟體設計有兩種方法:一種方法是使其變得如此簡單以至於顯然沒有缺陷,另一種方法是使其變得如此複雜以至於沒有明顯的缺陷。 |
不幸的是,他還補充道:
第一種方法要困難得多。 |
在軟體開發中,新增另一個模組,另一個類,越來越多的程式碼非常容易。另一方面,製作儘可能簡單的東西實際上非常困難。它需要尋找潛在的模式和行為,並要求消除不適合的東西。但是,最終,它會更好,因為它允許您使用較少的概念和較少的智力來描述它,這意味著您可以專注於更大的整體而不是細節。
對於抽象工廠只需要兩句描述:
兩個操作:
- 首先從介面ProductA獲取物件
- 然後從介面ProductB獲取物件
程式碼如下:
AbstractFactory myFactory = new Factory1(); ProductA myProduct = myFactory.createProductA(); AbstractFactory somethingDifferent = new SomethingDifferentFactory(); SomethingDifferent result = somethingDifferent.fabricate(myProduct); return result |
良好的組合性
當你具有良好的組合性時,你只需將這些部分連線起來構建一個整體,而不必擔心這些部分會以意想不到的方式在它們之間相互作用。(banq注參考構造定律)
整體是各部分的精確總和,僅此而已。
不幸的是,很難檢測到良好組合性的語義,因為我們的開發人員習慣於那些不構成的東西,我們只是不知道組合良好的東西的“形狀”。(banq注:這個形狀是整體與部分的組合性)
我們已經看到了AbstractFactory如何通過破壞冒犯“神祕的7法則”。這就是為什麼程式設計很難的原因之一:因為我們自己認為程式設計很難(簡單事情複雜化)。
相關文章
- 這些神奇又搞笑的bug,真的讓程式設計師萬萬沒想到!程式設計師
- 谷歌CEO:沒有這項能力,再牛的程式設計師也不要!谷歌程式設計師
- 開始使用 Org 模式吧,在沒有 Emacs 的情況下模式Mac
- JPA EntityManager 在沒有實體類的情況下返回Map
- 不應該在沒有 sudo 的情況下執行 Docker 的原因Docker
- 沒有共情能力的程式設計師不是好產品經理程式設計師
- Nature回應:為什麼在沒有程式碼的情況下發布AlphaFold3?
- 圖片無法載入的情況下的優化優化
- 在沒有開啟審計的情況下定位Oracle錯誤的登入Oracle
- 論跟程式設計師談話的技巧:千萬不要跟程式設計師說,你的程式碼有bug程式設計師
- 千萬不要相信程式設計師在加班時間寫的程式碼!程式設計師
- 關於程式設計師的段子,有沒有get到你的點?程式設計師
- 以前的程式設計師,現在的程式設計師程式設計師
- 讓程式設計師不再苦逼的神器(下)程式設計師
- 如果今天沒有API介面,今天的程式設計師如何程式設計?API程式設計師
- 曾經有個能幫我修電腦的程式設計師,我沒有好好珍惜……程式設計師
- 做個清醒的程式設計師之要不要做程式設計師程式設計師
- @Java web程式設計師,在保留現場,服務不重啟的情況下,執行我們的除錯程式碼(JSP 方式)JavaWeb程式設計師除錯JS
- 在沒有curl和wget情況下傳送HTTP請求wgetHTTP
- 都是血淚,程式設計師傍身的生存法則(上)程式設計師
- 程式設計師永遠不要再犯的5個程式設計bug程式設計師
- 在不影響程式使用的情況下新增shellcode
- 作為程式設計師,有沒有讓你感到既無語又崩潰的程式碼註釋?程式設計師
- 框架下載後解壓失敗,有沒有遇到同樣情況的?框架
- 程式設計貓:05後程式設計學習情況掃描報告(附下載)程式設計
- 令人羨慕的法國程式設計師,沒有“996”, 40歲的時候最值錢!程式設計師996
- 有哪些讓程式設計師受益終生的建議程式設計師
- 如何讓程式設計師變得沒朋友程式設計師
- 程式設計師單身真的是有理由的嗎?程式設計師
- 在沒有本地安裝的情況下在 Postman 上測試您的端點Postman
- 誰說程式設計師沒有520?學學高階程式設計師都是怎麼表白的……程式設計師
- SpringBoo2 在使用WebFlux的情況下的後端國際化SpringWebUX後端
- @Spring Boot程式設計師,我們一起給程式開個後門吧:讓你在保留現場,服務不重啟的情況下,執行我們的除錯程式碼Spring Boot程式設計師除錯
- @Java Web 程式設計師,我們一起給程式開個後門吧:讓你在保留現場,服務不重啟的情況下,執行我們的除錯程式碼JavaWeb程式設計師除錯
- 記:那一個臭不要臉的程式設計師程式設計師
- 程式設計師只配加班?有錢有閒的程式設計師都在哪?程式設計師
- 程式設計師到底有沒有必要考研程式設計師
- 程式設計師到底有沒有女朋友?程式設計師