第4章: 憧憬与热情
研究生
我认为这对任何学科都适用,计算机科学也不例外,它深不可测,越学习就越发现自己不懂的东西越多。大学四年只能勉强理解基础知识。大多数学习计算机科学的人在大学毕业后都会继续攻读研究生。想离开家乡的我决定到东京读研究生。通常,进入研究生院需要一起加入一个研究室。因此,比起去哪所大学,更重要的是去哪个研究室。在调查了各种研究室后,我找到了东京工业大学松冈聪教授的研究室。松冈教授是超级计算机(超算)研究的权威,也是东京工业大学运营的超级计算机TSUBAME的负责人和设计师。说到超算这个领域,在民主党执政期间由于莲舫议员质疑为什么一定要成为世界第一?第二不行吗? 因此导致预算被消减而引起了热议。就像任天堂红白机进化成超级任天堂一样,超算是计算机的进化版。对超算产生兴趣的我决定加入松冈研究室。研究生院和大学一样需要入学考试,但与大学入学考试不同,考试只考专业科目。由于我喜欢并一直学习专业科目,轻松通过了考试。
就这样,2009年5月,我正式成为位于目黑区大冈山的东京工业大学研究生院情报理工学研究科数理·计算科学专业这一极长名称专业的学生。 移居日本当初,我曾经在东京短暂的居住,时隔多年,我又一次来到了东京。我在胜海舟墓地附近的大田区洗足池旁边找到了一间公寓,我的研究生生活就此开始。
【小专栏】什么是超级计算机
超级计算机顾名思义,是远比普通计算机性能更高的”超级高性能”计算机。超算能在几分钟内完成个人电脑需要几百年才能完成的计算。超算应用领域广泛,例如地震,台风等气象预测,蛋白质结构分析,飞机模拟,核爆炸模拟等。在衡量超算性能的TOP500排名1中,2016年11月版的第一名是中国的”神威·太湖之光”,第二名同样是中国的”天河二号”,第三至第五名是美国,第六,第七名是日本富士通的”Oakforest-PACS”和理化学研究所的”京”。各国在这一领域展开激烈的国家级竞争。查看1996年11月的排名2,前三名全是日本,前十名中有六台是日本制造的超算。如今排名靠前的中国当时最高只排在第298位,而且那还是IBM制造的超算。如果不以第一为目标,而只追求第二,很快就会被挤出排行榜。
超算性能通常用FLOPS(浮点运算次数)来衡量。这个数值表示单位时间内能进行多少次小数计算3。1996年,世界最快的航空宇宙技术研究所的NS系统峰值性能约为370千兆浮点运算次数。PlayStation 3的性能约为2万亿浮点运算次数4,是NS系统的5倍多。截至2016年11月,世界最快的超算”神威·太湖之光”峰值性能为125拍浮点运算次数,是PlayStation的6万倍,NS系统的30万倍。1964年,超级计算机之父西摩尔·克雷制造的世界首台超算CDC6600峰值性能为3兆浮点运算次数5,这意味着超级计算机自诞生以来性能提升了41万亿倍。
无论是个人电脑还是超算,其性能都很大程度上取决于作为大脑的CPU6性能。CPU根据时钟信号运行。例如,我第一次购买的电脑索得科技PC STATION M250的时钟速度是500兆赫兹,这意味着电信号每秒开关切换500万次。相比之下,任天堂红白机的CPU运行在约2兆赫兹。提高时钟速度会直接提升CPU性能。这很像提高发动机转速会使车速变快。同样,随着时钟速度提高,散热量也会增加。直到2000年代中期,提高时钟速度一直是性能提升的关键。然而,散热问题和电传播速度等物理限制阻碍了时钟速度超过4千兆赫兹的提升。从这开始,不再追求提高单个CPU性能,而是发展将多个CPU核心捆绑成一个CPU的技术,即所谓的多核CPU技术。提高单个CPU性能的方法称为”垂直扩展”,通过组合多个CPU或CPU核心提高性能的方法称为”水平扩展”。当今时代的竞争在于如何进行水平扩展。现代超算不仅使用多个CPU核心,还通过捆绑多台机器来提高性能。我在研究生院研究的就是超算的水平扩展。
谷歌可以说是一家成功实现水平扩展并发展至今的企业。创业初期,谷歌通过用大量廉价机器代替一般企业使用的高性能机器,在控制成本的同时扩大了应用范围。研究生时代学到的知识在就业后也派上了大用场。
憧憬
与我搬到东京的同时,本科时研究室的学长岩崎先生也来到了东京。研究生毕业后,岩崎先生在谷歌日本法人谷歌日本担任软件工程师。我们一直关系亲密,听了岩崎先生的讲述后,我逐渐对谷歌产生了兴趣。有一天,我收到了岩崎先生的一封邮件。
“5月17日(周日)有实习(可能是东京办公室?)的说明会,如果你有兴趣就来吧”
2009年5月17日,当时位于涩谷瑟鲁里安塔的谷歌日本办公室聚集了约30名学生。这一天,员工们进行了实习说明和办公室参观。色彩缤纷的办公室里摆放着平衡球,台球桌,《电车GO!》等游戏机,看起来不像是工作场所。怀着”想在这里工作”的心情,我依依不舍地离开了谷歌办公室。
申请实习除了简历外,我还附上了一篇关于开发任天堂红白机的短文。递交申请近一个月后,在我几乎放弃之际,收到了通过文件筛选的通知。得知这一消息,我欣喜若狂,但真正的挑战才刚刚开始,接下来还有几轮面试等着我。谷歌软件工程师的正式面试非常务实,需要在白板上解决编程问题。面试过程不使用计算机,只通过白板解释程序应该如何运行并解决问题。给定的问题通常没有一个绝对正确的解法,比起答案的对错,更看重应试者如何思考并得出解法。经过4,5轮面试,再经公司内部招聘委员会审议,才最终决定录用。实习生面试也是如此。面试中,我対在不熟悉的白板上编程感到困难。最后一轮面试给出的问题出乎意料地简单,我以为问题不大。然而,当我解决问题后,面试官开始提问时,对于我没有考虑过的问题,我无法给出好的答案。之前因为题目简单而自信的我,脸色渐渐变得苍白。在面试官的提示下,我勉强解决了问题,面试官安慰道:”没关系,这是容易出错的地方。”那天,我几乎放弃希望地回家了。
实习
面试后约一个月,当我尝试忘记申请实习的事情时,命运的消息来临。
2009/07/13
野村先生
承蒙关照。
今天我们决定录用您为实习生。
近期将再次与您商讨日程等细节。
首先对您进行通知。
〈招聘负责人姓名〉
收到这封邮件时,我喜不自胜。虽然只是实习,但我终于能在憧憬的谷歌工作了。
谷歌的实习利用研究生暑假期间,为期2-3个月。在此期间,实习生像正式员工一样上班,享受与员工相同的健康保险,养老金等福利待遇,还能获得不菲的薪水。几名实习生被分配到不同的团队,各自从上司那里接受研究课题。我被分配到岩崎先生所在的谷歌地图团队,上司是最后一轮面试的面试官若狭先生。谷歌地图由分布在世界各地的开发团队共同开发,日本也有团队。各国团队并非各自开发本地区地图,而是按功能分工。日本谷歌地图团队开发的功能也在全球使用。另外,虽然不是官方语言,但公司内部沟通基本使用英语。当然,日本人之间的对话基本用日语,但如果会议中有一个人不懂日语,那么会议就用英语进行,即使参会者都是日本人,会议记录也用英语撰写。日本人之间的邮件也基本用英语交流。我想:”这就是全球化公司啊。”我们经常通过视频会议与美国和中国的团队沟通。当然,关于英语的苦恼故事也很多,我听到了这样一个故事。
有个人去美国出差时,去了一家餐厅。他想点菜单上的第13号披萨,就说”披萨,thirteen”。但服务员没听懂,他反复说”thirteen”。服务员终于理解后,他松了口气。然而,当点的披萨端上来时,却是完全不同的沙丁鱼披萨。服务员误以为他说的是”Sardine(沙丁鱼)”披萨。
这听起来像个笑话,但据说是真实发生的事。
我不能详细描述实习期间负责的功能,但它使用了一种称为”MapReduce”的技术。”MapReduce”是谷歌传奇工程师杰夫·迪恩和桑杰·戈马瓦特于2004年发表的7一种同时使用数千到数万台服务器处理所谓”大数据”的技术。包括杰夫和桑杰在内,谷歌有许多出现在计算机科学教科书中的传奇人物。谷歌日本也有许多知名工程师。同事们都是天才级的工程师,每次交谈都能学到新知识。在这个充满刺激的环境中,我完全被吸引了。本来在就业和继续攻读博士之间犹豫的我,实习结束时已经完全放弃了继续深造的想法,考虑加入谷歌工作。实习结束后,经过几轮面试,我获得了谷歌的录用通知。在周围人都在为就业而奋斗时,我很幸运地不用再进行就业活动。
学生生涯的最后一年
2010年,我升入研究生二年级,迎来了学生生涯的最后一年。这一年在学习和娱乐方面都很充实。
自从进入研究生院,我的玩伴主要是留学生。从研究室的留学生开始,逐渐拓展到其他研究室的留学生,最后甚至和其他学校的留学生也成为了朋友。我原本不擅长的英语,在与留学生交往的过程中逐渐变得流利。得益于此,就业后我几乎没有因为英语而遇到困难。
在学习方面,我的研究主题是”面向模板计算的大规模GPU集群自动并行化框架”。用通俗的话说,这是为了在超算上高效进行科学计算的研究。在指导老师丸山助教的帮助下,我完成了约100页的硕士论文,顺利毕业。硕士论文答辩后,作为学生生涯的最后纪念,我决定独自在欧洲旅行三周。在短暂的时间里,我在当地朋友的带领下游览了俄罗斯的莫斯科,土耳其的伊斯坦布尔,希腊的雅典,西班牙的巴塞罗那和马德里,以及意大利的雷焦卡拉布里亚。
3月11日,我在雅典。结束当天的观光后,我回到一晚20欧元(约2500日元)的旅馆,像往常一样打开笔记本电脑。查看互联网新闻时,所有头条都是关于东日本大地震的。起初我认为这不是什么严重的事情,但随着阅读的深入,我逐渐意识到情况的严重性。视频网站上不断分享的被海啸冲走的房屋,汽车和人们的画面令人恐惧。通过互联网给家人和朋友打电话,得知大家都安然无恙,我松了口气。由于返回日本还有两周时间,而且我知道东京的交通已经瘫痪,所以我决定继续旅行。我通过互联网随时关注日本的情况。看到因公共交通停运而步行回家的人们,为购买食物而在便利店前排起长队的人们,以及在大灾难中仍然保持秩序的日本人,我收到鼓舞。
完成剩余的行程后,由于错过了最后一班回程飞机,我在意大利米兰马尔彭萨机场的长椅上过了一夜,于3月31日回到日本。我长达16年的学生生涯在这一天画上了句号。
英语学习方法
正如第3章所述,我英语很差,高中最后一次英语考试只得了17分(满分100分),属于不及格。进入大学时参加的TOEIC考试,990分满分,我的分数还没达到400分。TOEIC是选择题,即使随便涂也能得到这样的分数。如今我能用英语管理团队并进行演讲,英语水平的提高很大程度上归功于大学和研究生时代实践的学习方法。这种学习方法大致分为四个步骤。
第一,说。虽然不会英语却要说,这看似矛盾,但实际上并非如此。无论英语多么差,只要生活在被片假名包围的日本,你肯定不知不觉中已经掌握了许多英语单词。大学时代,我经常用蹩脚的英语与留学生和外国教授交谈。当然,我的语法错误百出,词汇量也很少。但试着说时发现,即使不能说正确的英语,仅仅排列单词也能传达意思。如果你努力表达,对方也会尝试理解你,会问”你是想说这个吗?”,这样就能学到地道的英语。这就像当外国人用简单的日语跟我们说话时,我们会尽力理解他们一样。没有人会因为对方的日语不好而嘲笑他们。所以,我决定不顾忌自己的英语错误,勇敢地说。特别是研究生时期,我的玩伴几乎都是留学生,每天练习蹩脚的英语,我的英语水平逐渐提高。
第二,看电影。我喜欢电影,看过各种各样的影片。研究生时期,为了学习英语,我反复观看同一部电影。这时的重点是选择自己已经了解内容的电影,用英语音频和英语字幕观看。每当遇到不懂的单词时,我就暂停并记下这个词。因为了解电影内容,所以即使不认识的单词也能猜到大致意思。一开始需要频繁暂停,电影进展很慢,但坚持下去后,到了后半部分,暂停次数会逐渐减少。一部电影重复这个过程多次,几乎能记住对白,这样就能掌握电影中的表达方式。只要是你喜欢的电影,用英语观看就可以,请尝试一下。
第三,读书。除了电影外,我还阅读英文小说。由于阅读需要时间,与看电影相反,我会跳过不认识的单词。即使不理解某些部分,勉强继续读下去,也能大致明白故事情节。我读过Sidney Sheldon的《Master of the Game》和《The other side of midnight》,John Verdon的《Think of a number》,Louis Sachar的《Holes》以及Philip K. Dick的各种短篇小说。通过阅读这些小说,我扩大了词汇量。
第四,学习语法。在研究生院与留学生相处,日常英语交流达到一定水平后,我突然意识到自己说的英语语法非常混乱。意识到这个问题后,我买了一本英语语法书。现在已经不记得是哪本语法书了,应该是书店里某本薄薄的,价格适中的书。这本语法书是习题集形式的,我反复做了很多遍。由于平时就在说英语,所以学到的知识可以立即应用到实践中。在做了3,4遍同样的练习后,我从感觉上知道自己已经能说相当正确的英语了。
当然,每个人应该根据自己的情况选择适合的学习方法,但如果读者想说英语却不知道从何开始,可以参考我的学习方法。第一点”说”是最重要的。在当今时代,即使身边没有说英语的人,通过互联网也能找到很多。”有想说的话”是学习的动力。不要担心说错英语,这不是什么羞耻的事,相反,犯错是进步的最快捷径。
追随热情
实际上,在大学和研究生时期,我并没有考虑太多未来的事情。没有决定是就业还是继续深造。相反,我只是单纯地对当时全身心投入的事情充满热情。无论是学习逻辑电路还是制作任天堂红白机,我都是顺从自己的兴趣。进入研究生院是因为想继续学习计算机知识,觉得超级计算机很有趣。我完全没有考虑过学习这个对就业有利还是未来能拿多少薪水。之所以现在能继续做自己喜欢的事情,一半是因为运气好,另一半是因为我总是全力以赴地对待眼前的事情。如果你正为未来而烦恼,我认为首先要找到自己喜欢的事情,并全力以赴地投入。我相信总有一天,你的努力会连接到未来。
-
TOP500项目官方网站(https://www.top500.org/lists/2016/11) ↩
-
TOP500项目官方网站(https://www.top500.org/list/1996/11) ↩
-
小数计算……准确地说是浮点运算次数 ↩
-
索尼互动娱乐公司官方网站(http://www.jp.playstation.com/info/release/nr_20050517_ps3.html) ↩
-
大英百科全书官方网站(https://www.britannica.com/topic/CDC-6600) ↩
-
作为大脑的CPU……也可能是GPU ↩
-
J.Dean, S. Ghemawat (2004) MapReduce: Simplified Data Processing on Large Clusters ↩