必看!超实用开发原则(二)

原则六 识别内在的复杂性

有时候事情本身就很复杂,你不能把问题简单化。

任何这样的尝试都只会让系统变得更加复杂。

原则七 使用的技术越少,系统就越简单

深入理解一小部分技术要比只是表面理解很多技术好。

更少的技术意味着更少的东西要学习和更少的运维复杂性。

原则八 集中精力学习概念,而不是技术

不要太关心技术的复杂细节,因为你可以随时查阅它们。你要学习底层的基本概念。

技术会变化,概念却是永恒的。你学到的概念将被用在更新的技术中,你就可以更快地学会新技术。

例如,不要太关注 React、Kubernetes、Haskell、Rust 的表面细节。

重点学习:

纯函数式编程

关系型模型

规范的方法

逻辑编程

代数数据类型

类型类 (通用的和特定的)

借位检查器 (仿射 / 线性类型)

依赖类型

Curry-Howard 同构

同像性(Homoiconicity)

VirtualDOM

线性回归

......

原则九 代码一致性很重要

有时候,具有一致性的代码比“正确”的代码更重要。如果你想要改变代码库中某些代码的行为,就要修改它所有的实例。否则的话,就只能忍受。

代码的可读性更多地与一致性(而不是简单性)有关。人们通过模式识别来理解代码,所以请重复 (和记录) 模式!

原则十 分享原则很重要

如果你和队友之间的共同原则越多,就能越好地在一起工作,而且你会越喜欢和他们在一起工作。

附录:不一致性导致的复杂性

这是我能想到的最简单的例子,希望能毫不费力地与现实问题联系起来。

假设一个数据库有两个布尔变量 x 和 y,你的应用程序有一个规则,即 x = y,可以通过使用一个事务修改这两个变量来执行这个规则。

如果这个规则被正确执行,那么数据只有两种状态:(x = True,y = True) 或 (x = False,y = False)。

基于这个规则的函数“toggle”就非常简单。你可以读取其中一个值,并将两个值都设置为反向值。

现在,假设你将这两个变量放到不同的数据库中,并且不能再被一起修改,那么会发生什么?

因为你不能确保 x = y 的一致性,所以数据可以有两种以上的状态:(x = True,y = False) 或 (x = False,y = True)。

如果你的系统处于这些状态中的一种,你应该使用哪个值?

当处于其中的一种状态时,“toggle”函数的行为是怎样的?

在写入新值时,如何确保两次写入都成功?

这些问题没有正确的答案。

当然,如果我们一开始就遵循“剔除无效状态”的原则,那么将只有一个变量!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值