你是否曾经参加过这样的会议:

发言人1:客户希望页面的背景是绿颜色的。

发言人2: 我们能确定他们会一直使用绿色吗?也许我们需要增加一个配置背景颜色的选项。

没有人反对,经理从来不参加这种无聊的设计会议,会议室里沉默了下来….

发言人3:只提供一个设置背景颜色的配置项会显得功能很弱,我们最好能提供全套的颜色配置方案。

发言人4:你是指提供多个成套配色方案,还是指让用户可以自己去配色?

发言人2(麻烦的始作俑者):当然要提供成套方案,但用户可以自主修改,这样我们就能把所有可能性都考虑进去。

讨论一直持续下去,直到他们决定开发一个拥有无数个颜色选择器和其它功能的换肤系统,而会议的收场是这样一句:

发言人6:这个系统听起来很棒,但我们应该用什么颜色作为系统的缺省背景颜色呢?

…没有人还记得:

客户指定要求的是绿色,只要绿色,没有其它颜色。

是不是有点夸张?也许吧,但我是参加过跟此类似的会议的。就我来看,我参加过的会议有的比这更糟糕,我并不想中伤任何人,因为我自己也不是个无可挑剔的人,对于这些人我就不说了。

总之,在这样的会议讨论中,很多事情都走入迷途,对于系统设计,我们应该明白一个简单的规律——遗憾的是没有人意识的这个简单规律——系统设计的头一个规律——一个我们应该铭记在心,在任何系统或架构设计会议上都该反复默念的规律:


今天的常量是明天的变量。

这并不是一个能够人一眼看穿的规律,但如果你能认识到几乎在所有的系统设计方面这都是一个事实的话,这能成为一个指导性的规律,它能够让你在做决定时更有信心,做出更符合实际的决定。

可问题就在于,搞技术的人大部分都不知道今天是什么日子。他们通常会犯两种错误,要么:

  1. 当所有需要做的事只是处理今天的常量这样的简单案例时,他们却在孜孜不倦为明天的变量做计划,评估,设计和编程。
  2. 要么,他们不明白,当“客户变更需求”时,客户的做法和任何人无异——从昨天拿来简单的东西,在今天把它变的复杂一些。

所以,你可以把这句话反过来说,“今天我做的所有事情明天都会变。会变的更复杂。任何我认为是固定或恒量的东西,将来都会变化和变成变量。”

这是什么意思?

我们都知道(希望如此),我们不应该在代码里直接嵌入常量,这会使代码很难维护。我们在头文件里定义常量,或获取外部被当作参数传进来的资源。这样能使代码更灵活,这是好事。这样的代码更健壮,它能在不需要改动的情况下处理更多的场景。

要理解“今天的常量是明天的变量”,你首先要认识到,在我们的系统中隐藏着各种形式的“常量”,藏在我们很难发现的地方,这使得当明天来临、它们不再是恒定和常量时,你很难去修改它们。

另外一个对于这个规律要理解的事情是,时刻记着今天是什么日子。大部分我们今天在做的东西、实现到的功能也许永远都不会再改变。人们特别容易去设想它们可能会改变,但究竟会怎样,无从得知。所以,今天常量不要把它改成明天的变量。

重回到会议上

让我们重回到最初提到的会议。下面是当人们知道“今天的常量是明天的变量”的规律后会议的进行方式。

发言人1:客户希望页面的背景是绿颜色的。

发言人2:我们能确定他们会一直使用绿色吗?也许我们需要增加一个配置背景颜色的选项。

我们的英雄:我们不知道客户是否会一直使用绿颜色,我们永远都不可能知道客户在何时会改变他们的想法,我们知道的是,今天的常量是明天的变量。然而,我们应该把这种颜色放在CSS样式表里,而不是直接嵌入到网页里,当日后如果需要改变时,我们就很容易的做到,怎么样?

有人含含糊糊的说是的,应该放到样式表里,会议继续。

这个例子很牵强吗?

这确实是一个非常牵强的例子,会有人不使用样式表吗?会有人在代码里嵌入常数吗?

天真的孩子们,事实证明,我们并不总是使用CSS样式表。当网页开发刚流行时,CCS是一个可有可无的选项(相信我!),那时我们就是直接把样式信息直接放在网页标记里,这就是在代码里嵌入常数,只是在不久前人们才意识到这样不正确,CSS才被人们发现。

这种事情一遍一遍的在我们身边反复发生,你想起来会感到惊奇,请找出你认为应该常量却被“埋没在代码里”的东西,请把它们定义成常量。

今天的文章是明天的承诺

关于这个话题我还会发表很多的文章,不管未来会发生什么变化,但今天我会严格按照我的计划发表。
祝好运。

