在软件开发领域, Ward Cunningham 有许多独到的见解与成就。

1949年,Ward Cunningham 出生于印第安纳州的密歇根市,并在莱克县的一个小镇中长大。怀揣着对计算机浓厚的兴趣,在普渡大学学习期间,他获得了跨学科工程(电子工程和计算机科学)学士学位以及计算机科学硕士学位。1978年,Ward Cunningham 完成了全部学业。

( 普渡大学校徽)

毕业后的 Ward Cunningham 先后担任过研发总监、首席工程师等职位,也自己创办了 Cunningham&Cunningham,Inc.——专门从事面向对象编程的咨询公司,以及一个面向软件开发人员的教育性非盈利组织:The Hillside Group。

在自己丰富的软件开发实践的基础上,Ward 总结出了很多经验以及独到的思想,而这些思想也成为日后软件开发人员进行开发实践的准则。

Cunningham 定律与 Wiki

Ward Cunningham 认为:“ 在互联网上获得正确答案的最佳方法不是提出问题,而是发布错误的答案。”这就是 Cunningham 定律,指人们更正错误的答案比回答问题更快。在日后的工作中,Cunningham 也在一直贯彻这个想法。

20世纪80年代末,Cunningham 在使用一个名为 HyperCard 的程序时,发现了这样一个问题:虽然 HyperCard 程序管理了许多称为“卡片”的资料,每张卡片都可划分字段、上传图片,且支持修改编辑。这个类似网页的程序对当时的人们来说很有用,但要想创建卡片与卡片之间的链接,就非常难了。

为了解决这个问题,他在原有程序的基础上增添了一个新的链接功能。用户只需将链接输入卡片上的一个特殊字段,原有每一字段的按钮便会引导用户去新的目标卡片。链接功能加上 HyperCard 卡片的应用,能够让用户更正卡片上的错误内容,并链接到正确的卡片上。

这个在 HyperCard 的程序上写出的小功能,就是 Ward Cunningham 对 Wiki 的最初构想。

1995年,Ward Cunningham 正式推出了第一个 Wiki 网站:WikiWikiWeb,方便程序员们进行思想交流。

关于为什么要创建 Wiki 这一问题,Cunningham 有话要说:“ 起初创建 Wiki,我的目的就是创建一个能够将彼此经验联系起来的环境,从而发现编程的模式语言。”这个想法在他看来稀松平常。以至于后来接受采访时,被问及是否考虑过为 Wiki 的概念申请专利,Cunningham 解释说:“这个想法听起来就像是没人愿意为之付费的东西。”

尽管 Ward Cunningham 不考虑为 Wiki 申请专利,但这并不表明他放弃了 Wiki。自Wiki 诞生之后,他就一直希望在全世界范围内推广 Wiki。

2001年,Cunningham 与他人合著了一本名为《The Wiki Way》的书,书中主要介绍了如何安装、创建并管理 Wiki 系统。2011年,他又启动了 Smallest Federated Wiki 项目——用于 Wiki 联合的软件平台,他为 Wiki 添加了源代码控制系统,以及其他软件开发工具中的分叉功能……

至今,Ward Cunningham 仍在致力于推广 Wiki 技术。

Cunningham 与面向对象编程

作为一名程序员,Ward Cunningham 几乎对所有的编程模式都有所涉猎,包括面向对象和敏捷建模。

他支持面向对象编程中长期关注代码设计的实践,更偏向于注重代码和人的关系。为了推动模式语言的运用,Cunningham 发布了一个新的网站: 模式共享社区,希望将不同作者的软件模式集中在一起,展示现有模式之间的关系,以鼓励用户贡献更多的模式,获得更好的软件。

Cunningham 与极限编程

在创建 Wiki 的前几个月,Ward Cunningham、Kent Beck 一直与坚持软件工程的教条主义者们争论,争论的内容主要在于是否实践代码集体所有权。

