在软件开发领域, 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. 前端-CS-04

    一:DOM(文档对象模型) document 简写DOM 1.DOM中定义变量用 var  如下截图中:定义demo变量 2.取一个input输入框中的值的方法: 1)先如1中,在dom中顶一个一个变 ...

  2. 9、MyBatis教程之多对一处理

    10.多对一处理 多对一的理解: 多个学生对应一个老师 如果对于学生这边,就是一个多对一的现象,即从学生这边关联一个老师! 1.创建数据库 CREATE TABLE `teacher` ( `id` ...

  3. pycharm在debug时总是报UnicodeDecodeError

    1,原文链接 解决pycharm run 正常 debug 报 UnicodeDecodeError 错误的问题 2,解决方法 首先尝试 如果上面还不行

  4. python登陆界面尝试

    示例1: """ 编写一个程序 用户可以输入用户名和密码 用户有三次机会 登录成功可以进行相应的操作 输入Q退出系统 """ name_li ...

  5. java例题_04 分解质因数

    1 /*4 [程序 4 分解质因数] 2 题目:将一个大于 2 正整数分解质因数.例如:输入 3, 3=3, 输入 6, 6=2*3,输入 90, 90=2*3*3*5. 3 程序分析:对 n 进行分 ...

  6. DFS 深搜专题 入门典例 -- 凌宸1642

    DFS 深搜专题 入门典例 -- 凌宸1642 深度优先搜索 是一种 枚举所有完整路径以遍历所有情况的搜索方法 ,使用 递归 可以很好的实现 深度优先搜索. 1 最大价值 题目描述 ​ 有 n 件物品 ...

  7. CI/CD版本回滚Jenkins解决方案

    一.创建项目 填写项目名,关系到项目路径对应请谨慎命名 二.项目配置 1.配置字符串参数和选项参数 2.代码仓库配置 3.构建环境 4.构筑脚本配置 5.点击左下方的保存或者应用 三.使用方法 1.发 ...

  8. java面试-生产环境出现CPU占用过高,谈谈你的分析思路和定位

    思路:结合Linux和JDK命令一起分析 1.用top命令找出CPU占比最高的进程 2.ps -ef|grep java|grep -v grep 或者jps -l进一步定位,得知是怎样一个后台程序惹 ...

  9. BLE链路层状态机初探

    状态机 BLE链路层把所有的功能放到五种不同的状态中,在不同的状态分别执行不同的功能. 一般来说,BLE设备大致有这么几种状态:空闲,广播,扫描,发起连接和连接成功. 广播和扫描是相对应的,一个设备广 ...

  10. jasypt-spring-boot提示Failed to bind properties

    1 问题描述 在Spring Boot中使用jasypt-spring-boot进行加密,但是提示: Description: Failed to bind properties under 'spr ...