排除万难攀星斗
——2016年秋季堪萨斯州立大学交换有感(学习篇)
Ad astra per aspera
是拉丁语中“排除万难攀星斗”的意思,也是美国堪萨斯州的格言。我认为这一句话能很好的反应我这一年的学习与生活,我怀着忐忑又憧憬的心情来到陌生的异国他乡,经过一年的努力和融入当地,最终不仅提高了学习技能和再生活上更独立,还收获了许多许多。
1. 工程学院硬件环境
我交换就读的计算机科学系 (Computer Science) 属于工程学院(College of Engineering)。工程学院里与计算机有关系的系主要有计算机科学、计算机工程(软件工程方向)和电子工程。这三个专业的基础课很多都重合(比如工程师编程导论和电子电路),后两者比较偏硬件。开学前一天工程学院组织了几个会议介绍学分、选课相关事宜并建议我们每周要保证课外学习30个小时,起初我很诧异,这相当于除去周末每天要学六个小时,后来我发现要想有所获,每天大部分时间还是需要学习的。
春天工程学院外景
工程学院教室方面有三个大的阶梯教室,数十个小的讲学课室,课余学习方面有一个供学生用电脑学习的实验室和公共学习室。公共学习室里大桌子供学习小组学习,白板给同学们写草稿讨论。
工程学院公共学习室
2. 计算机系环境硬件
我们计算机科学自己独立的一个“小地盘”,有四个教学使用实验室,两个是windows系统,一个是Linux系统,一个是三个系统(Mac、Linux、windows)都可以使用。同时也具有一个供学生小组讨论、休息用的沙发室。除此之外还有几个研究用实验室。
计算机系外景
3. 课内学习
3.1 培养计划
CS学分构成系统
每个学期都有建议的公共必修课(kstate 8),专业必修课和专业选修课。四年下来只要修够这三项所要求的学分并满足总学分就能顺利毕业了。(上图只是供参考的修读顺序,并不硬性要求按这顺序读。
Kstate 8
类似于国内的公共选修课,一共有八个类型的课,目的使学生对各方面学科有基本了解。
• Aesthetic Experience and Interpretive Understanding
• Empirical and Quantitative Reasoning
• Ethical Reasoning and Responsibility
• Global Issues and Perspectives
• Historical Perspectives
• Human Diversity within the U.S.
• Natural and Physical Sciences
• Social Sciences
其中以Natural and Physical Sciences (自然科学)为例,里面有上百门课可以选择,有物理学科的、人体架构、建筑学的等等。
一个学期最少修12学分,上限21分,我们专业基本上每门课有3个学分。正式开学前,advisor 会对我进行一对一的选课建议, 每一学期至少要约谈一次,准备下学期的选课。 根据这些,我选课的时候会先在网上的网站看好自己感兴趣的课。 比如说,第二学期的advisor Julie十分建议我选cis575算法分析,因为这对日后工作面试都很有帮助。
(注:advisor都是在学院任教的老师)
3.2 选课
学校的网站有各个学院课程的所有列表,并且附有详细的介绍,包括学分和先修条件,如果没有达到先修条件,advisor就会不建议选这门课。选了课后若发觉不合适,也可以选择在规定时间内退选。
因为美国是按照学分来收学费,有的学生因为学分的费用问题,也会选择发邮件申请旁听。
一般第一节课,教授们都会讲解自己的syllabus(教学计划),包括联系方式,课程的要求,考试次数、作业、小测、项目的成绩占比以及办公时间、办公地点等。
个人选课
我在这一年期间选了8门课,其中六门专业课,两门公共必修课。每门课都根据老师的教学计划而有自己的特色,接下来我主要介绍专业课 。
春季学期的课表
3.3 课程设定
以我选的cis450为例,选课页有具体的学分信息、介绍、先修条件等
主要两种上课方式:星期一三五 每节50分钟、星期二四 每节课80分钟。
3.4 课程介绍
CIS 560数据库系统概论
每节课50分钟,上课时间一般是星期一三五。
这是一门一百多人的大课,有一个教授,两个TA助教。助教一般负责答疑和批改作业,教授则会亲自改考试和点评有同学有疑问的作业。
数据库对理论实验要求都较高,除了每周的编程作业,还有一次期中笔试,一次期中上机考试,和期末笔试、期末小组项目。
期中笔试主要考核老师上课的知识点和类似的作业题,期中上机考试则是老师发写有测试语句的试卷,同学可以选择在纸上写代码或用自己带的电脑写代码测试并提交上网。老师会在网上提前上传数据文件csv,并让我们用phpmyadmin或直接sql测试。期末考试与期中考类似,覆盖整个学期的知识点。最有意思的就是期末的小组项目,期中考结束后老师要求5-6人为一组设计一个与数据库应用相关的项目,在期末周进行对全班的展示。
我与两个欧洲同学、两个美国同学组成了一个小组,第一次会议时确定了以当时风靡的Pokemon go游戏为主题建立一个网页查询应用。老师给予我们选题很大自由度,只要求规定表、关系的最小个数,并且每个表至少要有五百个数据,与有构思相关的查询。我们定好初步的构想,开始画表与关系图(比如表与表间的关系,属性等等)之后交由老师审核,确保我们目前建模正确。教授给予我们修改意见后,我们就开始在共享的数据库里建表添加数据,并且在GitHub共享代码及备份 ,一般用phpmyadmin进行操作或者用ssh连接自己的linux进行操作。数据库建好后,我们用ruby on rails写了一个前端,就做了ppt进行展示。
![
Pokemon go数据库网页,可检索玩家,pokemon,道具,商店和道馆。以及可做条件查询。
CIS 580游戏编程基础
这节是实验室的课,需要很好的脚本编程基础(主要是javascript)和数学物理基础,老师很少讲理论,每节课都是跟着老师写代码。老师会在课上演示一个基础的版本,再让我们回去写一个网页游戏。每周基本都要独立完成一个游戏。
比如说老师上课时演示了网页的摄像头滚动,回去就让我们做一个射击游戏。期末作业也是一个小组项目,我的小组做了一个平台游戏并在期末周进行展示,类似超级马里奥。具体分工分成关卡设计组,人物设计组和道具组。
我负责关卡设计组,我用tilemap,通过将背景图拆分成一个个tile,编号并设计属性(来判断英雄碰到那个地方时会不会死掉)。 对我而言比这个项目比数据库的项目难, 比如说我设计摄像头移动的时候,背后的背景分为三层叠加但总有一层不移动,后来我发现时x坐标的问题。最后汇报展示的时候我们展示了三个关卡的玩法,也见识了别的小组有趣的puzzle游戏和人机对战(运用服务器端进行多玩家)。
第一关卡,绿色小圆是英雄,其余是敌人
CIS 525计算机网络导论
这门课是小班教学,与之前我在学校的相比覆盖得更全面,老师必读的课本是top-down approach的书,不仅包括了七层协议,还有安全部分。 老师上课用ppt讲的内容都很快,每周都会讲完一章,需要提前预习,还会有随机小测,帮助巩固。
有一次期中考闭卷的,一次期末考(全部知识点都考)。
每两周一个作业,主要是DNS、TCP/IP协议应用偏文字性的知识;并且一个学期下来会有五六个编程项目,主要是应用网络协议。比如第一个实验是分别运用UDP和TCP写通信应用。类似还有写一个聊天室应用和运用SMTP协议在终端上发命令发邮件。这些实验都对语言不设限制,我了解到python的接口比较简单后,都用python编写。
第一次考试的试卷,满分并有extra credit
小班教学
CIS450 计算机体系结构与运行原理
这节课在机房上课基本每节课讲一章,预习也很重要。每两周布置一个实验,每周有一次上机课,教授和助教都会答疑。
每两周也有一次作业主要是考察知识点,实验比较有趣,老师设计一个“程序炸弹”,让我们输入结果如果错了就会跳出提示并扣实验的分数。从而来测试我们读汇编语言的水平和是否能debug,还有几次实验是优化代码和增加图像的清晰度。
两次开卷的期中考,考察书上的普通知识点。期末考带卷子回家考,但不能与别人讨论。
450的作业通过分析上图的beocat服务器绘制memory mountain
CIS575 算法分析导论
这门课注重数学基础,是一门一百多人的大课,上课讲例子,需要要提前看算法导论的书,两次期中考,一次期末考,每一次比重都很重。每周有一个作业,有时候是编程,比如让我们写算法的比较,不限制语言。例子都很新,网上找不到参考,只能自己理解算法去解释。因此我第一次考试拿了99分,1分扣在了证明题有个小陷阱。
一般的作业都是应用题与分析题比较多,着重看学生是否理解, 会涉及许多数学符号,开始我只选择扫描手写版,后来我自己觉得不美观,还借机学会了用latex写电子版的数学证明。
CIS527 企业云系统及管理
老师上课解释理论,每周有小测,每两周有一个大实验,比如用puppet配置系统windows和linux、搭建网络,建网站,使用云,还有各种开源小软件,一般都是windows和linux一起用。最后的考核是二人小组展示,提出如何对学校的IT 基础设施进行改进,我们提出的是分配ip地址。像DigitalOcean的droplet一样,取代现在用的学院不方便、需要依赖软件的cislinux机器或vmware软件。
课上运用的小型服务器droplet
用Wireshark分析
remote desktop 用ubuntu控制windows,用windows控制ubuntu
考试时一些课可以带一张a4纸写公式或知识点作为“小抄”,这能保证学生理解知识灵活运用,并不需要死记硬背。
有的老师会比较注重积累,所以作业占的分值比较大;有的公共课老师一学期会有三四次考试,可以删除(drop)最低一次的分数。
4. 课外学习
4.1 课外活动
除了上课,我们学习的机会也有很多。主要有各种活动和学院内部的社团。活动与社团一般都会提前在slack宣传(并且以食物饮料免费吸引学生)。社团主要有移动开发社团、网页开发、cyber defense和acm社团。而活动则是周期性的。
acm比赛
秋季和春季各有一次acm比赛,形式与一般acm比赛相似。
秋季比赛
hackathon
由mlh举办的hackathon黑客马拉松,三人组队,三天两夜的编程比赛,最后一天汇报。这是每年一度的重头戏,在美国高校相当流行。想法也千奇百怪,我们小组的想法是做一个“摇一摇搭配衣服的应用”,但后来因为硬件问题而不得已放弃。
类似的还有game jam和gdc比赛,都是写游戏的,参赛小组熬夜编程在实验室带被子枕头睡觉的非常常见。
hackathon开赛演讲
tech talk
有时候学校也会邀请google或garmin的校友回来介绍演讲,给我们提一下适应就业的建议。
两位google校友同时开在线讲座交流
career fair 招聘会
工程院里会有每年两次的招聘会, 我们带着自己的简历、穿着正装在雇主中穿梭,询问每个雇主的公司状况,并推荐自己。
我的一位老师为了鼓励我们去积极参加,还布置了加分作业:让我们拿三张雇主的名片并让他们签上他们和我们的名字,确保我们有与雇主交流。
另外我还参加了工程院领导力项目,类似于团队拓展,与别的系同学合作开探讨会。和学习礼仪、演讲、人脉网之类的知识。
计算机系还提供面向全校的编程教学,快速上手python,从基础的语法讲起,在运送一些库,比如flask等。
4.2常用软件
软件putty cislinux groupme github slack
-
putty 学校一般windows的电脑用那个连自己的linux机器,学院有cislinux的服务器
用ssh连接学校cislinux机器
- groupme 小组成员用groupme及时沟通
- slack 整个学院的学生和老师都在群里,老师会定期公布新的消息比如哪里有实习,学费上涨的听证会等,学生也会在slack上问问题。
- github 用来备份代码,以及与小组成员共享代码
我在GitHub上的记录
- canvas 学校买的软件用来发布作业改作业,并且老师给课上同学发布消息,有的课会有每周小测
5. 总结与对比
小组项目和展示让我收获最大
用已学知识为基础构建应用,不仅能巩固已学的,还能自发的学到了新技能,这样积累了很多在课堂上学不到新技能 。
同时展示时也很有成就感,一般选题都是很随意的随着自己爱好选择,有的人喜欢橄榄球就做相关应用。
展示时也要面对几十人甚至一百多人用英语演讲,美国人都不会进行排练,第一次演讲我觉得很紧张,但是同学的反应很好,我发现讲的时候很有成就感。
总结
基本上来说,国外动手能力比较强,自由度高,很大程度考验学生的自觉。
- 每周都有作业或小册,帮助学生吸收积累更好。老师和助教每周都有两次办公时间,并且可以手机邮件联系
- 期末总结的大项目能活学活用,锻炼小组合作和沟通能力,成果展示时也能锻炼到公众演讲的能力(public speaking是相当重要的公共必修课)
- 美国鼓励小组学习,能博取众长,在讨论中学到更多,甚至能增广人脉
- 美国课堂环境比较轻松,有的同学上课会吃零食(主要是因为很多课是饭点上的)。大多数时候,有同学举手提问,另外的同学也会积极回答,而老师也很赞许这样的方式
对比
1.国内老师相对比较有经验,有专业的备课组,而美国通常一门课就是一个老师教,每个人风格都不一致。
2.国内采用的班级制度,学委能监督同学学习收发作业
3.一般老师没有作业或期中考,给予了同学很大自由度,讲究自觉,但也导致部分同学会期末突袭,过后知识回不牢固
4.国内的实验一般都是“传承”下来的,实验都能找到各种渠道答案,有的同学便懒于自己思考。
接受了两种不同的教育,我也掌握了不同的学习方法,这对于我的专业学习也有很大的提高。