軟件技術發展的驅動力

軟件產品的終極目標是為了實現用戶需求從而滿足人們的需要。也正是為了不斷滿足人們的需要使得軟件行業不斷向前發展。比如,新的算法(MPEG-1、MPEG-2、MPEG-4、H.264、……)等的出現都在當時為了滿足不同的需要而被發明。然而,人們的需要(行業發展的外部動力)卻并非是軟件技術發展的唯一驅動力,因為它無法解釋為什么業內的編程語言、軟件平臺與框架等會層出不窮,有的甚至給人“重新發明輪子”的感覺。如何判斷“新輪子”的確是必要的呢?這與本文想重點關注的另外三大驅動力有關,重點關注它們的原因源于其與我們的日常工作更加息息相關。

我認為,軟件技術發展的另外三大驅動力分別是簡化、復用和美化(行業發展的內部動力)。“新輪子”是否必要的關鍵,是看它在簡化、復用和美化這三個緯度上是否存在優于“老輪子”的內容。注意,這三大驅動力是站在程序員的角度去觀察的,而不是從軟件產品的最終用戶角度。因為最終用戶只關心產品的功能與使用體驗,而不關注產品的開發過程,更不關心產品是用“老輪子”抑或“新輪子”構建的。

簡化是應對日益復雜和規模龐大軟件的核心有效手段,因為“復雜的問題總是以簡單的方法解決的”(引自《大師亞當斯》)。簡化的關鍵不是“拍腦袋”做到哪是哪,而需運用我們的洞察力去找到解決問題的關鍵路徑、去繁求簡。然而,洞察力的獲得除了需要在某一技術方向上的長期積累外,更需要我們不斷堅持就所面臨的問題全神貫注地思考,洞察力也因此成為了行業的稀缺資源,也決定了真正能簡化軟件設計與實現的人少之又少。

簡化在業內有各種不同的表現形式,除了有方法論(比如,領域驅動開發、面向對象編程、設計模式和解耦),更有通過不同形式和程度的抽象(比如,C編程語言之于匯編語言、C++編程語言之于C編程語言、各種軟件平臺與框架)。有趣的是,這些表現形式在簡化的道路上自身卻帶來了更大的復雜度(復雜度是守恒的?)。

復用的好處相信眾人皆知,這使得我們因避免“重新造(相同的)輪子”而獲得更高的開發效率和更高質的產品。復用這一驅動力使得業內出現各種不同的開源軟件平臺與框架,也使得軟件企業長期致力于打造自有產品的通用軟件平臺與框架。對于復雜軟件來說,競品的背后實際上是軟件平臺與框架之爭。

復用的表現形式不只是構建軟件平臺與框架,還有各種編程語言的“語法糖”等。

簡單是一種美,但美不只在于簡單,更有軟件的內在結構與代碼的表現形式,美化因此也成為了驅動軟件技術發展的另一大動力。我認為軟件之美在于:1)對適應將來軟件功能變化而導致的代碼變更保持一定的彈性。這種適應能力其實是對軟件內在結構的合理性提出了要求。2)代碼能作為程序員間流暢溝通的載體與橋梁。這是對代碼的表現形式所提出的要求,也間接地指出編程的目的不只是提供API或實現軟件功能。美化工作的不到位是很多軟件開發團隊深陷質量困境的重要原因。

現實中,軟件技術的進步其實是簡化、復用和美化三大驅動力的綜合結果,因為三者間并非完全正交。比如,簡化的結果可能也實現了美化,美化的結果可能也帶來了簡化,復用又為我們帶來了簡化。無論如何,通常其中一個是作為技術發展的主導動機。



了解三大驅動力有助于我們更理性地看待軟件技術的發展,同時作者也想暗示,我們在軟件開發工作中應從簡化、復用和美化三方面著手,而不能停留在“軟件能用就行”這種“原始需求”上。否則,我們的行為就是不符合軟件技術發展的“潮流”哦!

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

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

相關文章

The Model Driven Software Network

國外的一個模型驅動軟件開發的討論社區,The Model Driven Software Network這個社區討論的都是模型驅動開發相關的話題,雖然建立不久,但加入的人越來越多,建立群組的是Mark Dalgarno以下是一些討論: Textual v Graphical models W…

無敵簡單快速的文件服務器sgfs

前言 想要構建一個Linux文件服務器?看看下面幾個要求是不是你想要的? 1、只需要單節點部署就夠了 2、部署啟動簡單,下載之后,一鍵啟動,一鍵關閉 3、不需要任何其他的依賴安裝,而且運行時占用內存資源少 4、…

springboot多數據源配置

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 之前在介紹使用JdbcTemplate和Spring-data-jpa時,都使用了單數據源。在單數據源的情況下,Spring Boot的配置非常…

pyhon量化數據處理小細節3---日期格式轉換

不同的數據文檔,會獲得不同日期格式,常見的有str(20200101),datetime(20200101),又或者是2020-01-01,,2020-1-1,20-1-1,20-Apr_20th,2020/01/01,20/01/01等等,總之類型很多。因此需要我們對日期格式進行統一化。這里我…

