系统设计
翁正存
做一名合格的工程师
展开
-
控制系统复杂度-模块化编程
什么是系统复杂度?类似于算法复杂度吧,但算法复杂度是标识运行代码所需的时间和空间资源,而这里所说的复杂度是系统的复杂度,是研发人员对系统的认知难度。 为什么要思考系统复杂度?不刻意去控制系统复杂度,一方面系统不够健壮,缺乏弹性,另一方面,研发会写出一堆控制逻辑和业务逻辑揉在一起的烂代码,前人挖坑,后人背锅! 怎么控制系统复杂度?合理利用分治,模块化编程...原创 2018-09-17 19:54:50 · 599 阅读 · 0 评论 -
什么是计算机世界里的信息
信息就是比特位加上下文,这是《深入理解计算机操作系统》给出的答案。我的理解是,单纯的信息,无论是以什么媒介存储的信息,是没有任何意义的,信息只有加上其所处的环境才有意义,这个环境就是上下文。写的代码,之所以会有bug,就是没有理解所要处理的信息,缺少足够多的上下文。其实,我们就是在将现实世界的上下文通过代码,映射到计算机中,缺少上下文,必然会使程序各种异常。...原创 2018-09-20 11:15:25 · 317 阅读 · 0 评论 -
程序中间态
大型系统或者很复杂的业务,往往要将一件事分割为简单的几步,下一步依赖上一步的结果,可以将最终处理结果之前的所有结果状态视为中间态。其实,数据库、队列(语言内置的队列、kafka、mq等)等保存的非最终结果的数据都可以视为中间态的数据,理解了这层意思,不难理解为什么商业程序很喜欢使用中间件——可以将程序的复杂性有效降低。...原创 2018-12-06 11:15:13 · 974 阅读 · 0 评论 -
状态变量的认识-异步结构的核心
所有的异步结构都有一个或一组状态变量,利用状态变量,我们可以将业务逻辑拆分成小的模块。拆分有什么好处呢?可以将复杂的问题简化为多个简单的子问题,更容易处理。举个例子,Java并发包里有个FutureTask类,主要作用是异步地做一些运算,返回运算结果。FutureTask类有个状态state:private volatile int state;private static fin...原创 2019-02-14 17:50:21 · 381 阅读 · 0 评论 -
分解-解决复杂问题的办法
很多人知道刻意练习是最好的学习方法,不断重复地学一项技能,直到学会为止。但是,如何重复地学习某种技能呢?答案是:将要完成的动作分解为多个彼此独立的小动作,重复地练习每个小动作,做到将每个小动作的要领长进脑子里,然后,重复训练整个动作。这里,重要的是理解分解这种思想,这种思想是解决系统问题的利器。 毕业快三年了,一直做软件开发的工作,一边工作一边读书学习。我发现,无论多么复杂的计算机系...原创 2019-02-28 17:33:34 · 3500 阅读 · 0 评论 -
架构的本质
架构就是对系统中的实体以及实体之间关系所进行的抽象描述。所以,要想设计和实现良好的架构,必须对系统中的每个实体都很了解,脱离业务谈架构都是耍流氓。...原创 2019-03-27 20:25:37 · 259 阅读 · 0 评论