Cunningham 认为,“代码集体所有权有很大的好处,不仅能够降低风险,还可以提升开发效率……”而教条主义者们认为,“这简直太荒谬了!实行代码集体所有权后,你永远不会有责任。如果你没有责任,你永远不会有质量。唯一能让你负起责任的方法就是承担责任。如果你不想再让一些人写出 Bug,你就必须把这个责任放在他的身上……”双方并没有说服彼此,但这场争论让  Cunningham 更坚定了维护代码集体所有权的信念。

在设计 Wiki 的时候,Cunningham 认为 Wiki 也应该实现在大型代码库中协作的过程。例如,你在一堆代码中发现了一个问题,并且知道这个问题的解决方案。但是当你想去解决这个问题的时候,必须同这些代码作者们去沟通、协商,这是一个非常困难且麻烦的过程。而实现代码集体所有,实际上就会大大地减少沟通的成本。

因此,Wiki 中应用了代码集体所有权的理念。Wiki “ 开放”的特点决定了当内容不完整或者出现错误的时候,所有人都可以用他们认为合适的方式加以编辑。 在 Wiki 中,所有参与者都对此负责。

Cunningham 与《敏捷宣言》

“ 我宁愿转向下一个想法,也不愿为保持最后一个想法的纯正而奋斗。”

敏捷真正带给软件的是一种能力,通过使团队中的成员达成共同的目标,实现高质量的产品交付。“当《敏捷宣言》的四个价值观被整齐地列在黑板上时,我们只是在感慨,虽然我们是十七个不同的个体,但写在黑板上的内容是我们共同想要表达的东西。”回忆起2001年的雪鸟会议,Cunningham 这样说。

 

而对于“ 稀释”,也就是新想法的注入,他认为,这一行业是在不断发展的,如果不能不停地尝试用多种方法去做事情,就不再会有新的创造力。因此,作为一名极限编程的狂热爱好者,Cunningham 极力支持将敏捷与极限编程的工程实践结合使用。

不论是 Wiki、面向对象编程、极限编程还是《敏捷宣言》,对于这些新的尝试,Ward Cunningham 选择迎难而上。对此,他也有自己的一套看法:“ 如果你想要做的好,那就想办法每天都去做 。选择你害怕的事情,而不是选择你擅长的事情,然后克服它,这就是推动我前行的动力。”

敏捷史话(十七):维基(Wiki)背后的灵感来源—— Ward Cunningham的更多相关文章

  1. 敏捷史话(八):敏捷的破局之道——Martin Fowler

    在 Martin Fowler 的世界里,任何事情都有最优解. 1963年,Martin 出生于英格兰的沃尔索尔(Walsall),也在同样位于沃尔索尔的玛丽女王文法学校中接受中等教育.在这里的乡村中 ...

  2. 专业仿百度百科,维基wiki百科网站开发建设

    专业仿百度百科,维基wiki百科网站开发建设,有需要的朋友可以欢迎私聊我 提供一站式服务:联系QQ:8582-36016(私聊),微信:lianweikj 电话:186-7597-7935 支持终端: ...

  3. 敏捷史话(二):Scrum社区的悲剧性损失——Mike Beedle

    2018年3月23日,在美国的芝加哥发生了一起意外刺杀事件.一名男子刺杀了一位首席执行官,而这位不幸的首席执行官就是<敏捷宣言>的合著者--Mike Beedle.Mike 的这场意外令 ...

  4. 敏捷史话(十五):我发明了敏捷估算扑克牌 —— James Greening

    雪鸟会议 雪鸟会议前夕,James Grenning 在 Object Mentor 与 Robert C. Martin 一同工作,彼时组织雪鸟会议的 Bob 大叔盛情邀请 James,告知他会议的 ...

  5. 敏捷史话(十三):我被 Facebook 解雇了——Kent Beck

    2011年,Kent Beck 加入了 Facebook .那时候的他已年过半百,几十年的经验让他自认为非常了解软件行业.在 Facebook 的新手训练营期间,Kent 开始意识到,Facebook ...

  6. 敏捷史话(四):敏捷是人的天性 —— Arie van Bennekum

    敏捷是人的天性,是你与生俱来的东西.面对敏捷,Arie van Bennekum 下了这样一个结论. 但这并不意味着人们只能通过天赋获得敏捷,对于想要学习敏捷的人来说,敏捷绝不是仅仅靠学习僵化的框架. ...

  7. 敏捷史话(五):敏捷已逝 —— Dave Thomas

    " 敏捷已逝,但敏捷精神长存.因为所谓的敏捷专家卖给你的是方法论,而不是价值."当多数人都在从"敏捷"身上榨取利益时, Dave Thomas 成为了一位逆行者 ...

  8. 敏捷史话(六):也许这个人能拯救你的代码 —— Robert C. Martin

    Robert C. Martin( 罗伯特·C·马丁),作为世界级软件开发大师.设计模式和敏捷开发先驱.C++ Report杂志前主编,也是敏捷联盟(Agile Alliance)的第一任主席,我们尊 ...

  9. 敏捷史话(七):从程序员、作家到摇滚乐手——Andy Hunt的多面人生

    与其说 Andy Hunt 是敏捷宣言的创始人,不如说他是一名专业作家来得更为合适.他的<实用程序员><程序员修炼之道:从小工到专家><编程 Ruby:实用程序员指南&g ...

