结对编程感悟
我们是Core第四组,上学期在数据结构课程中我们曾经有过编写计算算数表达式的经历,所以知道自己要写内核后,感觉感觉在思路上不会有很苦难的地方,但是在随机生成表达式的编写时还是遇到了一些困难。这次的作业是结对编程和个人独立作业也有很大不同,需要两个人之间合作,最后生成API接口和UI组对接也是之前没有接触过的,两周左右的时间写完了core,的确也有很多感悟。
结对与独立作业
刚看到题目时被那些琐碎,冗杂的分支条件所震撼,真是一脸懵逼,看到API和接口更是不知所云。在随后的几天中,随着讨论的深入,思路也逐渐清晰。我们开始时是一起编写,一位领航员,一位驾驶员,但之后感觉这样的编程方式效率并不高,然后采取分工编写不同的子函数,有问题时再一起讨论的方式,后期主要是一起做一些细节的处理,如乘方和整数模式下如何生成表达式,总的来说是一次非常愉快的合作。
结对作业的效率明显高于独立作业,当一个人的脑子不转了的时候,另一人人还可以继续做事,出现了Bug时通过讨论可以更快的解决问题,但是每个人都有自己的编程风格,遇到具体的问题也会有不同的想法,这就更需要沟通和磨合。
选择合适的数据结构
在这次Core的编写中,我更加体会到选择一个良好的数据结构的重要性。
在随机生成算数表达式时,我们想先生成后缀或者中缀表达式,但是实际编写中发现,直接生成算数表达式十分困难,表达式极有可能不合法,中间计算过程出现负数,计算困难等等问题。在后来的讨论中我们重新选择了数据结构,采用二叉树的形式,良好的数据结构也大大减少了我们的工作量,二叉树的树枝天然的时运算符,树叶时运算数,生成的时候非常方便。中间解结果只有可能在减号的时候出现负数,这时候左子树的数值大于右子树,只要交换左右子树就可以使这个表达式重新合法。在乘方模式下时,由于括号的堆叠很可能使计算结果很长,这是我们选择将乘方沉到树底,使他的左右不可能耦合括号,使得表达式和运算结果十分简介。在整数和除法模式时需要整除使结果为整数,表达式中只有可能在除法时出现分数,我们同样选择将除号沉到树底,使分子为分母的倍数,这样任何中间过程都是整数,满足要求。想清楚这些后我们编程也更有信心了,良好的数据结构为我们节省了很多的时间和精力。
勇于学习新的知识
我对C++并不是很熟悉,所以队友负责创建类,将小函数分装成类的子函数,最后生成DLL文件。我觉得软件工程最重要的能力就是能够学习新的知识和技术,在做中学,新的技术在使用的过程中肯定会出现各种各样未知的困难,老的技能反而能给我们一种安全感,但是放弃学习也就放弃了提升能力的机会,没有什么新意。
良好的心态
心态爆炸使很多程序员都会遇到的问题,一个隐藏的极深的bug ,程序逻辑上错误就就无法查明等等都足以我们原地爆炸。这时候也能显示团队编程的优势,将双方的积极性相互的调动,避免项目陷入僵局,在编程的过程中充分的沟通能极大的减少出现BUG的可能性,遇到问题使两个人的智慧也远胜于单兵作战,相互鼓励是的项目能有条不紊的开展
API对接
我们组生成DLL文件和API文件时间比较晚,在看了一些其他组的文档之后,发现简介明了的API接口会给用户带来极大愉悦,和使用的欲望。我们的接口没有使用繁杂的参数,简单的给出了类中子函数的申明,形参和返回值的类型,还给出了应用实例,减少 对接的麻烦