在幼儿园学会的结对编程
<o:p></o:p>
英文原文dhttp://collaboration.csc.ncsu.edu/laurie/Papers/Kindergarten.PDF
读来觉得有点意思,翻译了一下,与大家共享。
在1986年,Robert Fulghum出版了一本《那些人生中最重要的道理我在幼儿园里都学过(All I Really Need to Know I Learned in Kindergarten)》的书籍。它包含了一些非常棒的思想。Laurie A. Williams和Robert R. Kessler在1999年發表的文章《All I Really Need to Know about Pair Programming I Learned In Kindergarten》模仿該書風格對結對編程做出了生動的詮釋。<o:p></o:p>
摘要<o:p></o:p>
共享(Share everything)<o:p></o:p>
公平的游戏(Play fair)<o:p></o:p>
不要打击别人(Don’t hit people)<o:p></o:p>
把东西放回你发现他们的地方(Put things back where you found them)<o:p></o:p>
清除你自己的垃圾(Clean up your own mess)<o:p></o:p>
不要拿不属于你的东西(Don’t take things that aren’t yours)<o:p></o:p>
当你伤害了别人的时候要说对不起(Say you’re sorry when you hurt somebody)<o:p></o:p>
飯前洗手(Wash your hands before you eat.)<o:p></o:p>
冲洗(Flush)<o:p></o:p>
热曲奇和冷的牛奶对你有好处(Warm cookies and cold milk are good for you)<o:p></o:p>
过平衡的生活-每天學一些,思考一些,畫唱玩跳,工作(Live a balanced life– learn some and think some and draw and paint and sing and<o:p></o:p>
dance and play and work every day some.)<o:p></o:p>
每天下午午睡片刻(Take a nap every afternoon)<o:p></o:p>
過馬路看紅燈,手掺手(When you go out into the world, watch out for traffic, hold hands and stick together)<o:p></o:p>
意识到奇迹(Be aware of wonder)<o:p></o:p>
<o:p> </o:p>
簡介<o:p></o:p>
结对编程是一个编程模式。两个程序员并排坐在一台电脑前,面对同一个显示器,使用同一个键盘,同一个鼠标一起工作。他们一起分析,一起设计,一起写测试例子,一起编码,一起单元测试,一起整合测试(Integration Test),一起写文档等。基本上所有的开发环节都一齐肩并肩地,平等地,互补地进行开发工作。這種方式已被證實可以提高軟件產品的生産效率和質量。Williams(本文作者之一)在1999年所做的調查表明,100%的PPer在使用這種工作方式時比單獨開發對他們的工作品質更有信心。同時96%的認爲更喜歡這樣來工作。然而大多數程序员長期習慣于單獨工作,並抵制先結對編程轉變。本文的目的就是幫助程序員成爲高效的PPer。這種轉變需要每天實踐一些準則,正如上面Robert Fulghum的詩。詩中每行詮釋了成功實施結對開發的必修課。<o:p></o:p>
結對編程成功的證據<o:p></o:p>
衆多轶事趣闻和统计表明PP的益处。XP方法论的成功极大归功于PP。XP最初由Smalltalk开发社区和Kent Beck及其同事(Ward Cunningham和 Ron Jeffries)提出。XP的成功引起了许多德高望重的软件工程研究者和咨询师们的兴趣。XP获得如此名声的典例是于1997年启动的克莱斯勒汽车综合薪资系统(Chrysler Comprehensive Compensation system)。在发现最初开发的重大问题后,Beck和Jeffries应用XP概念重新启动项目。该系统每月支付超过10,000员工的薪水,有2000个类和30,000个方法,1998年按时投入使用直到今天。此外,Ford Motor公司的开发者使用传统瀑布方式,花费四年构建车辆成本和赢利系统(Vehicle Cost and Profit System),以失败收场。而XP开发者使用不到一年时间成功实现了该系统。<o:p></o:p>
XP的成功极大归功于PP。所有代码产品有两个人编写。XP如此热衷于支持PP,以致于原型开发都两个人来做。结对工作一个关键的因素就是持续的Code Review,旁边那个人可发现很多明显的但未被注意到的缺陷,数量之多令人惊讶。Beck(1999)的实践结果证明,两个程序员一起工作比单独工作快两倍多,对解决方案的思考多于两次,因此可以预防和发现更多缺陷,产品有更好的品质。<o:p></o:p>
<o:p> </o:p>
共享(Share everything)<o:p></o:p>
在PP中,两个程序员被安排做一件工作(设计,算法,Coding等)。两个人好像公用同一个大脑,负责这件工作的各个方面:一个人编写代码,而另一个人持续的Review;在这个过程中双方都是平等的。“你的设计有个问题”,“这个问题是你那部分的”,这种言辞或想法是不能接受的。 “我们得改善我们的这个设计”, 会更好。每个人都对整个工作负责。<o:p></o:p>
<o:p></o:p>
公平的游戏(Play fair)<o:p></o:p>
在PP中,有一个人是主控的,他正控制键盘或记录设计思路,同时另一个人持续的Review工作成果。即使当一个人明显比另一个更有经验,轮流“主控”也是很重要的。让一个人只是做观众,会让其感觉此事与己无关,或者自己无关紧要。而且此人也并非只是做一个被动的观众,他是以一直积极的参与其中.“看别人写程序就像看沙漠中的草干死一样有趣”(Beck)。众多PP调查表明,大约90%的PPer中最主要的人并非敲键盘的那个人,而是旁边那个做持续的分析,设计和代码Review。“当一个人忙于敲代码时,另外一个则思考更策略层的东西——接下来的开发如何进行?是否会走入死胡同?有没有更好的策略?”(Beck)<o:p></o:p>
<o:p> </o:p>
不要打击你的伙伴(Don’t hit your partner)<o:p></o:p>
确保你的伙伴集中精力在工作上。毫无疑问,结对工作会使每个人“浪费”更少的时间在读邮件,浏览网页上,因为你的伙伴正等你输入呢。而且每个人都希望对方遵守预定的开发规则。<o:p></o:p>
调查结果表明:“每个人会更努力,因为必须和另一个人保持同样的节奏;没有人会觉得可以偷懒”。因此,提高工作效率和质量是必然的。<o:p></o:p>
<o:p> </o:p>
把东西放回你发现他们的地方(Put things back where you found them)<o:p></o:p>
思想是很奇妙的东西。如果你一直思考某件事情,你的大脑就会认为它是真的。假如你一直考虑一些负面的东西,比如“我是个很糟糕的程序员”,不久你的大脑就会相信你了。然而,每当这些东西想溜进你的脑子时,任何人都可以控制自己,把这些东西放回你发现他们该呆的地方——垃圾桶。对众多PPer的调查证实:很难同对自己的技术能力不自信的人一同工作。“如果我和你一起工作,你会发现我从来不处理异常”。这种没有安全感的程序员应该把PP看作一种提高自身技术能力的方式,因为有人会帮助检查代码并反馈给你。一项调查回复:“PP对我来说最棒的就是持续的讨论教会我设计和编程时明确思路,这使我成为更好的程序员”。有两个研究者调查了750名合作工作的程序员发现:使用频率最高和价值最高的沟通是“同行间的讨论”。“面对自己无法单独解决的问题的标准答案是求助于同事”。而在PP中,“被求助的同事”随手可得。两个人一起可以解决无法单独解决的问题,并提升每个人的技术能力。<o:p></o:p>
另一极端思想——“我是个很牛的程序员,与我结对的人都太嫩了”——也应该放回到垃圾桶,否则极可能破坏合作关系. 约翰·冯·诺伊曼(John von Neumann) ,一个伟大的数学家,冯·诺伊曼计算机架构的创始人,常常会认识到自己的不足,让别人Review他的工作。“And indeed, there can be no doubt of von Neumann's genius. His very ability to realize his human limitation put him head and shoulders above the average programmer today . . . Average people can be trained to accept their humanity -- their inability to function like a machine -- and to value it and work with others so as to keep it under the kind of control needed if programming is to be successful。<o:p></o:p>
<o:p> </o:p>
清除你自己的垃圾(Clean up your own mess)<o:p></o:p>
PPer们常说,这太有趣了,我的同伴发现了这么多明显而愚蠢的问题。相比正式评审会议发现的缺陷,PPer会毫无怨言移除同伴发现的缺陷。现有的软件工程技术很重视缺陷的预防和有效移除,或许PP经典地概括了如何预防和移除缺陷。“给我足够的眼球,曝光所有Bug”。<o:p></o:p>
<o:p> </o:p>
不要太严肃(Don’t take things too seriously)<o:p></o:p>
“谦虚编程”(Ego-less programming)——Gerald Weinberg20多年前在《计算机编程心理学》(The Psychology of Computer Programming)中提出思想——在有效实施PP中是必要的。调查表明:过度自我会破坏合作关系。首先,“舍我其谁”的态度会阻碍程序员考虑他人的思路;其次,过度自我的程序员在被质疑时会认为不被信任。<o:p></o:p>
《计算机编程心理学》中讨论一个重要场景是关于Review一个程序员的代码。在糟糕的一天,他被搞得哭笑不得,因为在13行代码中发现了17个Bug。最终,修改了这些Bug后,程序顺利通过测试并上线使用。如果这个程序员太自信而不接受这个结果,后果可想而知。让另一个人持续而客观的审核你的设计和代码,是PP的益处之一。“人的眼睛有无穷的力量,可以无视它不想看到的东西;如果让程序员单独工作,会漏掉别人一眼就看明的错误”。<o:p></o:p>
相反,程序员对他的同伴唯唯是诺,唯恐造成紧张气氛,对合作关系同样没有什么好处。在交换思想时,存在争论是正常的。在过度自我和畏畏缩缩中有一个平衡,而PPer会经历一段最初的磨合期才能形成这种平衡。Ward Cunningham(XP创始人之一)认为磨合期可能会花几个小时到几天,因人而异,因工作性质而异。<o:p></o:p>
<o:p> </o:p>
当你伤害了别人的时候要说对不起(Say you’re sorry when you hurt somebody)<o:p></o:p>
在调查中,96%的PPer认为合适的工作间对他们的工作很关键。程序员必须能并排坐在一台电脑前,同时看屏幕,使用同一个键盘,同一个鼠标。下图中,右边的设置要好于左边。<o:p></o:p>
<v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600
分享到:
相关推荐
YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;
JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代
内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。
YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;
系统可以提供信息显示和相应服务,其管理新冠抗原自测平台小程序信息,查看新冠抗原自测平台小程序信息,管理新冠抗原自测平台小程序。 项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 部署容器:tomcat7 小程序开发工具:hbuildx/微信开发者工具
YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;
内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。
新建 文本文档.docx
hw06
3. Kafka入门-安装与基本命令
燃气管道施工资质和特种设备安装改造维修委托函.docx
AI大模型研究相关报告
lab02
仅供学习使用,其他用途请购买正版资源AVPro Video Core Windows Edition 2.2.3 亲测可用的视频播放插件,能丝滑播放透明视频等.
建设工程消防验收现场指导意见表.docx
MVIMG_20241222_194113.jpg
五相电机双闭环矢量控制模型_采用邻近四矢量SVPWM_MATLAB_Simulink仿真模型包括: (1)原理说明文档(重要):包括扇区判断、矢量作用时间计算、矢量作用顺序及切时间计算、PWM波的生成; (2)输出部分仿真波形及仿真说明文档; (3)完整版仿真模型:包括邻近四矢量SVPWM模型和完整双闭环矢量控制Simulink模型; 资料介绍过程十分详细,零基础手把手教学,资料已经写的很清楚
YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;
项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 服务器:tomcat7