练习四

一、学术界、工业界对结对编程已经有不少研究,请阅读至少两篇相关论文或论文,结合自己的切身体会总结一下。

结对编程是软件开发过程中所使用的一种技术,两名程序开发人员共享同一台工作站。其中一个扮演驾驶者的角色,进行代码编写,另一个扮演观察员或导航员的角色,对代码进行评测。他们可以轮流编写代码和测试案例,还可以坐在一起交流思想,解决问题,而不会想偷懒去刷手机。

结对编程的好处:

1、互相鼓励,不容易沮丧:团队工作能增加成员的工作积极性。因为在面对问题的时候,会有人一起分担,共同尝试新的策略。

2、互相监督,不容易偷懒:两个人一起工作需要互相配合,如果想偷懒去干别的,就会拖延工作进度。

3、互相学习编程技巧:在编程中,相互讨论,可以更快更有效地解决问题,互相请教对方,可以得到能力上的互补。

4、可以培养和训练新人:让资深开发者和新手一起工作,可以让新人更快上手。

5、多双眼睛,少点 bug:两人互相监督工作,可以增强代码和产品质量,并有效的减少 BUG。

结对编程的坏处:

1、与合不来的人一起编程容易发生争执,不利于团队和谐。

2、经验丰富的老手可能会对新手产生不满的情绪。

3、一山不容二虎,开发者之间可能就某一问题发生分歧,产生矛盾,造成不必要的内耗。

4、开发人员可能会在工作时交谈一些与工作无关的事,分散注意力,造成效率低下。

等等……

二、这是我的MBTI类型测试:http://www.apesk.com/mbti/submit_email_date.asp?code=223.73.241.5&user=17281131

ISFP安静、友好、敏感、和善。享受当前。喜欢有自己的空间,喜欢能按照自己的时间表工作。对于自己的价值观和自己觉得重要的人非常忠诚,有责任心。不喜欢争论和冲突。不会将自己的观念和价值观强加到别人身上。

INFP

理想主义,对于自己的价值观和自己觉得重要的人非常忠诚。希望外部的生活和自己内心的价值观是统一的。好奇心重,很快能看到事情的可能性,能成为实现想法的催化剂。寻求理解别人和帮助他们实现潜能。适应力强,灵活,善于接受,除非是有悖于自己的价值观的。

INTP

对于自己感兴趣的任何事物都寻求找到合理的解释。喜欢理论性的和抽象的事物,热衷于思考而非社交活动。安静、内向、灵活、适应力强。对于自己感兴趣的领域有超凡的集中精力深度解决问题的能力。多疑,有时会有点挑剔,喜欢分析。

ESTP

灵活、忍耐力强,实际,注重结果。觉得理论和抽象的解释非常无趣。喜欢积极地采取行动解决问题。注重当前,自然不做作,享受和他人在一起的时刻。喜欢物质享受和时尚。学习新事物最有效的方式是通过亲身感受和练习。

ESFP

外向、友好、接受力强。热爱生活、人类和物质上的享受。喜欢和别人一起将事情做成功。在工作中讲究常识和实用性,并使工作显得有趣。灵活、自然不做作,对于新的任何事物都能很快地适应。学习新事物最有效的方式是和他人一起尝试。

ENFP

热情洋溢、富有想象力。认为人生有很多的可能性。能很快地将事情和信息联系起来,然后很自信地根据自己的判断解决问题。总是需要得到别人的认可,也总是准备着给与他人赏识和帮助。灵活、自然不做作,有很强的即兴发挥的能力,言语流畅。

ENTP

反应快、睿智,有激励别人的能力,警觉性强、直言不讳。在解决新的、具有挑战性的问题时机智而有策略。善于找出理论上的可能性,然后再用战略的眼光分析。善于理解别人。不喜欢例行公事,很少会用相同的方法做相同的事情,倾向于一个接一个的发展新的爱好。

ESTJ

实际、现实主义。果断,一旦下决心就会马上行动。善于将项目和人组织起来将事情完成,并尽可能用最有效率的方法得到结果。注重日常的细节。有一套非常清晰的逻辑标准,有系统性地遵循,并希望他人也同样遵循。在实施计划时强而有力。坦诚、果断,有天生的领导能力。能很快看到公司或者组织程序和政策中的不合理性和低效性能。

ESFJ

热心肠、有责任心、合作。希望周边的环境温馨而和谐,并为此果断地执行。喜欢和他人一起精确并及时地完成任务。事无巨细都会保持忠诚。能体察到他人在日常生活中的所需并竭尽全力帮助。希望自己和自己的所为能受到他人的认可和赏识。

