从三明治到六边形

软件的核心复杂度在于业务本身,我们需要对业务本身非常熟悉才可能正确的为业务建模。通过统一的语言我们可以编写出表意而且易于和业务人员交流的模型。

另一方面模型应该尽可能的和基础设施(比如JSON/XML的,数据库存储,通信机制等)分离开。这样一来可以很容易用mock的方式来解耦模型和基础设施,从而更容易测试和修改,二来我们的领域模型也更独立,更精简,在适应新的需求时修改也会更容易。

庖丁解牛:产品需求分析

在庄子的《南华经》中有一则寓言。说是有位叫丁的厨师,替梁惠王杀牛,其技法之娴熟,有行云流水一般的顺畅感。惠王就问他为什么有如此高超的技术。他回答说:“臣所喜好的是『道』,早就超越所谓的技术了。最初臣杀牛的时候,眼里看到的都是『完整的牛』;三年之后眼中就再看不到『完整的牛』。到了现在,臣以精神接触,而不用眼睛看牛,视觉感官停止了而精神在活动。按天然的道理,击入牛筋骨的缝隙,顺着筋骨的空洞进刀,依照它本来的构造,牛的筋骨接合的地方,臣都未以刀刃碰到过,而何况是大骨头呢!”

同样的道理。当我们在面对一头牛--复杂的业务需求时,如果不得其构造,不明其法,是不能够很好的拆解的。只有对需求深入了解,按照其本来的构造,在筋骨的缝隙处下刀,才能拆出不错的用户故事。今天在这里,就给大家介绍一些解牛之法。非『道』,唯术尔。

大型分布式团队的代码版本管理

介绍这个话题,有两个原因:
1、从开始工作到现在,我经历过从没有代码版本管理到代码集中式管理,到分布式管理,我深刻体会到它在软件开发过程中的重要性;
2、我在工作中遇到很多客户都存在对于代码版本管理的各种问题,困惑和不同的需求。
所以我希望将我在这个方面的经验分享给更多人,希望能帮助更多的团队解决在代码版本控制方面的问题和疑惑。

Serverless架构实践初探

目前AWS Lambda似乎已经成为了Serverless的代名词,为了帮助开发者更好的构建Serverless应用,市场上出现了一些工具和框架,例如Serverless Framework。但是同样我们还可以看到一些其他的云平台和开源框架也在提供类似的服务,例如webtask,OpenWhisk,以及其在IBM Bluemix上的实现。

Serverless架构作为一种新的架构方式,还在不断的发展中。希望本文能给您带来一些思考。

一张漂亮的可视化图表背后

多年前读过一篇非常震撼的文章,叫《Lisp之根》(英文版:The roots of Lisp),大意是Lisp仅仅通过一种数据结构(列表)和有限的几个函数,就构建出了一门极为简洁,且极具扩展性的编程语言。当时就深深的被这种设计哲学所震撼:一方面它足够简单,每个单独的函数都足够简单,另一方面它有非常复杂,像宏,高阶函数,递归等机制可以构建出任意复杂的程序,而复杂的机制又是由简单的组件组成的。

数据的可视化也是一样,组成一幅内容清晰、表达力强、美观的可视化信息图的也仅仅是一些基本的元素,这些元素的不同组合却可以产生出令人着迷的力量。

洗白“黑科技”深度学习

最近几年,深度学习备受关注。在2016年的每一项人工智能成就背后,几乎都能看到深度学习的影子。数据的获取、存储、计算能力的增强,以及算法的进步等因素合力推动了深度学习技术的崛起。深度学习目前的成果大多来自学术研究,然而,在不远的将来,以深度学习驱动的人工智能技术,将推动企业软件开发产生巨大的变革。