在做的云里雾里的individual project之后,这次的pair project让我开始找到了一下软件工程的感觉!其中原因除了C#能稍微捯饬明白了,还有就是合作的力量。
本次结对编程进程:
10.10~10.15 G4和Sui老师各自下载elevframework,尝试读懂代码
10.16~10.19 G4和Sui老师经过交流,发现大家都没怎么读懂框架,但是大限将至,继续读代码的同时也要想算法,Sui老师发了一篇博客
10.20~10.22 G4还苦于代码读不懂,而本班唯一的明白人不知去向,G4想等待明白人归来问之;21号晚,Sui老师开始动手写一个简易版的算法,也就是BUS算法的初级优化版。不管多么简易的算法,能够在着手实践就不简单!怀着对Sui老师的敬佩之情,G4搬着凳子到Sui老师宿舍开始了真正的结对编程。即便是一个简单的算法,在这个框架中实现都要理解了整个框架的工作机制、解决众多的边界问题、细节问题才能成功实现。在李栋大神的帮助下,最终G4和Sui老师用了一晚上的时间搞定了这个算法,虽然只是BUS算法的简单改进,但G4和Sui老师都非常欣喜。不过,既然解决了众多与算法无关的细节问题,G4和Sui老师想可以进一步优化这个算法。G4和Sui老师交流确定下算法后,G4在第二天中午实现了这个算法,运行结果不出意料地更加快了。
初步算法:
BUS算法中,StopAtEachFloor方法令电梯在每层都停靠。我们希望电梯在每次运行前,判断一下下一层是否有内部与外部请求,如果没有就停靠到下下层。
改进算法:
在初步算法基础上,进阶算法中,电梯在每次运行前会从电梯当前楼层开始,到当前方向顶层依次判断此层是否有请求,发现第一个请求时设置此层设为目的地;若直至当前方向顶层也没有请求,则改变运行方向。同时,改进了电梯初始状态时的行为:初步算法中令电梯初始向上运行,进阶算法中当外部请求发出时,判断请求发出楼层,根据电梯当前楼层设置相应的电梯运行方向。
合作编程心得:
《移山之道》中,关于结对编程的优点是这样写的:
(1)在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力。
(2)对于开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。
(3)在企业管理层次上,结对能更有效地交流,相互学习和传递经验,能更好地处理人员流动。因为一个人的知识已被其他人共享。总之,如果运用得当,结对编程能得到更高的投入产出比(Return of Investment)。
在这次pair work中我深切地体会到了前两点:我是个有点懒的人,如果事情有些基本问题搞不清楚我往往感到无从下手,而当别人都开始动手的时候又会有些急躁。但是我对工作很执着,比较完美主义。而partner隋宇豪比较积极主动,勇于实践,但考虑略显不够细致。万事开头难,隋宇豪为我们的结对编程创造了一个良好的开始。当我们的简易算法得以实现后,我并不满足于这个初步的尝试,于是我们共通进行改进、优化。我认为我们两人配合还是很协调的。而结对编程的缺点,如老师在课上所讲,时间安排不如个人灵活、双方需要相互熟悉、磨合的过程、小型项目不需要太多人等。
程序运行结果:
passenger1:
passenger2:
passenger3: