开始、结束与开始
by李畅 李雅楠
看似漫长实则短暂的结对编程项目就这么结束了。细细回想起来,其中更有着点滴的感悟与体会。那么,让我们一切从头说起,慢慢回味其中的点滴。
Part 1
初遇结对编程,对其中的点滴真的是可以说完全不了解。结对编程?如何去做?怎么去做?又会有什么结果?一切,起于未知。
而在从个人项目到结对编程项目转换的初始,就开始体会到结对编程项目的细微好处了。首先是相互之间的互看代码。(先例行感慨一下自己的搭档真的很厉害)在互看代码的过程中,我们开始了解对方的思路,开始明确对方的想法与解题方法。有的地方,我们不谋而合,有的地方,她更胜一筹,有的地方,我可能有些特色,有的地方,我们都互有缺陷……没有人的代码生来完美,也没有人的代码一处不错,我们都互有优缺点,我们都互有需要学习和可以被学习的地方……我们,互相在学习与探讨中成长。
了解搭档代码的过程,对自己有着很好的提升作用。之于我,在理解的过程中明白了自己的不足,明白了自己对需求理解的不透彻,也明白了不同人对于同一需求的不同理解……在这个过程中,我明白了很多。而这一切,不过是结对编程初起步。我们才刚刚开始。
Part 2
代码的开启,源于一个词——复用。(今天我就要疯狂吹我搭档)搭档的个人项目代码几近完美,至少从功能实现上来说,她对功能实现的解读对我真的是启发很大。而且她代码的扩展性很强,在个人项目中她就已经做出来了界面,再者针对后续操作更能看出她代码的可扩展性,所以我们以搭档的代码作为复用基础。而在复用的过程中,我们也认识到分模块编写代码及简约一个函数中包含内容的重要性与必要性。
代码复用,简单来说就是,你把一个功能写成一个模块, 以便当再次需要相同功能的时候,可以直接使用,而不用重新开发。函数,继承等,大抵都是运用了这种思想。而代码重用,也是面向对象编程的一个突出部分,当然,亦是面向对象与面向过程两种编程的不同所在。
Part 3
Part 4
回归根本,从头到尾去回忆结对编程中的点滴,感觉其中伴随着茫然与收获。作为一个代码能力较弱而且不善于使用API的人,在撰写代码的过程中遇到了许多的困难,很多地方都是通过查找相关资料以及看网上的大神们写的博客去一点点扣出来解决的,还有一部分是咨询搭档去进行解决理解的。面对细致的项目需求和其中种种复杂的要求点,最初真的是茫然的,对Java语言的不熟悉,对HTML语言的不了解,对CSS,JavaScript语言的茫然,想要做出来一个基于网页的系统,谈何容易。从零起步,补充对应的知识,通过查找资料解决种种困难与难题。在短暂的时间内,要学习自己不了解的语言,一个项目组有许多的技术分工,两个人又要去承担其中的全部职位,从需求文档,到设计网页,从点点需求,到前后端撰写。我们走过了漫漫长路,初始之时,茫然相伴,结束之时,欣喜相随。
Part 5
本次结对编程,有所收获也是有所遗憾的,首先结对项目处于国庆假期,和搭档天各一方分居两地,相互之间进行交流与一些局部细节的处理等代码上的问题,以及结对编程本身的意义都无法得到很好地施行与扩展,假期的特殊性导致两个人无法很好地完成结对编程的需要与意愿,初衷没有得到良好的实现。其次,在存储用户注册信息时,通过讨论和查阅资料,大概得出了三种解决方式,第一,存储到文件,第二,运用数据库,第三,运用cookie的相关知识将其保存到浏览器。和搭档针对三种不同的方案进行了探讨,由于数据库的搭建较为费时费事,且我们刚开始数据库的学习,对其中的操作不甚了解,所以这个最为快捷有效且常用的方法只能忍痛割弃,而cookie的操作又过于麻烦,于是只能选择很low的文件存储。在文件存储的过程中,起初考虑创建指定路径下的文件夹,本身有顾及到在IOS系统上运行的情况(在我们的助教小姐姐的提醒下突然发现了还有Mac的情况),但是在查阅资料发现提及的相关资料几乎为0,以及对Mac等电脑的不理解,导致对文件夹在Mac电脑上生成的代码不够明确,所以只能在根目录下创建,文件存储在相对路径下而不是绝对路径,存储后的结果属于理论上可以存储在电脑中,具体位置可能是jdk的环境也可能是处在编译器所在的环境。对不同的电脑可能性不同,并且在编写完代码后没有在Mac平台上进行测试,也是存储文件操作中的遗憾之处了。而在网页设计中,我们的网页初始设计有7个页面(分别是登录界面,注册中输入手机号和接收验证码界面,注册中输入确认密码界面,选择题目类型界面,输入题目数量界面,做题界面和显示分数界面),但是在后期对网页进行编码以及链接前后端的过程中,发现其中的一些问题,包括本身编码者技术不够成熟的情况,最后为了能够将其完美解决,不得不进行更改,与最初的需求文档(见博客最后附件)的需求没有完全符合匹配。面对最后的网页结果,虽然实现了需求,但是与最初设想不同,也算是在编程过程中不完善的部分。
Part 6
然而,我们依然在结对编程的过程中学习了很多,补充了许多知识。而我也借机和搭档多多学习,从而掌握一些关于项目的更多知识。从需求文档的详细撰写,到Axure RP的使用,再到CPP向JAVA的转换,从用PS设计页面与大致布局,到运用HTML+CSS+JavaScript结合将它付诸实践,从学习一些细微的编码等,到考虑代码规范性等情况下对代码格式与注释格式的规范性,我们经历了很多,我也从中和网上的大神们,和自己的搭档学习了很多。再者,我们从入学起就了解到自己未来的种种就业方向,了解了一个项目组中的种种职位,但是对其的工作仍然没有深刻而基于实践的了解,同样,我们从入学便知道项目经历的重要性,但是自己参与其中的项目仍然是少数,就算加入了老师的实验室,也往往是“打下手”的存在(当然,加入了一些社团组织的除外)。在这次结对编程的过程中,我们从头开始,一切基于个人项目,或者对其进行扩展与重构,或者对其进行改写,甚至重写,但是我们可以详细的了解其中的几个研发的主要职位(测试方面还没有涉及),可以基于实践去加深了解与印象,真正的让自己在“做中学”,为自己未来的发展奠基。或许我们未来的团队项目会是一个更好的突破口,但是不得不承认,这次的个人项目,已经让人感慨万分,亦是让人从中受益良多。或许我这句话在不远的将来会被自己推翻,但是至少现在我坚信,这个项目会是我在大学期间经历的项目中感触最深,也会为我留下最深刻印象的一个项目。两人之间的合作,相互之间的帮助,向对方不断学习,在完成项目的过程中不断完善自己,或许这个是一个结尾,但是这个项目也是一个开始,或许它的初衷很简单,但是在实现的过程中我们收获良多,体悟颇深。