计算机夏校之旅

背景信息
学员介绍:

Circle,普顿学员,小学六年级开始自学编程,对计算机有浓厚的兴趣,正在准备信息学奥赛,但更感兴趣的是计算机科学能怎样用在生活中。

项目介绍:

ESAP,全称Engineering Summer Academy at Penn,是在宾夕法尼亚大学校园内举办的、为期三周的工程夏校。
课程方向一共有六个,Biotechnology(生物技术),Complex Networks(复杂网络),Computer Graphics(电脑图像),Computer Science(计算机科学),Nanotechnology(纳米技术)和Robotics(机器人)。Circle作为出国留学党中为数不多的OIer(信息学奥赛选手),选择了计算机科学方向。
一、申 请
ESAP的申请给我留下的印象不多,毕竟它只是我申请的众多夏校中的一所。不过我记得当时在收到其他顶尖夏校的拒信时,收到一张ESAP的Offer,是一件非常欣慰的事情。
申请需要提交文书以及简答题的答案,另外需要学校官方成绩单、标化成绩、以及两封推荐信。参加完夏校再来看申请流程,我得出的结论是,相比于提供理工科的硬性指标,申请者更需要体现自己在工程方面的热情。我那时并没有突出的理工科竞赛成绩,但我记得当时我选择的文书题目是“阐述让你想继续学习工程的一次经历或一个概念”,文中主要描述的是面向对象的程序设计理念和现实生活的联系。也许是因为招生官们透过文书看到了我对工程的热爱,他们给予了我一个宝贵的学习机会。
二、学 术

计算机科学课程学习的主要内容就是Python。官方的课程建议是,这门课程适合没有编程经验或者对编程不熟悉的人参加,事实上也确实如此。体验之后发现,该课程对于编程经验丰富的同学来说易如反掌;然而对于新手而言,这门课是相当硬核的。

