寫軟件不是造汽車

寫軟件和做其他事情是不一樣的。當我們制造別的東西的時候——像汽車、玩具、椅子、畫作、甚至包括數字產品如平面圖片和3D模型——我們做出來的成品就是最終的結果。而開發軟件則不是,我們做出來的產品永遠不可能有最終的結果——我們需要向計算機解釋如何根據任意的輸入來輸出任意可能的結果。

寫軟件不像造汽車,或者可以這么說,它更像是建立一個汽車裝配生產線。

我們很容易了解汽車制造的設計觀念,產品設計師只要拿著一張設計圖紙,說一聲“照這個做”,然后工程師們就可以開工了,開始制造一個看上去真實存在的東西。

假設我們的產品設計師需要給一個網站開發一個用戶資料管理系統,一個簡單而完美的設計也許就是在布局好的頁面中放置幾個占位符文本,用來顯示用戶名、用戶頭像和一些基礎資料數據。然而,這僅僅是開發軟件過程中的假設階段,實際操作很復雜。比如用戶如何編輯這些字段?窗口頁面太窄了怎么辦?頁面如何在各種屏幕的閱讀器中展示不錯的效果?產品設計師只是假設了一些理想狀況下的頁面,但是開發者卻需要將每一種可能遇到的情況都考慮到。

回到剛才打的“汽車裝配生產線”這個比喻,產品設計師提出一些看上去很簡單的需求,就像“可以把駕駛室的車門顏色由紅色替換成藍色嗎?”這樣的需求。這是一種誤導——做一輛紅色車門的汽車看起來很簡單,但實踐起來卻非常困難——我們需要調整生產線上的配色系統以便讓其支持噴刷多種顏色的油漆,這就要增加一些局部噴色的邏輯,并且需要增加配置選項以允許人們在生產線上可以選擇需要噴刷的油漆顏色。還有就是需要購買一些新的噴漆嘴,因為紅漆比藍漆流動更快一些。而且需要安排更好的健康保險,因為一旦銷售人員知道你制造的汽車只有一扇門是紅色的,他們會瘋狂地扔東西。

在軟件開發中也會發生類似的事情。“嘿,這個用戶管理系統看起來很不錯,可以在用戶生日的時候發送一條祝福消息嗎?”于是你又接收到了一條看似簡單的需求。

當你在開發軟件的時候,你并不是在構建用戶管理系統中的一個頁面,而是在創建一條裝配生產線,它由一堆的零部件組成,而且可以每次生成正確的用戶管理頁面。

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

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

相關文章

線程池核心概述

線程池核心概述 Executors工廠類使用 Executors工廠類底層源碼分析詳解 ThreadPoolExecutor自定義線程池 ThreadPoolExecutor拒絕策略詳解 計算機密集型與IO密集型詳解 如何正確的使用線程池…

網站盈利的10種方式

如果你有自己的網站,而且已經有了不少的流量,你肯定會開始考慮如何通過這個網站來掙一些錢。 在這篇文章中,我會向大家介紹網站最常見的10種盈利方式。 1.按點擊付費廣告 在網站上展示一個按點擊付費的廣告橫幅是最簡單的盈利方式&#xff…

程序員如何創業?

摘要:工作機會減少,讀大學也不是保障。大公司亦不再是構筑職業生涯的安全港灣。透過媒體的鏡頭,創業似乎成了沙漠中唯一的綠洲。然而關于創業,或許少有人給你建議,這里所列出的一些因素都是你可以考慮的。 如果你的年…

Redis數據的類型

Redis一共分為五種基本數據類型:String、Hash、List、Set、Zset. string 內部編碼有三種,raw,embstr,int String 是二進制的。可以存儲序列化對象,圖片,字符串,數值等 set和get方法 &#x…

Redis高級命令與特性以及單點模式的介紹

高級命令 keys * 返回滿足條件的所有key,可以模糊匹配exists 是否存在指定的keypersist 取消過期時間select 選擇數據庫 (0-15,總共16個數據庫)move key index 將當前數據庫的 key 移動到給定的數據庫 db 當中randomkey 隨機返回…

華為副總裁徐家駿離職:年薪千萬工作感悟十二條

從普通的公司職員,到年薪千萬的華為副總裁,再到離開華為轉戰百度,徐家駿的十年從業經歷和經驗可資借鑒,我們從中也可以一窺華為的運作過程。徐家駿是華為數據中心的頭,技術超級牛人,一級部門總監&#xff0…