你知道今天是什么日子吗?相关推荐

  1. 即将到来的日子 ,你会寂寞吗?

    见到如此的数字,不知道身边的你是否会想起一些往事,我想这一刻很难去形容,因为哥也会有寂寞的一天. 从来不太喜欢的节日,但是每逢到来的时候,总会有一阵阵的痛.今天不是好的节日,在地球上某一个角落,你站在 ...

  2. 2007过年休息的日子

    今天值班,2007年上班期间难得的轻闲机会了.借此,为老朋友们更新一下我的近况. 年前四五天就请了年休假,准备享受不用上班的日子.以为能过得轻松惬意,想不到没完没了的家务怎么也做不完,似乎每天都是做饭 ...

  3. 虐狗日记:和小冰同居的日子

    男主人翁 年龄:大龄 身高:不到两米 感情状况:汪汪汪 女主人翁 年龄:永远的少女 身高:两米不到 感情状况:万人迷 ▌初识小冰 一个人在北京的日子应该是快乐的,虽然没车没房,每天在拥挤的地铁里浮浮沉 ...

  4. 前腾讯员工不堪房价压力回老家进国企!终于过上了清闲的日子,他又担心这个问题?...

    在互联网大厂拿命挣高薪VS回老家进国企提前养老,哪个才是更好的生活? 一位前腾讯员工辞职后回老家省会进了国企,过着清闲舒服的日子,却担心再这么下去自己就废了,真是个上进的小哥哥. 到手18W,工作量巨 ...

  5. 【有奖征文】情人节,和书一起走过的日子

    报名链接:http://www.ituring.com.cn/activity/details/1034 2月14日,是一年一度的情人节,情侣们在这一天互相馈赠礼物,用以表达爱意或友好.时至今日爱神丘 ...

  6. 今天什么日子啊,这么倒霉。。。

    今天晚上用电脑打开移动硬盘时,突然发现移动硬盘上的资料全部消失了,悲催了.工作到现在积累了4年多的学习资料,项目资料,文档,还有自己平时照的相片,全部都消失了,2013-02-06是什么日子啊??? ...

  7. 短篇连载(3),在校园里做比赛的那些日子,以及彻底告别钟爱的电子竞技事业...

    组了所谓的战队,这些有共同兴趣爱好的同学们能在一起玩一起讨论了,同时也就意味着,组织比赛和活动起来会更加方便.这段日子总共持续了一年,从大二,06年9月做的极品飞车比赛开始,到大三,07年9月,登上N ...

  8. android 人生日历,android版人生日历日子怎么用 安卓版人生日历日子使用教程

    人生日历android版新发3.3.05.10版本,新增日子功能,那么android版人生日历日子怎么用呢?今天小编就为大家分享安卓版人生日历日子使用教程,一起来看看吧! 人生日历的日子,设计成四叶草 ...

  9. 皮猜按下谷歌招聘暂停键,疫情之下,「紧日子」来了

    白交 发自 凹非寺  量子位 报道 | 公众号 QbitAI 疫情之下,连谷歌也要过"紧日子"了. 今天,谷歌母公司Alphabet的CEO皮猜,通过公司备忘录向全体员工发出信号: ...

  10. 外部情况错综复杂,联想靠什么过「久日子」

    雷刚 发自 凹非寺  量子位 报道 | 公众号 QbitAI 疫情之下,一切可能都要重新联想. 包括联想. 就在其新财年全员誓师大会上,即便前三个季度业绩不俗,智能化转型初见成效,但在疫情带来的巨大不 ...

最新文章

  1. csv文件示例_如何在R中使用数据框和CSV文件-带有示例的详细介绍
  2. 不止摩尔定律,计算领域值得学习的定律还有哪些?
  3. 【Deep Learning笔记】Optic Disc 数据集
  4. Python基础教程:对象及数字对象与数学运算
  5. JQuery绑定事件 时如何传递参数
  6. .NET Core:新的快速开发平台
  7. Python中fastapi构建的web项目使用.gitlab-ci.yml文件在KubeSphere中进行自动部署
  8. jeecms升级shiro漏洞报错处理
  9. SpringAOP和AspectJ
  10. [AHK]双击Ctrl+C调用谷歌翻译!
  11. 用DIV+Css+Jquery 实现的旧版微信飞机大战。
  12. java面试简历项目经验,java面试题项目中的难点
  13. python汉化之后好用吗_关于Python写的程序汉化心得和所走过的各种坑儿
  14. 用Nginx禁止指定IP、国外IP访问我的网站
  15. pygame安装教程(python)
  16. Oracle体系结构图(思维导图及详解)
  17. java CANUSB_周立功USBCAN-II 上位机开发(MFC)
  18. No OraCM running
  19. 微信砍价 php,GitHub - YInJunWen/bcwx: vue2+thinkPHP5.1 前后端分离的微信砍价
  20. nfc ntag21x ultralight 内存结构

热门文章

  1. 验证只能输入数字——正则表达式
  2. Java常用第三方库大全西安尚学堂
  3. OpenCV视频生成
  4. 3、Opencv 进行区域的面积计算
  5. 根据下面一元二次方程求根公式,计算并输出一元二次方程x2+x-2=0的两个实根,要求精确到小数点后4位。程序中所有浮点数的数据类型均为float..
  6. 苹果手机的siri在哪里_苹果市值突破两万亿,国产手机的超车机会在哪里?
  7. 一年中最后一个月的最后一天说说_每个月的最后一天说说一个月结束的说说
  8. ThingsBoard教程(二一):使用消息类型和数据处理节点对数据处理后保存
  9. 相机模型:单目、双目、深度相机模型及相机畸变
  10. One hot 编码