你知道今天是什么日子吗?

2024-05-01 16:32
文章标签 今天 知道 日子

本文主要是介绍你知道今天是什么日子吗?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

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

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

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

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

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

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

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

…没有人还记得:

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

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

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


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

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

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

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

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

这是什么意思?

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

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

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

重回到会议上

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

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

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

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

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

这个例子很牵强吗?

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

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

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

今天的文章是明天的承诺

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


这篇关于你知道今天是什么日子吗?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/952145

相关文章

[情商-13]:语言的艺术:何为真实和真相,所谓真相,就是别人想让你知道的真相!洞察谎言与真相!

目录 前言: 一、说话的真实程度分级 二、说谎动机分级:善意谎言、中性谎言、恶意谎言 三、小心:所谓真相:只说对自己有利的真相 四、小心:所谓真相:就是别人想让你知道的真相 五、小心:所谓善解人意:就是别人只说你想要听到的话 前言: 何为真实和真相,所谓真相,就是别人想让你知道的真相!洞察谎言与真相! 人与人交流话语中,处处充满了不真实,完全真实的只是其中一小部分,这

看病要排队这个是地球人都知道的常识

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝唯有付出,才有丰富的果实收获! 看病要排队这个是地球人都知道的常识。 不过经过细心的0068的观察,他发现了医院里排队还是有讲究的。0068所去的医院有三个医生(汗,这么少)同时看病。而看病的人病情有轻重,所以不能根据简单的先来

纳米材料咋设计?蛋白质模块咋用?看这里就知道啦!

大家好,今天我们来了解一项关于蛋白质纳米材料设计的研究——《Blueprinting extendable nanomaterials with standardized protein blocks》发表于《Nature》。蛋白质结构复杂,其组装体的设计颇具挑战。但近期的研究取得了新突破,通过设计标准化的蛋白质模块,如线性、曲线和转角模块等,实现了纳米材料的可扩展性和规律性。这

只有对比,才知道伊利股份半年报的高成色

投资圈有句名言:“当潮水退去的时候,才知道谁在裸泳”。大环境顺风顺水,大家看着都挺好,只有环境变化,才更容易分辨出来,谁才是真有实力。当下,在消费环境弱复苏的大背景下,高成色的半年报业绩让伊利股份的实力一览无余。 8月29日,伊利股份发布中期业绩。上半年,面对严峻复杂的市场环境,伊利直面挑战、主动调整,实现营业总收入599.15亿元,归母净利润75.31亿元,均稳居行业第一。

2024年9月7日历史上的今天大事件早读

251年9月7日 三国时期军事家司马懿逝世 1298年9月7日 马可-波罗与鲁思梯谦合著《马可-波罗行记》 1625年9月7日 魏忠贤下令禁毁东林书院 1689年9月7日 中俄《尼布楚条约》签订 1812年9月7日 俄法博罗季诺决战,标志着拿破仑的军队覆灭开始 1822年9月7日 巴西独立 1853年9月7日 上海小刀会起义 1901年9月7日 《辛丑条约》签订 1904

从新手到大师:Java并发编程你必须知道的那些事!

文章目录 1 进程和线程的区别?2 如何创建一个线程实例并且运行它?3 Runnable 和 Callable 接口有什么区别?它们是如何使用的?4 方法定义中 synchronized 关键字的含义是什么?静态方法?在一个块之前 ? 1 进程和线程的区别? 进程是独立的执行单元,拥有自己的资源和内存,而线程是在进程内的执行单元,共享进程的资源。线程可以高效地执行任务,但需

今天做了freemaker 导出word文档 的bug修复,解决 \n换行 问题

结合Freemaker导出文件 public void exportSimpleWord() throws Exception{// 要填充的数据, 注意map的key要和word中${xxx}的xxx一致Map<String,String> dataMap = new HashMap<String,String>();dataMap.put("username", "张三");dataMap.

如何进行不同数据库的集群操作?--从部署谈起,今天来看MySQL和NoSql数据库Redis的集群

篇幅较长,主要分为mysql和Redis两部分。找想要的部分可见目录食用。。 目录 什么是集群?为什么要集群? 1.1 数据库主要分为两大类:关系型数据库与 NoSQL 数据库 1.2 为什么还要用 NoSQL 数据库呢?                       -------------------华丽分割线-------------- 一、关系型数据库MySQL 1.部署

程序猿必须知道的一些有用的(外国)网站

在学习计算机科学(CS)时,必须知道一些有用的网站,以便随时掌握信息,了解技术前沿和学习新技术。下面是你应该访问的一些网站的不详尽的列表,一旦我得到了另一个链接,这个列表就会被更新,但是你也可以添加你知道的网站来做贡献。 索引 当你遇到困境时 新闻 初学者的编码实践 给那些想开始一个小项目却找不到点子的人 一般编码建议 编码风格 一般工具 面试的准备

Spark你需要知道这些

谈到 Spark,我们总是强调它比 Hadoop 更高效。为什么它可以更高效呢?是因为它优先使用内存存储?还是因为它拥有比 MapReduce 更简单高效的计算模型? 与 Hadoop 作业的区别 我们知道在 Hadoop 中,一个作业(Job)可以有一个或多个Task,Task 又可以分成 Map Task 和 Reduce Task。每个Task 分别在自己的进程中运行,Hadoop 中一