实验
这个Monkey Crossing River
可能是整个实验课体验最好的一个实验了。Lab3-Lab5自己写的细碎加上实验要求的变化,内心崩了挺久;Lab1的时候不记得语法,Lab2的公交车写反例写到自己的程序连崩三次,到了最后了体验终于好点了。
首先做实验前,我可能想到的方法和老师提到的都不同(将Ladder
和Monkey
均作为immutable进行处理,每次猴子在梯子上的时候,锁住相应的踏板),我的想法比较暴力,都做成mutable的,然后保证Ladder
在多只猴子同时访问的时候的保证线程安全即可,即保证如果有猴子改变了梯子的某个值,那么与其同时尝试访问梯子的猴子也能够接收到这种改变。另外可以不使用锁踏板的方式记录位置,也可以通过改变Monkey
的位置属性来记录,而且我也觉得这种思路可能来的更加自然。
其实,想好然后写的时候开始推进很快,后面在日志记录的时候耽误了差不多两天的时间吧(至今还没有解决,应该会专门写一写遇到的问题,跟大家交流一下),强行修改之后。GUI写炸了好久。一直写到现在,才算差不多全部写完了。
多线程编程
第一次写多线程的程序,体验真的是和单线程完全不同。最大的一个不同就是错误的复现与调试,可能并行程序的一个错误,不知道多少次运行才有这么一次,而且如果分析不出来问题所在,可能就真的复现不出来。但是多线程真的体验蛮好的,无论是对于性能的提升还是这种不一样的并发的感觉,都是单线程程序没法感受到的,希望以后可以详细学习一下相关的技术。
课程反思与建议
在软件构造的实验中,大体的心路历程是这样的,Lab1-Lab2的好奇与新鲜感,Lab3-Lab5由编程到放弃到崩溃再重新拾起勇气,Lab6的新鲜感。个人感觉在Lab3-Lab5的时候,对于个人的挑战还是相当大的,特别是在Lab3中不断变化需求,在Lab4-Lab5中几近重构所有代码,真实模拟了以后可能会遇到的现实工作中不断变化的需求与重构的压力。
(1) 关于Eclipse IDE:以前使用过androidstudio,感觉二者有相似之处,比较熟悉
(2) 关于Git:第一次使用,长见识
(3) 关于CMU和MIT的作业:英语是一个大问题,题目有一定难度
(4) 关于本实验的工作量、难度、deadline:工作量稍大,但是时间比较宽裕
(5) 关于初接触“软件构造”课程:英文ppt,课程跟进有一定难度