下班路上坐地铁的时候看了一本会计学的书,目前看了50多页。过程中,发现会计学和程序设计在思想上有惊人的相似之处。今天举两个例子做说明。
CR设计和账簿
CR设计介绍
CR设计就是只有创建和查询,没有更新和删除。咱们后台人工操作,设计数据变更都需要有历史记录。历史记录和数据变更的最终结果区别在于历史记录有数据不变性,可以进行事件溯源。这个方法在《整洁架构》中有专门的介绍。现在非常流行的时序数据库本质也是这一思想的具体实现。
账簿介绍
这个思想的产生要追溯到石器时代。石器时代就有结绳记事。那些绳子就是原始人的账簿。登记方法就是增加的时候在上面接个大疙瘩,减少的时候解开大疙瘩。随后,绳子演变成了苏美尔人的泥巴或者殷商人的龟甲,估计就是在上面画道道,画一些线条表示增加,另一些线条表示减少。估计那个时候中国人还不知道“+”和“-”这两个符号,只好把增加和减少分开写,中国人的习惯是上面写增加、下面写减少(天收地付)。
CR设计应用
在现在的工程架构中,能运用软件的就尽量不用硬件。因为它们缺少日志记录,如果发生了异常情况难以排查。举个例子,二层防火墙因为不能做负载均衡,都是主备类部署。一旦一台出现故障必须立即停掉主,启用备。发生比特位跳变等问题,没有现场,也没有日志,重启这台机器也不会再次故障,难以确认原因。不能确认原因怎么能确保下次不会再出现问题呢?强烈建议将出现故障不能给出原因的处理列到购买合同里。
下面是一个常用的一种主备模式叫A/S模式的原理图。扯远了。
校验设计和复式记账法
校验设计介绍
咱们平时做通信,收到的数据包都有校验和。金融支付领域都有对账。毕竟完整性、准确性和一致性是数据质量最重要的三个标准。
复式记账法介绍
这个思想也深得复式记账法的精髓。复式记账法是指对发生的每一项经济业务,都要以相等的金额,在相互联系的两个或两个以上的账户中进行记录的记账方法。
这种方法的优点是对于发生的每一项经济业务,都要在两个或两个以上的账户中相互联系地进行分类记录。这样,通过账户记录不仅可以全面、清晰地反映经济业务的来龙去脉,还能全面、系统地反映经济活动的过程和结果。由于每一项经济业务发生后,都是以相等的金额在有关的账户中登记,因而可以对记录的结果进行试算平衡,以检查账户记录是否正确。
校验设计应用
咱们网上取款的时候有双因素校验,不但登录要输入密码,取款还要发一个手机验证码确认是本人。咱们的代码要上线要经过静态代码检查、代码人工审查、集成测试检查等环节才能合并到主分支。咱们从一个系统定时同步数据时一般会实时获取增量数据,同时配合定时任务拉取全量做比对。
总结
对于一门技术,有些人学的很快,很可能是他有意识的或者潜意识的进行抽象类比,找出共性和个性,掌握精髓。比如工作中、技术中、各个领域中都在用各种形式的“分类”:这本会计书上说会计就是分类的艺术。常用的思维导图不就是一个分类工具么?数据结构化不就是把数据分类吗?由此还产生了搜索引擎。
思考--你的工作!(出自《程序员修炼之道》)