此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2446
1. 效能分析
在词频统计的作业中,我首次接触到了效能分析这个概念。从前提到优化,也只能凭借自己对代码的了解大概预测一下耗时最多的是什么函数,这种做法既不专业,也显得低能。在《构建之法》中,提到了两种分析方法:抽样和代码注入。在作业中,我初次使用效能分析工具,找到了耗时最多的三个函数,通过去掉不必要的 print和 调整 I/O 操作来优化函数,让程序跑的快了一些。
2. 代码规范
代码规范包括:代码风格规范和代码设计规范。在本科阶段的合作编程中,由于专业课都是一个老师教的,所以同学们的编程习惯大体类似(与老师上课时编程的习惯类似),并没有体会到代码规范的重要性。在结对编程四则运算作业中,由于我和队友的编程习惯以及擅长的语言十分不同,所以代码规范就起到了十分重要的作用。缩进上的问题到还好,但是在括号,分行,命名和注释方面,我们就要严格执行当初一起制定的代码规范,增强了程序的可读性也提高了编码效率。整个过程中,我感觉到代码规范就是一种契约精神,两人一起制定也就要共同遵守,共同避免掉很多细节中的麻烦。两人结对编程尚且如此,多人开发中更要注重代码规范的制定和实施。
3. 从Spec 到实现
在词频统计作业中,Spec 由老师制定,实现四个功能。我在编码时为了方便快捷,把四种功能写为了四种模式,用户需要输入模式选择从而进行单词频测。但是Spec中并没有要求有模式选择的步骤,也就是说用户不会进行模式选择,所以整个功能就是没有按照 Spec 的要求,结果四个功能都得了0分。所以在以后的工程项目中,作为程序员一定不能私自违背 Spec 而进行开发,要严格符合Spec的要求。
4. 敏捷开发
在小组开发的作业中,老师要求小组成员每天都开站立会议,讨论昨天做了什么,今天要做什么,以及遇到了哪些问题。起先也觉得很无聊和没必要,但是在执行中,我们会讨论每个人的任务究竟是什么,每个人在开发过程中都遇到了哪些困难,困难如何解决,完成这个任务还需要多少时间,有哪些任务还没有完成,并且更新每天的任务燃尽图。通过每天的迭代,我们的小项目从0行代码到完成冒烟测试,再到每个功能的完善,每日立会的记录使每天的工作更加高效,并且可以考核。
5. 版本控制
在入学之前,我和同学之间互传代码依旧使用QQ和移动硬盘(我承认我们是原始人),上这门课之后才接触到版本控制工具。老师要求用 Git,后来偷懒使用了 乌龟git。在词频统计和结对编程中,我都不太理解版本控制的必要性。但是在小组开发中,人数一多,其优势就明显突现出来。每个成员上传的代码其他成员可以自行分享,避免掉合作开发中的很多麻烦。版本控制会伴随我的一生。