Blog-9 Lab6 实验后反思及软件构造课程实验反思
写在最前面
在Lab6结束之后,对于软件构造课程的实验部分也算是告一段落了。回想自己最初开始写实验的时候,把Java的语法忘得精光,到现在又能写点Java程序,这些天调试修改实验的日子,感觉自己的内心多了点什么,却又不知道这和我当初刚学Java的时候写完实验之后的感觉有啥差别。现在想想,在没有系统复习知识的时候,留下来的—写注释,学会使用工具,学着读文档,学着自己学技术,可能就是这门课超越考试的意义吧。
关于实验
前面说了这么多,下面该说说实验本身了。这个Monkey Crossing River
可能是整个实验课体验最好的一个实验了。Lab3-Lab5自己写的细碎加上实验要求的变化,内心崩了挺久;Lab1的时候不记得语法,Lab2的公交车写反例写到自己的程序连崩三次,到了最后了体验终于好点了。
首先做实验前,我可能想到的方法和老师提到的都不同(将Ladder
和Monkey
均作为immutable进行处理,每次猴子在梯子上的时候,锁住相应的踏板),我的想法比较暴力,都做成mutable的,然后保证Ladder
在多只猴子同时访问的时候的保证线程安全即可,即保证如果有猴子改变了梯子的某个值,那么与其同时尝试访问梯子的猴子也能够接收到这种改变。另外可以不使用锁踏板的方式记录位置,也可以通过改变Monkey
的位置属性来记录,而且我也觉得这种思路可能来的更加自然。
其实,想好然后写的时候开始推进很快,后面在日志记录的时候耽误了差不多两天的时间吧(至今还没有解决,应该会专门写一写遇到的问题,跟大家交流一下),强行修改之后。GUI写炸了好久。一直写到现在,才算差不多全部写完了。
关于多线程编程
第一次写多线程的程序,体验真的是和单线程完全不同。最大的一个不同就是错误的复现与调试,可能并行程序的一个错误,不知道多少次运行才有这么一次,而且如果分析不出来问题所在,可能就真的复现不出来。但是多线程真的体验蛮好的,无论是对于性能的提升还是这种不一样的并发的感觉,都是单线程程序没法感受到的,希望以后可以详细学习一下相关的技术。
有关于软件构造课程实验反思和建议
在软件构造的实验中,大体的心路历程是这样的,Lab1-Lab2的好奇与新鲜感,Lab3-Lab5由编程到放弃到崩溃再重新拾起勇气,Lab6的新鲜感。个人感觉在Lab3-Lab5的时候,对于个人的挑战还是相当大的,特别是在Lab3中不断变化需求,在Lab4-Lab5中几近重构所有代码,真实模拟了以后可能会遇到的现实工作中不断变化的需求与重构的压力。
但是,私以为实验的结构可以进一步的优化,在这里提出一点个人的意见。首先是实验的设置,在Lab3中我们做的叫做“面向可扩展性的编程”,以及在Lab5中”面向可理解性和性能的实验”,在Lab3后,由于已经摆脱了MIT或者是CMU实验的给出的一些限定,我们可以尽早的将findbugs
和checkStyle
这样一些工具使用在Lab3中,并在Lab3开始,提高对于可理解性的一些要求,并逐渐形成一种习惯,所以建议将Lab3的实验作为一个大作业来完成,将Lab3-Lab5的实验要求统一发布,我们既然去写,就应该学会在所有的指标之间进行Trade-off,并且设立一种统一的评价方式,分别对不同的指标进行打分综合给出大作业的实验成绩。并且可以适当的提高实验部分的分数,在上学期的计算机系统(csapp)中,实验和作业的分数占比达到了50%,感觉软件构造课程的实验量并不轻松,所以将实验和相关blog书写分数提高到50%可能更加合理。