课程的前两周,是对于Python基本知识的学习,包括各种语句、基础数据结构、面向对象编程等等。而课程的第三周,我们需要完成一个Final Project,即做一个游戏或者做一个和网络爬虫有关的小课题。平时的课程由教授讲授,并且有相关的练习题需要我们完成,完成后由助教进行打分。当然,如果在课堂上提前完成了布置的练习,可以拿Extra Work,或者去参加助教不定期开设的Mini-Lecture,讲解一些额外的内容(例如,图论、博弈论、移动应用程序开发等等)。
前两周有不少有趣的小练习。练习的目的是用一种有趣的方式,让我们把已经学习的各种编程语句以及编程思想进行应用,比如说,如何提示用户输入操作信息,如何以一定的概率执行某条语句。大概第二天的时候,我们就开始做“Hammurabi”,一个古老的电脑游戏。玩家将扮演“汉谟拉比”,买进或者卖出土地,给人民分配粮食,以及安排农耕。玩家需要尽可能积累谷物,并尝试让自己的国家发展起来。当然,随机的灾害会发生,老鼠会啃掉农作物,瘟疫(我把它称为“灭霸的响指”)会杀死一半的人口,玩家需要根据此调整自己的策略。
事实上,这个游戏的逻辑比我想象的要复杂一些。比如说,防止一些无意义的输入影响游戏运行,处理收成、鼠害、瘟疫的随机化,判断什么时候该结束游戏,结束游戏后怎么对玩家的表现做出评价,等等。
课程进行到第二周,随着讲课的重心渐渐向理论转移,老师布置了一个叫做“Tower Blaster”的作业。这份作业要求和一个伙伴完成,搭档是由助教结合每个人的特点匹配的。这也是一个游戏,每一个方块上都写有一个数字,玩家要尝试用随机生成的方块替换自己塔里的方块,先于敌人使得自己塔上的数字单调递增。这个游戏最有意思的地方在于策略。我和我的伙伴一起研究出了一个基础策略,并对它进行优化。最后,我们还尝试让两个AI对抗进行游戏,并统计它们的输赢情况。在这个过程中,我感性地体会到了计算机处理数据速度:十万局游戏,在大约三秒钟的时间内就可以完成。
第三周的Final Project,我自己组建团队,受启发于Terraria(泰拉瑞亚,一款有名的2D沙盒游戏),制作了一个生存游戏。实际上,这一周才是课程的精髓,也是整个Program最累的一周。刚开始的过程也非常不顺利,首先是一个又一个的Bug,再往后是程序实现逻辑的问题:比如怎么检测碰撞、怎么生成怪物等等。还有的时候,我为自己的程序中类和对象该怎么设计绞尽脑汁,连从食堂回宿舍的路上都在想怎么制作剑和方块。一周时间,我们写出了约1000行代码的程序,并在Final Presentation那一天进行了展示。
Final Presentation形式上类似于一个Fair,没有固定的Lecturer和Audience。每一个人都有一个“摊位”用来展示自己的电脑程序。当然,随时可以去另一个摊位看或者玩别人的游戏。
我印象中还有人做出了简易版Minecraft(我的世界,3D沙盒游戏,前文所提Terraria的鼻祖),还有超级马里奥和Flappy Bird。虽然我个人感觉他们的程序实现的功能没有我们的多,但是从这个夏校的意义来看,写游戏是为了通过一种自己最喜欢的方式,体验像计算机科学家一样思考的方法。从“鼓励”的角度出发,教授对于每一个游戏的评价都非常高,都指出了里面非常值得肯定的地方。
三、课外活动
ESAP的课外活动相当丰富且有趣。第一天的Ice Breaker就让我耳目一新:教室中所有人要按照年龄从大到小的顺序站成一队。这个活动不仅能够促进同学们的交流,还可以引入“排序算法”的话题。最后,教授问我们都用了哪些排序方法,有同学提出让2001年、2002年、2003年出生的人分别站在一起,这便是“桶排序”;有同学提出“向前走,直到遇到第一个比我大的人“的做法,这便是“插入排序”。
第三天还有一个刺激的“Electricity”游戏。玩法大概是所有人分成两队,左手牵着前面的人的右手,右手牵着后面的人的左手,当助教给出信号的时候,第一个人要捏下一个人的手。对于中间的人,如果前一个人捏了自己的左手,自己要用右手马上捏下一个人的左手。这样相当于两条“电线”传递一个信号。当最后一个人的手被捏的时候,要赶紧把地上的一个瓶子捡起来。这个游戏最有意思是信号传输的时间往往会比想象的要久(总时长往往要好几秒),而且有的时候还会有人在没收到信号的情况下捏手,导致瓶子无故被抢走。
至于日常的在Lounge吃零食、看电影、下棋打牌等等活动,也能很好地促进同学之间的友谊。不过我经常做的事就是和同学们在网上玩你画我猜(捂脸)。
关于CS的Field Trip,尽管频率大约只有一周一次,但每一次都给我留下了很深刻的印象。第一周周末去了Six Flags,有世界上最高的过山车京达卡(不敢坐),一下午的时间,我竟然满足于坐小过山车 + 用右手原则走镜子迷宫 + 寻找所有的纪念币铸造机。我拍了京达卡的照片,从此也算是一个见过世界最高过山车的人了。
第二周周中去了一次首都。首先参观了教授以前工作的地方(Applied Predictive Technologies,现在属于Mastercard),里面的工作人员讲解了他们使用的预测技术,还给我们出智力游戏来解。我最喜欢APT的一点是它在细节方面的新颖。比如说,为了激励员工的斗志,公司用类似于霍格沃茨分学院的方式分了五个“学院”。接下来,就是做和旅游团非常类似的事情:逛航空航天博物馆、去美国黑人历史博物馆、等等。由于路遥车塞,回到费城的时候都已经差不多22:30了,于是教授把第二天上课推迟了一个小时(睡眠 +1h)。
四、日 常
宾大的食堂,我们常去的有两所:Hill和Houston。Hill的优点是便宜、管饱,缺点是每天不变样(每天早上固定的炒蛋+香肠+土豆)。Houston的优点是样式多(寿司、披萨、通心粉等等),缺点是排队的人一般很多,还有几率找不到座位。
宿舍相当舒适,是一人一个小房间的Suite,有冰箱和电磁炉,房间非常宽敞,但晚上外面有点亮(我曾经在朋友圈配上窗外夜景然后呼吁:Let there be dark)。
百货超市离宿舍约200米,基本上需要的东西都可以在那里买到(大箱的瓶装水特别便宜)。附近有星巴克以及各种地方餐厅(似乎有两三家中国餐厅),只要在界内(非常宽,左右横跨七八条街),就能去吃。
宾大的健身房,设施齐全(两层楼,一层有氧一层力量),跑步机上可看视频(国内大多数做不到)。当然,里面有相当多的硬核健身者。
美中不足的地方,可能就是教室和食堂离宿舍比较远吧,印象中走路要至少二十分钟。Bookstore的位置也不是很友好,也要走十几分钟。一句忠告:不要Move-out之后再去Bookstore。我当时没安排好,急急忙忙跑到了Bookstore买了点东西就走了。
五、感 悟
对于ESAP,我的感触颇深,不能在这篇文章里说尽,只能挑几点略作展开。
首先,Pair Programming的机制非常符合未来发展趋势。未来软件开发业的工作将非常强调团队合作,而在ESAP上,学生们也要两人搭档,共同完成一份程序。实现Tower Blaster的时候,我和一位美国本土的高中生分到了一组。于我而言,分组给我带来的最大收益是让我的思路变得更加清晰。一开始,我会和他一起写伪代码。而且,当我想要实现一个功能的时候,我会一步一步地把它描述给我的伙伴听,他也会提出有益的建议。程序员界有一种“小黄鸭调试法”,即通过把自己实现这个算法的逻辑讲给一只玩具小黄鸭听来帮助调试程序,而这种方法和Pair Programming有异曲同工之妙。
其次,通过这次夏校,我对计算机科学的意义有了更深入的理解。国内的许多孩子学习信息学奥赛也许是为了保送名校,他们中间许多人对专业知识的掌握非常牢固,能够把许多大学生都“了解即可”的知识烂熟于心。但是他们并不一定会像ESAP中的学生一样去思考计算机能给他们带来什么。
在ESAP中,许多学生之前甚至没有接触过计算机编程,但是他们清楚自己想拿计算机去做什么,也更关注当前社会发展的趋势。我记得在Final Project的展示中,有一组女生用网络爬虫做出了一个地区强奸发生率的查询系统。尽管这个项目实现起来几乎没有逻辑上的难度,但是却有很大的社会意义。这也恰恰印证了广为流传的这一说法:“我们以前学习英文,不是为了成为翻译官;我们以前学习打字,不是为了成为打字员;我们现在学习编程,同样也不是为了成为程序员。”
希望我能有一天从俯视的角度看待信息学奥赛,看清它对我人生的价值。
翰林国际教育资讯二维码