写点什么

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:001864
用户头像

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

关注

评论

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

加密货币初创企业指南:如何寻找代币与市场的契合点

TechubNews

linux各个目录的作用

天翼云开发者社区

Linux 目录

云主机(操作系统:CentOS7版本)安装nfs客户端,挂载文件系统

天翼云开发者社区

云计算 操作系统 云主机

K8s的Pod资源对象如何实现微服务架构?

OSCTraining

pod #k8s 源来如此公开课

Junit4遇上chatGPT

京东科技开发者

大数据与人工智能初了解

天翼云开发者社区

人工智能 大数据

jenkins源代码管理+接入钉钉api发送接口自动化测试报告

测吧(北京)科技有限公司

测试

文献解读-肿瘤测序-第六期|《基于CRISPR/Cas9技术的肿瘤突变负荷测量新参考物质的开发》

INSVAST

基因数据分析 生信服务 肿瘤测序

基于SkyEye运行Qt:著名应用程序开发框架

DevOps和数字孪生

qt SkyEye

麦当劳元宇宙在新加坡首次亮相

区块链开发团队DappNetWork

加密货币和区块链技术的支柱

区块链开发团队DappNetWork

更懂外贸老板的智能客服,XTransfer上线智能小秋2.0

XTransfer技术

AI 智能客服

刷新方盒子最快10万销量纪录 捷途旅行者何以颠覆越野市场?

Geek_2d6073

数字先锋| “药”上云!天翼云助力国药数科加速建设“国药云”

天翼云开发者社区

云计算 架构 云生态大会

如何创建一个线程池,为什么不推荐使用Executors去创建呢?

EquatorCoco

Java 多线程 开发语言

大模型在推荐系统中的精准推荐策略与实践

京东科技开发者

让存储绿“翼”盎然,天翼云HBlock入选工信部目录!

天翼云开发者社区

云计算 存储 天翼云 中国电信

浅谈Redis的三种集群策略及应用场景

天翼云开发者社区

集群 redis 底层原理

为什么要制定流程规范?

老张

质量保障 checklist 流程规范

一文搞懂 Spring 循环依赖

江南一点雨

Java spring

YashanDB携手宏杉科技助力国产软件生态发展

Geek_2d6073

大模型应用之基于Langchain的测试用例生成

京东科技开发者

淘宝按关键字搜索API返回值应用指南:电商运营的得力助手

技术冰糖葫芦

API Explorer api 货币化 API 文档

云行| 龙云展翼 智绘未来,天翼云助力黑龙江打造数智产业新高地!

天翼云开发者社区

人工智能 云计算

国云注智,聚力向新!天翼云打造五位一体智算云能力体系!

天翼云开发者社区

云计算 算力 数字中国 云生态大会

GPT-4o初体验:视觉、听觉跨越式升级

蓉蓉

ChatGPT gpt4o

从数据到决策:拼多多商品详情API在市场分析中的应用

Noah

手把手教你用Spring Boot搭建AI原生应用

百度Geek说

企业号 6 月 PK 榜 AI原生应用 Spring AI

MySQL Shell 使用指南

Simon

MySQL mysqlshell

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