【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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

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

关注

评论

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

钓鱼网站:详解hosts文件

xcbeyond

Java 域名解析 hosts

海量并发也没那么可怕,运维准点下班全靠它!

华为云开发者联盟

容器 网络 并发 华为云

区块链、人工智能……警惕非法金融借创新概念迷惑投资人

CECBC

区块链 金融

枚举算法练习例题(Python版)

罗罗诺亚

Python 算法 枚举

写作只是消遣?

Geek_db1689

写作 讨论写作 自我感悟 瞎想乱写

SWARM学习1——Kademlia分布式路由表协议

AIbot

区块链 DHT 分布式存储 分布式文件存储 分布式路由

Dell G7 指纹识别设备 - Goodix fingerprint 失效官方解决办法(图文)

Saint_X

硬件

Android |《看完不忘系列》之Retrofit

哈利迪

android

SpringCloud服务注册中心双节点集群(Eureka集群)

xcbeyond

Java 架构 微服务 Eureka 集群

如果你每次面试前都要去背一篇Spring中Bean的生命周期,请看完这篇文章

程序员DMZ

spring 生命周期

集成学习方法及应用,破解AI实践难题

博文视点Broadview

人工智能 学习 AI 周志华

量纲分析(Dimensional Analysis)入门

InfoQ_b5c13aa54782

数学 基础 物理 量纲分析 电磁

Java-技术专题-synchronized关键字

洛神灬殇

低/零代码干掉了传统的开发模式

代码制造者

编程语言 低代码 零代码 信息化 编程开发

易观郭炜:流动水系数造未来

易观大数据

操作系统bochs安装及使用

allworldg

操作系统

关于日期及时间字段的查询

Simon

MySQL sql查询

MySQL5.7升级到8.0过程详解

Simon

MySQL

MySQL索引问题探究手记

架构精进之路

MySQL 索引

实践案例丨教你一键构建部署发布前端和Node.js服务

华为云开发者联盟

node.js 后端 服务器 代码 华为云鲲鹏

恢复青春气息,就靠这套人像美肤算法了

博文视点Broadview

算法 计算机视觉 图像识别 人像

MySQL关于日期为零值的处理

Simon

MySQL

别人家的 DevOps 流水线,价值一个亿

Atlassian

DevOps 数字化转型 金融 Jira 数字银行

STM32-ADC简单学习笔记

 

局域网文件共享

冰糖雪梨多冰少糖

局域网共享 iPad air3 文件传输

面试官:你说你懂i++跟++i的区别,那你知道下面这段代码的运行结果吗?

程序员DMZ

JVM i++

谈一谈Kuberflow

soolaugust

tensorflow 学习 kubeflow Kubernetes 云原生

面试必杀技,讲一讲Spring中的循环依赖

程序员DMZ

spring

是时候学习Linux了

Simon

Linux

自从有了语音开黑小能手,队友再也不会骂我了!

anyRTC开发者

WebRTC 在线教育 直播 RTC RTMP

随手记

InfoQ_0d79a8bcf933

数据结构与算法

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