Redis持久化之RDB和AOF

Redis持久化之RDB和AOF Redis 有兩種持久化方案,RDB (Redis DataBase)和 AOF (Append Only File); RDB 詳解 RDB 是 Redis 默認的持久化方案。在指定的時間間隔內,執行指定次數的寫操作&#…

同為程序員 為什么我的工資最低

我看著工資單上每一個開發團隊成員的薪水,慢慢地我不能保持淡定了。 而當我看到我的工資排名是倒數的時候——靠近最后一名——我不由得倒抽一口冷氣。就像圣誕故事中的那個可愛的小男孩Ralphie ,想買氣槍卻被忽悠會有危險一樣,我也不斷忽悠…

Docker安裝Redis以及配置Redis環境

1,下載Redis鏡像 首先拉取 Redis 鏡像, 這里我選擇的是 redis:alpine 輕量級鏡像版本 docker pull redis:alpine 下載完成后,通過 docker images 查看我們已經下載的鏡像,看看是否已經下載到本地 2,運行 Redis 容器 docker run …

.NET程序性能的基本要領

摘要:本文分享了性能優化的一些建議和思考,比如不要過早優化、好工具很重要、性能的關鍵,在于內存分配等。開發者不要盲目的沒有根據的優化,首先定位和查找到造成產生性能問題的原因點最重要。 【編者按】Bill Chiles&#xff08…

redis.conf配置文件詳解

基本配置 daemonize no #是否以后臺進程啟動databases 16 #創建database的數量(默認選中的是database 0)save 900 1 #刷新快照到硬盤中,必須滿足兩者要求才會觸發,即900秒之后至少1個關鍵字發生變化save 300 10 #必須是300秒之后至少10個關鍵字發生變…

什么原因成就了一位優秀的程序員?

這些年我曾和很多程序員一起工作,他們之中的一些人非常厲害,而另一些人顯得平庸。不久前因為和一些技術非常熟練的程序員工作感覺很愉快,我花了一些時間在考慮我佩服他們什么呢?什么原因讓優秀的程序員那么優秀,糟糕的…

Redis的哨兵模式Sentinel

sentinel功能 redis的sentinel系統用于管理多個redis服務器,該系統主要執行三個任務:監控、提醒、自動故障轉移。 1、監控(Monitoring): Redis Sentinel實時監控主服務器和從服務器運行狀態,并且實現自動…

csdn 到底怎么了?不準轉載?

我轉載了20多文章,很多人閱讀過,但是今天看到閱讀量是0, csdn 到底怎么了? 對用戶這樣?請大家看看是不是這樣?

python3之后版本讀取網頁的內容

import urllib.request url "http://helloworldbook2.com/data/message.txt" #直接通過url來獲取網頁數據 print(第一種) response urllib.request.urlopen(url) code response.getcode() html response.read() mystr html.decode("utf8") response.c…

三十功名塵與土——資深程序員生涯自白

摘要:作者Codist(網名)在程序員崗位上工作了三十多年,在這期間他悟出了一些真理,比如,成功來自對失敗的總結學習;條條大路通羅馬,羅馬并不在乎你用什么方式到達。你在生活中積累了哪…

linux/unix核心設計思想

1) 程序應該小而專一,程序應該盡量的小,且只專注于一件事上,不要開發那些看起來有用但是90%的情況都用不到的特性; 2) 程序不只要考慮性能, 程序的可移植性更重要,shell和perl&…

操作系統環境變量

在 Java中,許多類都是 Iterable ,主要包括所有的 Collection 類(但不包括各種 Maps )。 例如,下面的代碼可以顯示所有的操作系統環境變量: // collections/EnvironmentVariables.java // {VisuallyInspect…

用Unix的設計思想來應對多變的需求

摘要:無論是Unix設計,還是面向對象設計,還是別的什么如SOA,ECB,消息,事件,MVC,網絡七層模型,數據庫設計,等等,他們都在干三件事——解耦&#xff…

學習較底層編程:動手寫一個C語言編譯器

動手編寫一個編譯器,學習一下較為底層的編程方式,是一種學習計算機到底是如何工作的非常有效方法。 編譯器通常被看作是十分復雜的工程。事實上,編寫一個產品級的編譯器也確實是一個龐大的任務。但是寫一個小巧可用的編譯器卻不是這么困難。…