写软件不是造汽车

写软件和做其他事情是不一样的。当我们制造别的东西的时候——像汽车、玩具、椅子、画作、甚至包括数字产品如平面图片和3D模型——我们做出来的成品就是最终的结果。而开发软件则不是,我们做出来的产品永远不可能有最终的结果——我们需要向计算机解释如何根据任意的输入来输出任意可能的结果。

写软件不像造汽车,或者可以这么说,它更像是建立一个汽车装配生产线。

我们很容易了解汽车制造的设计观念,产品设计师只要拿着一张设计图纸,说一声“照这个做”,然后工程师们就可以开工了,开始制造一个看上去真实存在的东西。

假设我们的产品设计师需要给一个网站开发一个用户资料管理系统,一个简单而完美的设计也许就是在布局好的页面中放置几个占位符文本,用来显示用户名、用户头像和一些基础资料数据。然而,这仅仅是开发软件过程中的假设阶段,实际操作很复杂。比如用户如何编辑这些字段?窗口页面太窄了怎么办?页面如何在各种屏幕的阅读器中展示不错的效果?产品设计师只是假设了一些理想状况下的页面,但是开发者却需要将每一种可能遇到的情况都考虑到。

回到刚才打的“汽车装配生产线”这个比喻,产品设计师提出一些看上去很简单的需求,就像“可以把驾驶室的车门颜色由红色替换成蓝色吗?”这样的需求。这是一种误导——做一辆红色车门的汽车看起来很简单,但实践起来却非常困难——我们需要调整生产线上的配色系统以便让其支持喷刷多种颜色的油漆,这就要增加一些局部喷色的逻辑,并且需要增加配置选项以允许人们在生产线上可以选择需要喷刷的油漆颜色。还有就是需要购买一些新的喷漆嘴,因为红漆比蓝漆流动更快一些。而且需要安排更好的健康保险,因为一旦销售人员知道你制造的汽车只有一扇门是红色的,他们会疯狂地扔东西。

在软件开发中也会发生类似的事情。“嘿,这个用户管理系统看起来很不错,可以在用户生日的时候发送一条祝福消息吗?”于是你又接收到了一条看似简单的需求。

当你在开发软件的时候,你并不是在构建用户管理系统中的一个页面,而是在创建一条装配生产线,它由一堆的零部件组成,而且可以每次生成正确的用户管理页面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.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语言编译器

动手编写一个编译器,学习一下较为底层的编程方式,是一种学习计算机到底是如何工作的非常有效方法。 编译器通常被看作是十分复杂的工程。事实上,编写一个产品级的编译器也确实是一个庞大的任务。但是写一个小巧可用的编译器却不是这么困难。…