QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

QClub: 对话《卓有成效的程序员》作者、ThoughtWorks 软件架构师 Neal Ford 现场回顾

  • 2012-09-18
  • 本文字数:1312 字

    阅读完需:约 4 分钟

在 9 月 17 日由 @ThoughtWorks 中国主办、 @InfoQ 负责策划组织和实施的 QClub: 对话《卓有成效的程序员》作者、ThoughtWorks 软件架构师 Neal Ford 上, Neal 做了题为“浮现式设计”的演讲,本文将对他的分享做下简单的回顾。

演讲主题:浮现式设计

Neal Ford 说作为一个极客,他更喜欢技术的实践,他引用了前美国国防部长的一段饶舌的言论引申出:

软件中预先做大量设计的风险在于你不能提前知道什么是你不知道的,过早决定的设计只是些没有事实的猜测。

然后他通过一个金字塔来形容软件的架构,即你可以轻易移动顶层的组件,而移动底层的组件却要付出昂贵的代价,因此,他强调应设计简单的架构。而浮现式设计允许你等到最后的反应时刻再做设计决定。

然后 Neal 从四个方面来介绍浮现式设计:

  • 浮现式设计促进因素
  • 和阻碍浮现式设计战斗
  • 找到管用模式
  • 利用找到的模式

对于浮现式的定义,Neal 解释道这是一种自然而然的产生或者超过预期突然的出现架构设计方式。

Neal 认为通过不断的思考能够自然而然的生成抽象和模式,他称之为傻瓜式模式,主要分为两种类型:

技术模式:安全、验证、事务数据

领域模式:业务逻辑、共享功能

然后他提到了“最后反应时刻”,即越迟做决定能够拥有最大的修改权限,当问题堆积的越久就能够积累越多的知识,当然这个等待时间不是等待到最后一分钟。最后反应时刻是浮现式设计的主要思想。

Neal 认为浮现式设计中测试驱动开发必不可少,它能够在以下方面帮助我们:

  • 超越测试本身增加对设计的理解
  • 测试中诞生好的设计
  • 更好的抽象
  • 更少的事故复杂性
  • 内部的原子化理解

然后,他通过重构解决“完全数”的代码来具体举例说明测试驱动开发使用前后代码设计的改变。

接下来 Neal 介绍了使用圈复杂度与外部耦合来对代码复杂度进行估计,进而发现代码中需要改进的地方,使用模式来优化这些代码。

最后 Neal 表示浮现式设计的引进需要单元测试、重构、持续集成等,这些操作起来都很困难,可以通过主动或者被动的预测来推进整个过程。

Q&A(问答环节)

为了促进参会者与 Neal Ford 的近距离交流,深入探讨在演讲过程中的疑问,本次活动设置了 Q/A(问答)环节,Neal 对大家的问题进行了简要的回复。

我们对现场的一些问答进行了总结:

Q:底层架构的改写将会动摇整体架构,但在浮现式设计中涉及底层重构的时候怎么办?

A:架构本身也存在演进,通过测试与持续集成来保证架构的稳定改变。

Q:架构的好坏对浮现式设计的引入具有很大的影响,那在架构设计方面是否具有好的一些实践帮助我们更好的使用浮现式设计?

A:这方面存在很多的实践经验,比如 Martin 说到的架构要尽可能简单,现场一时无法一一总结。

Q:历史架构是应该重写还是应该重构?

A:通常来说重构会花费更多的努力,可以通过度量机制找到有问题的那部分,架构上的问题需要重写,设计上的问题需要重构。

Q:我们现在做的是大数据的相关开发工作,主要使用 c 来进行开发,那么,我们想如果迁移到 Java,是否能够提升开发速度?

A:我认为不同的语言都能很好的解决问题,而大数据现在面临的最大问题是网络延迟,你应该把重点放到这个上面。

最后,Neal 还现场赠送了 5 本他的新作《presentaion Patterns》,有关本次对话的更多信息,你可以通过关注 @ThoughtWorks 中国 @InfoQ 了解更多。

2012-09-18 00:001977
用户头像

发布了 89 篇内容, 共 32.6 次阅读, 收获喜欢 4 次。

关注

评论

发布
暂无评论
发现更多内容

做一个 Scrollbar 的思考

cssghost

架构实战营 毕业总结

热猫

rxjs Observable of 操作符的单步调试分析

汪子熙

typescript 前端开发 angular RXJS 7月月更

《你的灯亮着吗》开始解决问题前,得先知道“真问题”是什么

图灵教育

兼容10个浏览器HTML头部配置

写程序的小王叔叔

html 浏览器 浏览器插件 7月月更

leetcode 474. Ones and Zeroes 一和零(中等)

okokabcd

LeetCode 动态规划 算法与数据结构

Android Studio Arctic Fox | 2020.3.1、Gradle 7.0升级记录

yechaoa

android Android Studio Gradle 6月月更 AGP

Ubuntu环境编译OpenJDK11源码

程序员欣宸

Java Openjdk 6月月更

这样的商城系统全开源免费商用,还要什么自行车!

CRMEB

攻防演练中的防泄露全家福

穿过生命散发芬芳

6月月更 防泄露

什么是反向代理?Nginx反向代理如何配置?

wljslmz

nginx 反向代理 6月月更

数据中台咋就从“小甜甜”变成了“牛夫人”?

雨果

数据中台

手把手带你快速入门Electron

是乃德也是Ned

7月月更

远程办公期间,项目小组微信群打卡 | 社区征文

IT蜗壳-Tango

6月月更 初夏征文

电商秒杀系统

Dean.Zhang

一次革命、两股力量、三大环节:《工业能效提升行动计划》背后的“减碳”路线图

脑极体

8253A寄存器浅析

乌龟哥哥

6月月更

云原生到底是什么?它会是未来发展的趋势吗?

Albert Edison

7月月更

激发新动能 多地发力数字经济

CECBC

无需zookeeper安装kafka集群(kakfa3.0版本)

字母哥哥

大数据 kafka 消息队列

架构实战营 模块九:设计电商秒杀系统

热猫

密码学进阶(一):浅谈常见的七种加密算法及实现

No Silver Bullet

加密 文本摘要 数字签名 7月月更

让企业数字化砸锅和IT主管背锅的软件供应链安全风险指北

FN0

安全性 沙箱实验 开源软件供应链

CleanMyMac X4.11最新版本号

茶色酒

CleanMyMac X

面试必答题“聊聊Java中线程的生命周期状态”如何破?

博文视点Broadview

主流实时流处理计算框架Flink初体验

百思不得小赵

大数据 flink 7月月更

投稿开奖丨轻量应用服务器征文活动(5月)奖励公布

阿里云弹性计算

nginx OSS MySQL 数据库 轻量征文

“信任机器”为发展赋能

CECBC

Windbg调试工具介绍

dvlinker

c++ windbg 调试工具

HashMap分析-扩容

zarmnosaj

6月月更

远程办公如何保持高效协同,实现项目稳定增长 |社区征文

三掌柜

初夏征文 7月月更

QClub:对话《卓有成效的程序员》作者、ThoughtWorks软件架构师Neal Ford现场回顾_架构_水羽哲_InfoQ精选文章