Peter | Monash MIT: 第三学期学习心得

January 4, 2019 字数 7168 15 min


0. 前言

前些天发完自己的学期总结之后,有些朋友留言说想听听 Peter(之前采访过的一位 MIT 优秀同学)的分享总结。

于是乎,我跟 Peter 商量了下,热爱写作的他当即表示非常愿意抽空写一下(然后两天之后就交稿了)。

有了上次访谈的经验,加上上学期和他一起组队之后的深入了解,**我意识到他原本就是一个很健谈,知道自己要说什么的人。**所以这次,我没有采用提问的方式,跟他说想写什么就写什么,自由发挥。

Peter 之前的采访文章请戳 Peter | Monash MIT:我在这里学得还不错

今天,就跟大家原汁原味的分享一下他第三学期的学习总结。


这学期总体而言,我觉得是相对比较轻松的一个学期。就是期末那段时间,因为两门考试+两门没有考试的 Assignment 都在考试周第一周 Due,导致那一周比较忙,其他时间我觉得还是 OK 的。主要也是因为这学期的课程难度相对比较小,除了 FIT5140 以外,其余课程花的时间比较少。

因为这学期的课都和 Luna 选的一样,她也大概介绍了一下这四门课,所以我就再稍微补充一些内容吧。

1. FIT5202 Data Processing for Big Data

这门课是我最后一门决定选的课,也是相对比较后悔选的一门课。

因为想稍微学习一些与 Big Data 相关的知识,看了这门课的 UnitGuide,发现内容很丰富,感觉可以学到很多东西,所以就选了。

一开始 Luna 选的是 FIT5152 UI,最后被我忽悠过来一起选了这门课,组了一个五人组。

Luna

想起来一个小插曲,开学第一周,因为学校系统的问题,我 5202 的 lab 无缘无故被踢出了原来选好的时间段 - 前一天我看课表还是对的,在没有任何操作的情况下第二天发现课表变了……

尝试找了 faculty,给学校 IT 团队发了邮件,在微信群里面联系愿意跟我换时间的人,然后拼命刷 allocate+的系统,后来总算刷到了一个空位,赶紧挤了进去。

鉴于我真的很讨厌写东西。。所以简直不敢想象没有跟 Peter 组队的下场= =

Tips: 大家就算选好了课,也尽量在开学第一周多看几遍系统里面的课表时间,如果遇到了像我一样的奇葩事件,还可以早做打算。


比较好的地方是,这门课真的很轻松,花的时间特别少,队友本来就都是认识的朋友,合作很愉快顺利,最后分数也还行。

Luna:

其实我还是花了蛮多时间的。。因为很多概念不熟,而且我接受新东西比较慢,Peter 属于那种学东西特别快的,建议大家不要完全参考他的学习时间

举例:5202 他跟我说半小时能做完的东西,我花了两天时间才做好……

比较不好的地方是,**这门课的教学团队我不是很喜欢。**每年的 Assignment 题目都差不多,只改某些关键词。比如以前年度有让我们比较 Hadoop 和 Spark,今年就改了关键词,变成比较 HBase 和 Spark。

可能是我没学好吧。。但是我真的觉得这两个不是 Comparable 的东西,但是也只能硬着头皮回答。去 Consultation 咨询,Lecturer 给的答复是不能告诉你,不能给你解释,不然会违反学校的 Policy。。其实想要吐槽的还有很多很多。。但是千言万语汇聚成三个字——不推荐!

Luna

有人问过我 5202 和 5148 推荐哪门课,我毫不犹豫的推荐了 5148,因为感觉那门课是能学到东西的,5202 只学了点皮毛(我属于老师讲得不好就很难学不好的那种人)。

不过,也有人很喜欢 5202 Chief Examiner Asad 的授课方式。我了解下来,这部分人一般有 IT 背景,喜欢自己钻研问题,不是很依赖教学团队(如果你是这种类型的话,可以尝试这门课,Lecture 讲的内容还是挺深刻的 - 我最多真正理解了 50%,还好不考试)。


2. FIT5137 Database Analysis and Processing

5137 是我个人认为这学期最轻松的一门课。**轻松是在于教学团队很棒,**Lecturer David 讲课很清晰,Tutor 很认真负责,并且课程本身难度就不大,所以 Lecture 和 Tutorial 的时间好好利用的话,其他额外的时间不会需要花太多。其他的也没什么想说的了,如果有同学在犹豫要不要选这门课的话,还是推荐选一下的。