ENFJ

热情、为他人着想、易感应、有责任心。非常注重他人的感情、需求和动机。善于发现他人的潜能,并希望能帮助他们实现。能成为个人或群体成长和进步的催化剂。忠诚,对于赞扬和批评都会积极地回应。友善、好社交。在团体中能很好地帮助他人,并有鼓舞他人的领导能力。

ENTJ

坦诚、果断,有天生的领导能力。能很快看到公司/组织程序和政策中的不合理性和低效能性,发展并实施有效和全面的系统来解决问题。善于做长期的计划和目标的设定。通常见多识广,博览群书,喜欢拓广自己的知识面并将此分享给他人。在陈述自己的想法时非常强而有力。

三、是否需要有代码规范

 - 这些规范都是官僚制度下产生的浪费大家的编程时间、影响人们开发效率, 浪费时间的东西。

- 我是个艺术家,手艺人,我有自己的规范和原则。

- 规范不能强求一律,应该允许很多例外。

- 我擅长制定编码规范,你们听我的就好了。

- 规范的代码可以促进团队合作

- 规范的代码可以减少bug处理

- 规范的代码可以降低维护成本

- 规范的代码有助于代码审查

- 养成代码规范的习惯,有助于程序员自身的成长

四、 代码复审的讨论

    首先世界级的软件也会因为小小的纰漏而导致世界级的问题。例如我们常常听到的安全漏洞和紧急补丁。其次,软件的开发是一个社会性的活动, 有它的规律。其中一个规律就是“破窗效应”,如果团队成员看到同伴们连一些细小的规范都不遵守,那自己还要严格执行单元测试么?另一个成员看到这个模块连单元测试都没有,那他自己也随意修改算了。这样下去,整个软件的量可想而知。

完全同意邹老师的观点。代码应该复审,规范应该要保持。

五、阅读别人的代码有多难?

我们经常抱怨阅读别人的代码很难, 我们自己在写代码的时候,是否考虑到如何让代码更易于阅读和维护呢?

    总结文章中主要观点:

    使代码遵从工具

    坚持使用一种命名模式

    使用断言来记录先决条件(preconditions)和后置条件(postconditions)

    别缩写英文单词

    C语言标准运行时库的设计不是很优秀。别去效仿它

    别写“聪明”的代码

    理解编程语言特性的设计初衷,使用这些特性去做它们适合完成的工作,而不是它们能做到的工作

按功能单元划分源码树,而不是按组织结构

六、结对编程中不好的习惯—你经历过么,如何提醒同伴改进?

不拘小节的人 两人在一起近距离地工作,但是却不注意个人卫生和互相尊重。开始合作前,吃了很多大蒜就来了。

喜欢发号施令的人 总是对敲键盘的人说:“到末行,加个反括号,然后……”。他不去关注解决方法和下一步该怎么做,而过度关注一些编程细节。

拼写纠错者 坐在你旁边,纠正你输入的每个错误字符。当然,他没有时间来真正地进行导航。

深藏不露者 仅仅自己敲着代码而不告诉别人他在做什么。领航员不得不靠自己去弄懂代码。关于该用什么方法,该选择哪种设计,领航员和实施者之间完全没有交流。

跳跃很大的人 他们喜欢在代码中进行大范围的跳跃,这样领航员便不知道进行到哪里了。

答:(1)个人的仪表是对对方的尊重,如果我的同伴真的这样,首先我会提出一起去外面咖啡厅工作或者讨论,这样一般就会适当得体一些,并且给他口香糖吃。

(2)首先要肯定对方的提醒,其次也向他提出,我们应该首先解决问题,等一下再一起纠正这些编程规范。

(3)好像是开车的时候被人不断提醒一样,有的时候这点确实让人心焦,尤其是很多的拼写错误都是一时手误而且编程工具会自动提醒,当遇到这样的伙伴时,我觉得应该引导他像别的方向注意,在编程前就提出一定的问题希望帮忙留意。让其把重点放在代码上。

(4)一个组里往往会有一个超过别人很多的人,他的思路和使用的新的技术往往让人一头雾水。结构和代码也不太理解。这个时候应该做出改变的不只是实施者,还有看代码的人,要直接提出疑问,让实施者回答,并且多进行讨论交流意见,并且希望在编程中注释。

(5)在看别人编程时,修改代码时,因为不熟悉别人的代码,修改时大幅度的跳跃和转换,让人不知道整个工程的现状。这个时候可以适当让实施者停下,和他讨论修改或者跳跃的原因,理清思路。

猜你喜欢

转载自www.cnblogs.com/zzsmile/p/9033211.html