軟件設計的真諦

假設我們身邊的一切都是用制造材料加以描述的:“空調”不是“空調”,而是“由金屬和塑料做成的物體”;“書”不是“書”,而是“由纖維和墨做成的物體”。溝通時我們也不用“空調”和“書”這樣的詞匯,而是“金屬和塑料做成的物體”和“纖維和墨做成的物體”。可以想象大腦在面對這些信息時會讓我們覺得多么的痛苦,顯然這樣的事情在現實中很少發生,因為我們的大腦具備很強的抽象能力 ,會通過抽象塑造“空調”和“書”這樣的概念提升溝通效率和維持思維次序。我們學習知識的過程其實就是不斷精確掌握(抽象)概念和建立思維次序的過程。

對于程序員來說除了生活在現實世界,還“身處”由程序所構建的虛擬世界中。程序設計其實是在個人頭腦中構建虛擬世界的過程,而維護代碼則首先是通過程序所表達的虛擬世界與其他程序員間接溝通的過程。為了提高程序員間的間接溝通效率,我們一定希望虛擬世界也象現實世界那樣充滿著象“空調”和“書”這樣的概念,也希望程序員們在虛擬世界所使用的概念相似。由于現實世界中程序員們已掌握了大量的相似概念,如果能將這些概念帶入虛擬世界,那將顯著提升程序員間通過虛擬世界(即程序)溝通的效率。因此,作者認為軟件設計的真諦,是通過程序構建與現實世界相似的虛擬世界。通常,設計質量越高就越能在虛擬世界中找到現實世界的影子。

軟件設計活動的關鍵又是什么呢?還是讓我們回到現實世界去尋找答案吧!

在遠古時期,人類只能通過徒步從一個地方到達另一個地方。后來發現馬可以被馴服,通過馬車能更快地從一處到達另一處。再后來,人類逐步發明了自行車、汽車和飛機,且每一次發明都使得交通效率得以大幅提高。在這里,馬車、自行車、汽車和飛機都共同地為了解決交通效率問題。很顯然,馬車、自行車、汽車和飛機都是不同的概念,人類通過抽象發明這些概念,并通過相互學習的方式使得大家掌握其含義。如果將焦點放在交通工具上,我們會發現交通效率越高則其概念越抽象,復雜度也越高。或者說,越是抽象的概念,其所隱藏的復雜度就越高。

從這個關于交通的例子中我們不難發現,現實世界中我們是通過轉移復雜度的方式解決復雜問題的,且每一次不同的轉移都伴隨著抽象概念的建立,轉移的復雜度越多所建立的概念就越抽象。由于復雜度被轉移了后,使得一小部分人專注于被轉移的復雜度(比如制造飛機),而其他絕大部分人在享用復雜度被轉移所帶來好處的同時不用關心被轉移走的復雜度(乘飛機的人不用關心飛機的駕駛與制造)。同樣的事情也發生在軟件行業!不同的是軟件行業“制造”的不是汽車和飛機,而是編程語言、數據庫、平臺和框架等。

不難發現,軟件設計的關鍵活動應是抽象,通過抽象建立新的概念并將部分復雜度轉移到概念背后。盡管不斷的抽象增加了新概念的復雜度,但也簡化了所需解決問題的復雜度。顯然,好的設計應是其所簡化的復雜度要大于因為抽象所創造的復雜度。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449876.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449876.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449876.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

脫單特質

1.上進心 所有人都想過好日子,物質不行,一定要有上進心,可以做出未來給予 2.外在形象 注重打理外在形象,所有人都是愛美的 3.無法控制自己,同時不去了解女生 控制住自己,才有更多的時間去了解和思考女…

云棲社區云棲號(團隊博客)攻略【2018版】

云棲社區云棲號是什么? 這是一個為技術團隊打造的專區(小站),團隊成員的技術文章將在這里匯總,可以幫助團隊沉淀優質技術內容、打造技術品牌和影響力等。 云棲號申請條件 點擊https://yq.aliyun.com/teams頁面右側的【…

1030 完美數列 (25 分)二分

1030 完美數列 (25 分)給定一個正整數數列,和正整數 p,設這個數列中的最大值是 M,最小值是 m,如果 M≤mp,則稱這個數列是完美數列。 現在給定參數 p 和一些正整數,請你從中選擇盡可能…

兩性位置

男生不被女生當回事,在自己身上,需要從自身找原因 1.過度看重對方,會讓對方看輕自己 2。氣場比較弱,本身實力弱,會讓對方俯視自己 3.太過善良,一昧遷就,會導致自己失去生活重心,讓…

高質高效軟件開發組織能力模型

背景至今,我在Motorola網絡部工作超過了5年,所在的產品線也是采用統一軟件開發過程和敏捷思想(但不是SCRUM)來組織軟件開發活動的,但這5年多的工作經歷從未引起我象微博上對于SCRUM話題的激烈討論這樣的思考。原因之一可能是,公司…