3. FIT5140 Advanced Mobile Systems

Tutor 介绍与比较

因为我的 Tutor 是 Jason,而最后 50%的 Assignment 是和 Luna 跨班组的四人组,所以对于Jason 和 Charlie都有接触。

相信每个人对 Tutor 的看法和评价都会有差异,但是从我的角度来看,我肯定是更推荐 Charlie 的。

在开发 Application 的过程中,对于同一个功能会有很多不同的方式来解决。Jason 对于这些方式,自己心中会有一个评价,比如我们第一个 Assignment,用户可以在 Monash Zoo 创建新发现的动物,选定他们的 Location。

对于他而言:

  • 如果你是让用户长按地图来直接选定 Location,那这就是一个 HD 的 Solution;
  • 如果你是用 LocationAuto-Completion,那这就是一个 C 或者 D 的 Solution;
  • 而如果你是让用户输入地址,再用 Geo-Coding 来进行 Validation,那这可能就是一个 P 或者 C 的 Solution。

而 Charlie 往往会从 Application 整体的角度来看,而不纠结于这一个一个单独的 Solution。

再举一个例子,当你允许用户长按地图来选定 Location 之后,很有可能用户在选地址的过程中会让地图中心离开初始地址很远(可能是 User Current Location,可能是一个 Default Location),所以我在 Application 可以选定地址的地方,都有一个 Backto Current Location 的功能来方便用户回到自己所在的地址。

**其实这个功能并不是 Assignment 要求的,但是我觉得可以增加 Application 的 Usability,**而 Jason 认为我返回的 Button 应该 Overlay 在地图上,而不应该在地图外,而就是因为这个设计,让我在这一个部分的分数只拿到了 D。

**所以很多时候,你需要权衡到底要不要做这些 Extra 的 Functionality,越想越多,最后导致成绩也没有达到最满意的结果。**而 Charlie 会忽略这些小细节,更关注整个 Application 是不是一个 Shippable Product,这个也是我推荐 Charlie 最主要的原因。

Tips

所有开发课程的 Interview,我觉得都应该当作一个产品的推广和介绍来进行。所以当你能够比较正式的从 Functionality & Usability 等方面来介绍你的 Application,我相信 Interview 一定会更加顺利。所以对于这些 Interview,我都会做一个简单的产品功能介绍+ Application Screenshot,作为一个 Report 来给 Tutor,并且在 Interview 一开始就自己先整体介绍一下 Application 的功能和设计。

学有余力的同学们真的可以尝试一下,其实写一下这种 Report 也会让你对自己的 Application 更了解熟悉,并且也不会花费太多时间的!

Report Sample 1

Report Sample 2

Report Sample 3

第三个 Assignment 需要自己买 Sensor 来完成,老师们在第一周还是第二周,就已经让我们开始思考自己最后一个 Assignment 要做什么了(当然我觉得不太实际。。。大部分同学应该都是在做第二个 Assignment 开始才对 IoT 的设计有一定的想法)。但是大家真的要提前买 Sensor!可以在淘宝买了转运过来,或者拖朋友带来,价格会比在澳洲买便宜很多,并且种类也会更全一些!

最后就是,这门课很有意思,如果上了前置课 5046 的同学并且学的比较顺利的,真的不用担心这门课会不会太难,选了绝对不会后悔的~

Luna

我是属于什么事情都要提前计划的人,所以提前一个半月就买了 Sensor 让家人带过来(由于那时候不知道要做什么项目,就把所有可能用到的 sensor 全买了……告诉自己以后没准也能用到)。如果你的组员属于不怎么着急的那种人,我建议你还是自己先买了比较好,省的跟老师借,还不一定能借到需要的型号。

即使像我这种选择困难症,买了一大堆东西(包括树莓派,显示屏,两个 arduino,还有一个被 Peter 吐槽了多次的智能小车),差不多 1000 块人民币搞定了,如果只买 sensor 的话会更便宜(搜一下淘宝传感器套装就行)。


3. FIT5032 Internet Applications Development

