都说去美国读研压力大,很多学生凌晨两三点还在完成老师布置的作业,非常辛苦,而去美国大学读计算机的同学非常之多,下面我们一起来看看网友在美国读研期间的一些计算机课程作业,颇有些值得学习和借鉴的地方。
1.面向对象课程作业,通过完整项目学习应用面向对象和设计模式
第一学期有门课叫《Object-OrientedSoftware Development》,主要是讲面向对象和设计模式,为了帮助同学们更好的理解面向对象和设计模式,老师精心设计了一个股票交易的系统,用面向对象思想来设计实现,并且应用像Factory、Flyweight、DataTransfer Object、Singleton、Observer等设计模式。当然如果你以为老师只是一个简单的需求,就指望学生们能设计出一个很好的架构并且还能应用各个设计模式,你就太高估学生们的水平了。考虑到同学们的水平参次不齐,所以老师采取了一些措施来保证最终作业质量:
将学生分组,3个人一组,水平高的带着水平低的
将作业分成4期,以保证每个阶段有检查点,不至于到期末突击还完不成任务。
提供详细设计文档,细致到接口、类和方法,同学们只要按照说明实现方法即可,如下图所示:
既然分成了四个阶段来完成,而且每个阶段都需要依赖前一个阶段的结果,那么怎么保证每个阶段的结果正确呢?老师帮助写了很多单元测试代码,要确认代码没有问题,先保证单元测试都能测试通过。
Tradable tradable1 =null;
Quote quote1 = null;
System.out.println("1)Create and print the content of a valid Order using Tradable reference:");
try {
tradable1 = newOrder("USER1", "GE",PriceFactory.makeLimitPrice("$21.59"), 250, "BUY");
System.out.println("Tradable'stoString: " + tradable1 + "\n");
} catch (Exception e){
System.out.println("Anunexpected exception occurred: " + e.getMessage());
e.printStackTrace();
}
System.out.println("2)Create and print the content of a TradableDTO:");
TradableDTO tDTO =new TradableDTO(tradable1.getProduct(), tradable1.getPrice(),tradable1.getOriginalVolume(), tradable1.getRemainingVolume(),
tradable1.getCancelledVolume(),tradable1.getUser(), tradable1.getSide(), tradable1.isQuote(),tradable1.getId());
System.out.println("TradableDTO'stoString: " + tDTO + "\n");... ...
这样一个学期下来,一个股票交易系统就算是做好了,最终做出来效果还是挺不错的。
另外,为了避免有些同学编程能力不足,或者前期发挥不好,老师还提供了额外的附加作业,这些作业可以提供附加分数,这样努力一点也能有个不错的分数。
2程序语言概念作业,通过Git提交作业,详细的单元测试
这学期选了一门课《PROGRAMLANGUAGE CONCEPTS》,讲各种程序语言概念的,编程语言以Scala为主,作业也是Scala语言,这门作业有几点设计的蛮好:
统一使用git提交代码,代码托管在 Bitbucket 上面,开学初老师就让每个同学注册了一个Bitbucket账号,然后给同学们初始化好作业相关的Repository,后面的作业都通过BitBucket来提交
每道题提供了详细的注释说明,什么该用什么不该用都写的很清楚
提供完整单元测试代码供测试。为了确保程序正确,老师针对每个方法写了很多单元测试代码,基本上单元测试能通过就表示程序没什么问题。
每节课开始前点评讲解上一次的作业。实际上能这么做的老师很少,但是对学生来讲,及时的反馈和点评上一次的作业非常有帮助,这样可以知道标准的做法是什么,自己为什么会错。
3.iOS移动App开发,与时俱进,涵盖各个知识点,考试是自主开发一个完整的App
这学期还选了一门iOS的课程,作为一个已经有多年iOS开发经验的人来说,这门课对我没什么难度,从老师的课程内容和作业设置来看,老师对iOS和swift语言的发展跟进非常及时,所有的内容都基于最新的iOS 9和Swift2.0展开,作业设置也比较合理。从简单的HelloWorld到稍微复杂一点的计算器,再到复杂的TableView,最后考试是自主开发一个完整的App,综合运用前面所学的知识。
每一次作业老师的要求都很明确,包括:
·截止日期和提交注意事项
·作业的目标
·详细的需求说明
·难点提示
在作业的设计上,比较注意难易度的梯度,前后作业的关系,一学期的作业安排如下:
Hello World项目,没什么难度,只要输出一个HelloWorld即可,重点是搭建iOS开发所需要的环境
使用Playground写几个简单的Swift算法,熟悉Swift语言
实现一个简易的计算器,只要求实现加减法,进一步了解Swift语言,学会查文档,使用基本控件
简易电视遥控器界面,相对复杂的界面,需要和数据进行绑定
购物清单,学习文本输入框的使用
基于第四次作业升级,实现DVR播放器界面,还要能在两个界面之间切换。主要是熟悉界面动画,应用对话框
实现对遥控器数据的配置,同时整合电视遥控器和DVR遥控器。熟悉UITabController的使用,以及多界面之间的数据共享
实现一个列表详情的App,应用动态列表和导航
大作业,等于期末考试,自主命题,但是要求应用到所学的知识。
如果要对这些作业做个简单的总结,我觉得主要还是在以下几个方面:
1要求明确,目标清晰
以iOS作业为例,每次作业都会清楚的说明提交的要求,作业的目标,详细的需求,还有难点的提示。
2难度适中
比如面向对象作业,虽然是一个很复杂的系统,但是通过组队和详细设计文档,还是能保证同学们一起完成这些项目。像iOS的期末大作业,也可以让能力比较强的同学有发挥的机会。
3及时反馈
有些作业,老师会提供单元测试代码,我觉得这是一个非常好的反馈方式,通过单元测试,同学们可以养成良好的喜欢,另外也不至于写出来的代码有太大偏差。另外像程序语言概念这门课老师,每节课都会讲解点评上一堂课的作业,这样可以及时的直到问题所在,及时改正。
4严格要求
在美国,对于抄袭是0容忍的,经常能听到有同学作弊被开除的新闻,所以基本上大家都不会有这样的想法。另外对于规定好的截止日期,如果没有按时交,当次作业的分数就会是0分。
同时,有些课程的老师还会提供一些附加题,让犯了错误的同学也有弥补的机会。