刚开始结对编程的时候,对其中的弯弯绕绕真的是可以说完全不了解。结对编程?我们该如何去做?会遇到怎样的问题?又会有什么结果?而在从个人项目到结对编程项目转换的初始,就开始体会到个人与结对的不同之处了。首先是相互了解搭档的代码,听取对方的思路,开始明确对方的想法与解题方法。有的地方,我们可能不谋而合,有的思想,他略胜一筹,有的调用,我可能有些特色,有的时候,我们都没有考虑周全、互有缺陷……没有人的代码是完美的,也没有人的代码一无是处,我们都互有优缺点,我们都互有需要学习和可以被学习的地方。汲取搭档代码的过程,对自己有着很好的提升作用。之于我,在理解的过程中发现了自己的不足,看到了自己对需求理解的不透彻,也明白了不同人对于同一需求会产生不同的理解。而这一切,不过是结对编程初起步。我们,在相互学习与探讨中成长。
复用,是整个项目的起始。从功能实现上来说,Partner C的个人项目代码对功能实现的解读对我真的是启发很大。之前的解读博客提及他的题库思路很惊艳,所以我们选择他的代码作为复用的基础和框架。在复用的过程中,我们也认识到分模块编写代码及简约一个函数中包含内容的重要性。代码复用,理解来就是一个功能有多个实现,会引发同一问题多处修改而维护难的问题。这种情况下,可观察多个实现的共性以及个性,将共性封装成方法,个性则以传参的方式来适配不同业务的需求。从而提高了功能的内聚性,降低与业务代码之间的耦合性,履行封装的单一责任原则。函数,继承等,大抵都是运用了这种思想。而代码复用,也是面向对象编程的一个突出部分,当然,亦是面向对象与面向过程两种编程的不同所在。
下面将从结对编程过程中遇到的主要困难进行思考:
1.题库
题库思想非常符合复用的要求,题库生成后再从其中抽取题目组成相应试卷,相较于当次运行总程序当次生成题目的思想来说,节约了许多资源,加快了运行效率,作为一个完整的模块也十分方便调用。
但原始的题库代码并非完美无缺,我们花了和大的力气去完善题库代码,让它能够更好地适应需求。题目生成的代码在我个人项目的基础上进行了汇总和合并,主要运用了栈的数据结构。先对算式string进行改写,将所有的运算符改写为char型,尝试switch(char),对数字进行相应操作,要注意双目运算和单目运算的差别。读取和存储算式用了一个数字栈和一个符号栈,运算时对符号进行了优先级排序,优先级从高到低为:( )> sin=cos=tan=√=^2 > / > * > - > +,原先我们是将乘除赋予了相同的优先级,忽略了栈先进后出的特点,除法存在被除数和除数的区别,几次调试后发现了这个漏洞,进行了修改,加减也是如此。栈需要一个栈顶只能来控制运算,最为重要的就是栈顶指针的沿用和清零实际,只能说是实践出真知。
2.UI
我们选择了 QT进行开发,由于主代码是C++所以QT平台能够提供一个较好的UI实现。这也是一个QT速成的励志故事。
QT提供了较为挺人性化的跨平台开发方法,但是短时间上手也让我们掉了不少头发。入门教程之后,我们开始尝试第一个自建项目。项目主要是三部分头文件.h,函数调用.cpp,UI界面。因为QT有自己的编程逻辑,所以我们花了挺大的力气将我们的代码分化成界面模式。UI界面先是用图形界面构建大致框架和组件,将需要后继操作的组件转到槽,之后将相应函数完善。这期间真是特别锻炼了面向对象的思维,oop勇敢飞,程序猿(媛)永相随。也是有了一些摸索界面之间的关闭与转到连接,函数调用等的心得。探索UI界面的背景、字体、按键、标签、输入框、密码是否可视等,也是十分有趣的过程。
3.短信
前两部分大致完成后,我们进入了一个全新的领域,注册短信的发送。之前并没有想到提供的众多接口之中就是没有C++,搜寻了很多云服务,真的是找不到,我们只好另想办法。Java接口还算比较容易实现,也有完善的jdk,我们就决定用C++通过system帮助调用jar,jar完成与服务器的连接。语言不同,环境相异,这样的调用真的长知识。
4.打包
在最初运行QT项目的时候就有关于运行环境的报错,明明电脑中有相应的dll文件却识别不了。完善环境后,打包是我们纠结了很久的问题。尽管将dll文件放入了项目所在文件夹,但是打包后到一个没有安装QT的电脑上,就无法运行,显示也不是缺少dll文件或者无法识别的问题。其实这过程中我一直对QT32位64位的各个控制台版本存疑,但没有想到那个方向,之后多次核对QT版本是才发现当初建项目时默认了qt 5.13.1 MSVC 2017 32bit版本,所以将项目打包时需要利用这个控制台完善项目运行环境。从之前800M的压缩包到之后的24M,坎坷可想而知。
一点心路历程:
我们在结对编程的过程中学习了很多,补充了许多知识。我也借机和搭档多多学习,从而掌握一些关于项目的思考。从需求文档的解读,到题库的使用,再到CPP向QT的转换;从面向过程编码,到面向对象思维,我们经历了很多,和自己的搭档学习了很多,从各类资料中了解了很多知识和经验。在这次结对编程的过程中,我们从个人项目开始,我们根据新的需求对总框架进行了扩展与重构,对一部分函数进行了改写甚至重写,也添加了许多全新的模块和功能。这样的“做中学”,让我们简单体验了研发岗位的职能,基于实践丰富自己对软件工程的理解与印象,为我们未来的发展迈出了一小步。两人之间的合作,相互之间的帮助,向对方不断的学习,让我在完成项目的过程中不断地完善着自己。心态很重要,前期的我真的有些焦虑,希望多多经历和成长吧,充实自己的工具箱,也拥有更加沉稳踏实的心态。