这门课是这学期我翘课率最高的一门课,Lecture 应该只去了三、四次吧。。并且我也没有听 Recording,因为我觉得 Lecture 讲的真的不太好,也真的没什么必要去**(我不是鼓动大家不要上课。。但是真的见仁见智吧,我觉得这门课不去真的没关系)**。

但是 Tutorial 每周一定要去!

因为在学期中期开始,Tutor 就会每周来看你 Application 的进度,然后给你反馈和建议。尽早的和 Tutor 沟通,让 Tutor 了解熟悉你的 Application,会让你的分数更加理想的,所以一定要尽早进行 Application 的开发,尽早的得到反馈看自己是不是在 Right Track!

好吧。。其实我自己这门课开始的也非常晚。。别的课程 Luna 如果有什么想要和我讨论的,我一般都会比较及时的和她讨论。。但是这门课的话,她每次问我的时候,我都还没正式开始。。

Luna:

可能我 5032 学不好的原因就是,每次找人问问题,都问不出个所以然,就连最最靠谱的 Peter,也常常没法回答我所有的问题(其他课他基本有问必答)。

从我 Versioning 的时间就可以看出来,这个 Application 也是主要是在某几天突击出来的。。其实老师要求第七周还是第八周开始就要把 Prototype 给 Tutor 看了。。但是我一直都拖着没做。。

5032 作业 Version Control

其实我也是在 Mid Break 快要结束的那几天才正式开始的(因为 Break 后的第一天就要给 Tutor 看了,在之前几周我的进度几乎为 0。。。)。但是十分不推荐大家和我一样,一定要尽早开始!!这样才能尽早发现问题!!

上学期的 Mid-Break 时间

Luna:

我建议前几周空余的时间就看一些网课,把网页开发的基本知识,比如 HTML,JS,CSS 稍微了解一下,尽快上手 Visual Studio,尤其是 Entity Framework 的部分,这样后面可能会轻松一些。

至于占 10%的 Research Paper,听了很多朋友都说性价比太低,不建议写,对最后分数不会有太多提高。

但是由于我在听到建议之前就已经写完了,所以当时一直在纠结要不要交。当时 Research Paper 其实我一共只花了三个小时就写完了(因为觉得写了之后总归能加 2 ~ 3 分,但是估计也不会太高,所以真的很随便的就写了一份),我觉得不交的沉没成本也不高。。

纠结了很久,很多朋友还是怂恿我交一下试一下,所以我最后还是提交了。最后 Application+ Research Paper 的分数是 96/100,因为我 Interview 之后就知道自己 Application 的部分是 90/90,所以如果不写 Research Paper 的话就只有 90/100 了,所以还是庆幸当时提交了的。

但是大家之后到底要不要写 Research Paper 的话,我觉得还是自己决定吧。。比如 Luna 就不喜欢写报告,所以没写,最后分数也很高。

而我特别喜欢写 Report,写的很快,所以就写了,还是要根据自己的情况来决定。

Luna:

Peter 跟我说他三小时写完了这个 paper,我后来看到要求,不光要写 paper,还要有代码来辅助,如果我要完成这个作业,至少一整天的时间(说不定还不够)。

  • 侧面反映了 Peter 的时间不能作为正常人的参考标准。

  • 我本身超级排斥写 paper,加上 tutor 非常直接的跟我说你千万别写,浪费时间。我就果断的不写了。

总之:如果你喜欢写东西就写一下吧,不喜欢也别逼自己。

因为我自己也没有网页开发的基础,所以我知道自己完成的 Application 其实真的很一般。一开始我不理解大家为什么说 5032 很水,但是上了一学期之后我才终于知道了。因为 Application 的开发,很多都是 Auto-Generated 的 Code,想要满足 DLevel 的要求,需要修改、自己写的内容,非常非常少。在熟悉了整个 ASP.NET 的框架之后,想要做一个 70 多分的 Application,真的半天不到就能完成了。

但是因为不了解具体的原理,不了解这些 Auto-Generated 的 Code 具体在做什么,所以很多的同学都会在最后的 Final Exam 拿到非常低的分数,并且以为自己考的还不错。所以对这门课,经常听到的评价就是,很水+考试分数给的特别低+最后分数一般。

这门课算是 Monash IT 非常热门的一门课了,不知道针对我的 Application 能不能给到大家一些帮助和建议。

Peter 5032 作业介绍——Calorie Controller

