背景信息
學員介紹:
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的展示中,有一組女生用網絡爬蟲做出了一個地區強奸發生率的查詢系統。盡管這個項目實現起來幾乎沒有邏輯上的難度,但是卻有很大的社會意義。這也恰恰印證了廣為流傳的這一說法:“我們以前學習英文,不是為了成為翻譯官;我們以前學習打字,不是為了成為打字員;我們現在學習編程,同樣也不是為了成為程序員。”
希望我能有一天從俯視的角度看待信息學奧賽,看清它對我人生的價值。

? 2025. All Rights Reserved. 滬ICP備2023009024號-1