python并發編程之多線程

多線程 線程 1.什么是線程 進程是一個執行空間 , 線程就是其中真正工作的單位 , 每一個進程至少有一個線程(如果我們把操作系統比喻為一個工廠 , 進程就是車間 , 線程就是流水線) 進程包含了運行該程序所需要所有資源 , 進程是一個資源單位 , 線程是CPU的最小執行單位 每一個進…

JavaScript幾個難點

1. 立即執行函數 立即執行函數,即Immediately Invoked Function Expression (IIFE),正如它的名字,就是創建函數的同時立即執行。它沒有綁定任何事件,也無需等待任何異步操作: (function() { // 代碼 // ...})(); f…

真格量化學習

真格量化學習使用 期權的量化回測 引入必須的庫: from PoboAPI import * import datetime import time import numpy as np初始化參數設定 以50為例 def OnStart(context) :print("I\m starting...")#設定一個全局變量品種,本策略交易50ETF期權g

智能小程序檔案館——如何給“包”瘦身

上傳小程序代碼的時候包體積太大不知如何是好?小程序打開速度慢,流量耗費大不知如何優化?在今天的文章里,我們一起來討論一下如何給“包”瘦身。 為什么要限制包的大小? 我們都知道小程序作為一種 Hybrid 的解決方案&a…

軟件架構師的能力與特質

軟件開發工程師的職業發展無非兩大類:一是做“官”,從事管理工作;二則繼續從事技術工作。對于后者,軟件架構師(software architect)是很多軟件開發工程師追求的理想崗位。在這我想談一談軟件架構師所需的幾…

IntelliJ IDEA編碼設置

見:https://www.cnblogs.com/winner-0715/p/6364306.html項目中為了避免亂碼等問題應該使用UTF-8編碼方式,其實把編碼方式設置成UTF-8是創建完項目后就要做的事,按照如圖所示進行設置:這里要將Transparent native-to-ascii conversion選項勾選, 否則項目…

C#實現像微信PC版一樣的掃碼登錄功能

現在好些網站都支持掃碼登錄,感覺上安全了很多,但是本地程序掃碼登錄的不多,就用C#實現了一下,需要作如下準備 在官網上申請一個企業微信,有條件的話做個企業認證吧,我們的是認證過的,所以賬號和本地其他系統的賬號是統一的.在應用中創建一個應用,這個是關鍵,我們掃碼就是和它有…

JVM(一)史上最佳入門指南

2019獨角獸企業重金招聘Python工程師標準>>> 提到Java虛擬機(JVM),可能大部分人的第一印象是“難”,但當讓我們真正走入“JVM世界”的時候,會發現其實問題并不像我們想象中的那么復雜。唯一真正令我們恐懼的…

如何成為一個技術“牛人”

今天給浙江大學過來的幾個還沒有畢業的研究生做面試,這些研究生是想來公司實習的。在面試的過程中,一個學生問我“我們有C/C、JAVA等等多種語言,我如何才能成為某一方面的一個技術牛人呢?這一問題一直困擾著我”,對于這…

python量化數據處理小細節(以后還會不斷補充)

使用tushare數據源獲取數據后處理 以下都是本人在獲得數據后,進行量化回測時,處理數據遇到的各種坑以及解決方案,有些甚至都很幼稚,切勿嘲笑 獲取數據 導包 import tushare as ts import pandas as pd import matplotlib #(ju…

Linux find和grep的區別

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 grep是查找文件中匹配條件的行,find是搜索匹配條件的文件。 1.find:查找文件或目錄語法: find 查找位置 文件名或目錄名如:在…

Mysql 忘記密碼重置教程

https://jingyan.baidu.com/article/454316ab4e9e65f7a7c03ad1.html 百度經驗轉載于:https://www.cnblogs.com/leaf-cq/p/10410694.html

067:【Django數據庫】ORM查詢條件詳解-range

【Django數據庫】ORM查詢條件詳解-range range:判斷某個 field 的值是否在給定的區間中。示例代碼如下: # views.py文件內容:from datetime import datetime from django.utils.timezone import make_awaredef index(request):start_time ma…

貼吧爬蟲

import requests import re#根據url獲取網頁html內容 def getHtmlContent(url):page requests.get(url)return page.texthtml getHtmlContent(https://tieba.baidu.com/p/4840106397)#以html中使用re模塊解析出所有jpg圖片的url #百度貼吧html中jpg圖片的url格式:…

別把自己變成了“二等公民”

上周參加一個代碼審查會,在會上發現了設計上的一個很嚴重的錯誤。于是,我提了好幾個問題,想知道為什么會出現這一錯誤。但是,我的同事告訴我這都是印度團隊做的設計。需要提供的一個背景信息是,這個項目是我所在的研發…