随机推荐

  1. 2019HDU多校第七场 HDU6646 A + B = C 【模拟】

    一.题目 A + B = C 二.分析 比较考验码力的题. 对于$c$,因为首位肯定不为0,那么$a$或者$b$至少有一个最高位是和$c$平齐的,或者少一位(相当于$a$+$b$进位得到). 那么这里 ...

  2. IDA 创建本地类型

    在IDA中我们常常使用 shift+F9打开结构体视图,ins 创建结构体,但操作有些繁琐. 我们可以在View-->Open Subviews-->Local Types(视图--> ...

  3. Benjio0-Curriculum Learning 2009

    Curriculum Learning 2009 核心思想: 相比于随机选取训练样本对模型进行训练,使用由易到难的样本(更加复杂,包含更多信息)训练模型可以取得更好的训练效果. 由于这种训练模式类似于 ...

  4. 爬虫入门到放弃系列07:js混淆、eval加密、字体加密三大反爬技术

    前言 如果再说IP请求次数检测.验证码这种最常见的反爬虫技术,可能大家听得耳朵都出茧子了.当然,也有的同学写了了几天的爬虫,觉得爬虫太简单.没有啥挑战性.所以特地找了三个有一定难度的网站,希望可以有兴 ...

  5. 你才不是只会理论的女同学-seata实践篇

    本文主要内容为seata的实践篇,理论知识不懂的请参考前文: 我还不懂什么是分布式事务 主要介绍两种最常用的TCC和AT模式. 环境信息: mysql:5.7.32 seata-server:1.4. ...

  6. 阳明-K8S训练营全部文档-2020年08月11日14:59:02更新

    阳明-K8S训练营全部文档 Docker 基础 简介 安装 基本操作 Dockerfile Dockerfile最佳实践 Kubernetes 基础 简介 安装 资源清单 Pod 原理 Pod 生命周 ...

  7. Dubbo 编解码那些事

    一.背景 笔者在一次维护基础公共组件的过程中,不小心修改了类的包路径.糟糕的是,这个类被各业务在facade中进行了引用.传递.幸运的是,同一个类,在提供者和消费者的包路径不一致,没有引起各业务报错. ...

  8. 几十行代码实现ASP.NET Core自动依赖注入

    在开发.NET Core web服务的时候,我们习惯使用自带的依赖注入容器来进行注入. 于是就会经常进行一个很频繁的的重复动作:定义一个接口->写实现类->注入 有时候会忘了写Add这一步 ...

  9. Java刷题-stack

    一.getMin栈 题目描述 实现一个特殊功能的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作. 输入描述: 第一行输入一个整数N,表示对栈进行的操作总数. 下面N行每行输入一个字符串S ...

  10. day-10 xctf-cgpwn2

    xctf-cgpwn2 题目传送门:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&id=5 ...