面向對象和基于對象

面向對象大家都很熟悉,可是基于對象就不一定了。兩個聽起來好象是同一回事,而事實上它們卻千差萬別。基于對象是指:我們采用對象封裝技術,將數據和操作捆綁在一起,但是并沒有合理地使用多態、繼承等面向對象技術進行軟…

CSS margin 屬性簡介

CSS margin 屬性 設置外邊距的最簡單的方法就是使用 margin 屬性。 margin 屬性接受任何長度單位,可以是像素、英寸、毫米或 em。 margin 可以設置為 auto。更常見的做法是為外邊距設置長度值。下面的聲明在 h1 元素的各個邊上設置了 1/4 英寸寬的空白:h…

MVC中使用代碼創建數據庫(code first +mysql+EF)

1.新建一個mvc項目 2.安裝mysql需要的幾個文件 EntityFramework、MySql.Data(6.9.12)和MySql.Data.Entity (6.9.12) 這里有幾點要注意 1.MySql.Data和MySql.Data.Entity 版本必須一致 2.我試用了6.10的版本 要報錯 3.我測試沒有問…

github 學習使用

博主第一次使用github,所以會將過程全成描述歡迎使用Github注冊安裝進入倉庫,創建、修改、上傳文件。強制推送強制覆蓋上傳文件歡迎使用Github 注冊 直接進入github官網:https://github.com 點擊sigh up 進行注冊 直接填寫即可然后驗證通過…

Java中9大內置基本數據類型Class實例和數組的Class實例

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1、Java中9大內置幾本數據類型: 對于對象來說,可以直接使用對象.getClass()或者Class.forName(className);、類名.class都可以…

軟件質量管理之困境與對策思考

相信在不少與軟件開發相關的企業內,質量管理部門與軟件開發部門在日常運作中形成了如下圖所示的“啞鈴形”組織結構。 開發部門執行質量管理部門所制定的流程,通過提供證據的形式將各種流程執行后的數據反饋給質量管理部門(包括缺陷率和各種流…

GDI+用PNG圖片做半透明異型窗口

{*******************************************************}{ }{ GDI用PNG圖片做半透明異型窗口 }{ }{ 版權所有 (C) 2008 QQ:…

java Spring Boot中使用Swagger2構建API文檔

1、添加Swagger2的依賴 在pom.xml中加入Swagger2的依賴 <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.2.2</version> </dependency> <dependency><groupId&g…

什么是 FreeMarker

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 轉自官方文檔&#xff0c;只是記錄下官方在線手冊地址&#xff1a;http://freemarker.foofun.cn/ FreeMarker 是一款 模板引擎&#xff…

TP函數

U方法用于完成對URL地址的組裝&#xff0c;特點在于可以自動根據當前的URL模式和設置生成對應的URL地址&#xff0c;格式為&#xff1a;U(地址,參數,偽靜態,是否跳轉,顯示域名);在模板中使用U方法而不是固定寫死URL地址的好處在于&#xff0c;一旦你的環境變化或者參數設置改變…

爬蟲——————爬取中金所,深交所,上交所期權數據

先從深交所開始&#xff1a;直接上傳源碼&#xff1a; from bs4 import BeautifulSoup from lxml import etree import pandas as pd import akshare as ak import datetime import requests import csv from contextlib import closing import time from urllib.request impo…

linux下的C語言開發

linux下的C語言開發&#xff08;開篇&#xff09; 在很多人的眼里&#xff0c;C語言和linux常常是分不開的。這其中的原因很多&#xff0c;其中最重要的一部分我認為是linux本身就是C語言的杰出作品。當然&#xff0c;linux操作系統本身對C語言的支持也是相當到位的。作為一個…

sql語法學習

本人數據庫目前使用的是sql&#xff0c;主要是使用python語言&#xff0c;然后用pandas調用&#xff08;真的很方便&#xff09;。所以就總結一下&#xff0c;也為自己以后調用數據查找方便使用。 導入包 from sqlalchemy import create_engine import pymssql連接數據庫 con…

C 溫故知新 之 指針:數組指針、字符串指針、函數指針

一、數組指針 1.指向數組元素的指針 1、定義&#xff1a;還是那句話通俗的說指針就是地址   數組指針 &#xff1a;數組的起始地址 數組元素指針&#xff1a;數組元素的地址 2、定義一個指向數組元素的指針變量的方法&#xff0c;與之前介紹的指針變量相同。 例如&#…

mysql 查找配置文件 my.ini 位置方法

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 個人備注&#xff1a;不顯示文件類型時&#xff0c;my.ini 文件名就叫作 my&#xff0c; 文件屬性才顯示 ini。 找到 my 文件看屬性就知…

嵌入式操作系統內核原理和開發

嵌入式操作系統內核原理和開發&#xff08;開篇&#xff09; 操作系統是很多人每天必須打交道的東西&#xff0c;因為在你打開電腦的一剎那&#xff0c;隨著bios自檢結束&#xff0c;你的windows系統已經開始運行了。如果問大家操作系統是什么&#xff1f;可能有的人會說操作…