神奇的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,真的讓程式設計師萬萬沒想到!程式設計師
- 超載的程式設計師程式設計師
- 程式設計師的生存法則程式設計師
- JPA EntityManager 在沒有實體類的情況下返回Map
- 開始使用 Org 模式吧,在沒有 Emacs 的情況下模式Mac
- 不應該在沒有 sudo 的情況下執行 Docker 的原因Docker
- 神奇的程式設計師—王小波程式設計師
- 谷歌CEO:沒有這項能力,再牛的程式設計師也不要!谷歌程式設計師
- (轉)程式設計師的生存法則程式設計師
- 不要讓其他程式設計師修補自己的BUG程式設計師
- 如何讓你的程式設計師不要厭倦工作?程式設計師
- 請不要讓程式設計師在黑暗中摸索程式設計師
- 程式設計師修bug時的真實情況程式設計師
- 目前程式設計師的5中情況程式設計師
- 南京有沒有招golang程式設計師的Golang程式設計師
- 沒有共情能力的程式設計師不是好產品經理程式設計師
- Nature回應:為什麼在沒有程式碼的情況下發布AlphaFold3?
- 圖片無法載入的情況下的優化優化
- 在沒有開啟審計的情況下定位Oracle錯誤的登入Oracle
- 程式設計師眼裡的 PM 有兩種:有腦子的和沒腦子的。後者佔 90%程式設計師
- 沒有備份的情況下處理undo損壞
- 程式設計師必看之學習設計的5大理由程式設計師
- 什麼情況讓程式設計師處於水深火熱中程式設計師
- Windows 98 在沒有註冊的情況下對系統進行更新(轉)Windows
- 程式設計沒有捷徑:奇葩冒牌程式設計師的故事程式設計師
- 不要相信程式設計師在加班時間寫的程式碼程式設計師
- 10個理由讓你愛上程式設計師程式設計師
- 程式設計師的“黑客情懷”和“設計師情懷”程式設計師黑客
- 程式設計師的情書程式設計師
- 程式設計師的愛情程式設計師
- 如何在沒有前端框架的情況下實現元件化前端框架元件化
- 論跟程式設計師談話的技巧:千萬不要跟程式設計師說,你的程式碼有bug程式設計師
- 關於程式設計師的段子,有沒有get到你的點?程式設計師
- 資料庫在沒有備份的情況下的資料檔案損壞的恢復資料庫
- 框架下載後解壓失敗,有沒有遇到同樣情況的?框架
- 誤刪資料檔案在沒有歸檔的情況下恢復實驗
- 程式設計師的燈下黑:不要忘記你的目標程式設計師