网站的主要目的是通过提供食品卡路里的数据库,让用户能够通过搜索食品,来记录每天的卡路里消耗。

HD Level

  1. 用户可以访问自己记录的所有数据,并且生成相应的 Calorie Report。

  2. 食物卡路里用了 OpenSource 的真实数据,而 CalorieReport 通过 D3 完成了对数据的 Visualization,并且通过 Tooltip、Click Bar、Rotate Pie Chart 等方式来增加 User Interaction。

  3. 用户可以保存 Report 成为 PDF 文件,也可以发送 Report 到自己注册的账号邮箱来进行 Backup。

D Level

  • 同时网站有一个鸡肋功能,就是通过 Map 来显示所有的 Health Event,用户可以 Bookmark 来记录自己的兴趣,Admin 也可以实时添加新的 Health Event 到网站。因为 D Level 的内容要求比较低,所以这部分也没有进一步开发来完善。

网站的 Idea 非常简单,也有很多现成的网站已经做过类似的产品,所以这个只是作为完成作业的一个简单构思。

建议

对于 5032 的网站开发,有以下这些建议可以给大家参考。

1. 区分 User 的访问权限

  • 比如登陆前与登录后,Navigation 的 Option 会变化。

用户登陆前

用户登陆后

  • 又比如 Admin 可以修改或者删除数据库中食物的卡路里信息,而 User 只能增加新的卡路里记录。

普通 User - 增加 Calorie 记录

Admin User - 修改或删除食物卡路里数据

这些访问权限不仅仅要在 Code 中体现,也需要在 MVC 的 View中有明显的区分。

很多人说 Admin 的 Manage &Manipulation 这一部分就是一个 HD 的模块,但是在我看来,这个只是 D Level 的一个基础部分,在所有的地方都应该有适当的体现。

2. 完善 User Story 和网站的 Usability

开发一个网站最主要的目的,还是要给用户使用,并且实用。以我的 HD Level 的模块来说,用户可以通过 Search Food 来查找相应的食物数据。用户可以直接搜索食品名称,也可以点击食品类别来获取所有该类别下的食物卡路里数据。

Search Food

用户可以在搜索结果中,选中对应的食物来添加卡路里记录。

Search Food & Create New Calorie Record

用户也可以查看自己记录的所有数据,通过搜索,或者选定日期,来查找想要查看的记录。

Check All Calorie Records

同时,对于错误的记录,用户也可以选择删除。

Delete Calorie Record

对于用户的操作,也会有即时的 Feedback 给到用户。

Delete Feedback

用户对于所有的卡路里记录,可以通过 Calorie Report 来完成可视化,来加强用户对于数据的理解和认识。

用户可以选定不同月份来查看当月的数据。用户也可以选定不同的类别来查看当前类别在当月的摄入情况(比如下图用户查看了 2018 年 9 月,所有的 Dessert 摄入记录)。

Calorie Report

用户可以通过 Tooltip 来查看每一个 Entry 的具体数据。

Calorie report

通过点击每一条 Entry,用户也可以看到当日摄入分布的 Pie Chart 来看自己当天每种类别的食物分别摄入了多少。

Calorie Pie Chart

为了防止 Pie Chart 的数据 Overlap,所有的数值都进行了 Rotation,用户也可以通过点击 PieChart 来旋转 Pie Chart 来更好了观察数据。

Calorie Pie Chart - rotation

同时,用户可以 PrintReport。

Print report

用户也可以发送 Report 到自己的邮箱。

Send email

开发这个网站的时间非常有限,所以最后的成品也有非常多的问题。但是最起码,在 HD Level 的部分,是有一个完整的逻辑贯穿的。如果你的 Application 感觉没有什么实际的意义,或者你自己都觉得逻辑不对,那真的可以想想怎么样能让自己的产品更加 Usable。

3. Feedback

在我的网站中,Admin 可以删除用户,用户可以删除自己 Calorie Record,用户可以 Bookmark Health Event,也可以取消 Bookmark。为了 Improve User Experience,即时的 Feedback 我觉得是非常有必要的,也会让你的网站更加完善。

Feedback-1

Feedback-2

Feedback-3

当时 Tutor 让我做一个简单的视频,可以给以后的同学参考,所以其他内容也不一一展开了,大家如果感兴趣的话可以到下面的 YouTube 链接看完整的视频功能介绍。Application 其实真的做的很基础,Idea 也很简单,但是一定要 Useful,并且和 Design Report 的逻辑一致。


4. 补课小广告

Peter 之前 Summer 上过了 PM 这门课,所以最后一学期只有三门课,他计划利用空余时间(应该有很多)来做兼职补课。

如果大家有知道一些靠谱的补课机构请帮忙推荐给他**(特别注明:不是代写作业的机构,就是单纯的上课的)。**

有补课需求的同学也可以单独联系他,扫下图微信名片即可(注明:补课)。


5. 小结 - Luna

跟 Peter 一起学习之后,我才深刻的领悟到人和人之间可以有这么大的差距(我一直觉得自己效率蛮高的,不过跟他比起来似乎慢的和蜗牛差不多……)。

印象最深刻的是,我们 5140 的最后一个组队作业,需要学一些 NodeJS 的知识,并且通过 http request 来控制 sensor(比如手机上点一个播放音乐的按钮,装在小床上的蜂鸣器就要开始播音乐)。

这个部分,我研究了三天没搞定,到最后已经想要放弃了(我给 Peter 发消息说我觉得自己真的做不出来,他安慰我说再试试看,他有空的话帮我看看)。

与我形成鲜明对比的是,Peter 用一天时间就完成了他的部分,而且还刷刷两下就把电路的线连接完了(他其实跟我讲了两次要怎么连,但是我根本记不住……最后还是靠手机拍张照来强行记住的)。

我后来又研究了半天,才勉强实现了基础的功能。虽然我自己也知道优化的空间很大,但是我是需要比较多的时间才能学懂一块知识的类型,当时只能做到那个程度了,蛮遗憾的。

期末复习的时候也是,他不光复习的速度快很多,而且还背的特别熟,各种小细节都会背到(我们互相提问的时候,基本上就是他问一个问题,我开始找笔记,他直接 blabla 说答案……)

虽然我第三学期压力蛮大的,Peter 一直跟我说感觉还好。

所以我觉得学习方面真的要根据自己的情况来理性分析,不能看到别人很牛逼就要逼着自己一样牛逼,也不要听别人说很轻松就以为自己也可以很轻松的学好,最愚蠢的是听到大神们说 xx 很简单就盲目以为自己不努力也能成为大神。

我的原则是:在自己能力范围内做到无愧于心就好,就算没有最好的能力,也要做最大的努力。


6. 最后的最后 - Peter

看到 Luna 说到效率的问题,我觉得我真的还是要好好感谢一下这学期和我组队的所有组员们!这学期我觉得还算轻松,很大程度上也是多亏了我的 5202 和 5140 的队友们~

因为大家分工很明确,每个人又都很有责任感,所以分配下去的任务都能够很好的完成。 比如 5202,当时因为最后的 Group Assignment Deadline 和其他三门课的考试/Assignment 时间有些冲突,所以分配任务的时候,大家都一致同意(也可能是因为我的胁迫?= =)我们要提前一周把这个大作业完成了,最后也是很顺利的提前了很久就完成了。就是因为组队合作的顺利,才能让我觉得比较轻松。

Luna 在 Team Work 里一直都是一个非常重要的角色,一般最重要的、最复杂的部分,都会优先考虑让 Luna 来完成。所以她说自己有的时候学懂一块知识花的时间比较多,就是因为她做的部分都是我们可能没有接触过的、需要自己学习的、难度相对比较高的部分,所以其实我的效率真的没有比她高。

当然,我们现在做到的,也仅仅只是把每学期的这四门课给学好而已。因为没有本科 IT 的背景,我知道自己需要学习的东西还有很多,我也知道离找到一份好工作还有很大的距离。

因为我工作过,所以我知道好的学习成绩和找到一份好工作,并不一定完全正相关。 每个人对于在澳洲学习,都会有不同的看法和理解。有很多技术大牛主要的目标可能在找工作上,所以重心并不一定在学校的课程。而我和 Luna 应该都同意,当你没有基础和经验的时候,仅仅做到把学校的这些课都学好这一件事,也一定不是一个坏事,你也一定会收获更多的选择和机会。

最后也祝福大家 Summer B 和下学期的课程都能够一切顺利,取得自己满意的成绩。也希望自己 IE 能分到一个和谐的 Team,顺利毕业!


Talk to Luna


Support Luna