• 2013谷歌对话楼教主


    前言:今天花了一晚上的时间翻译了这篇谷歌对楼教主的采访。笔者自认英语渣渣。不过还是硬着头皮翻译了下来,翻译的不好,我也就这样了。算是对自己英语能力的一个磨练吧,毕竟对于程序员来说英语也是很好重要的。还有就是感谢楼教主说的比较通俗。仅以此文表达对楼教主的崇拜,以及表达我自己对未来编程道路的热情。


    原文地址:https://plus.google.com/+ResearchatGoogle/posts/ScrRQmGyudT

    这周我们和谷歌的软件工程师楼天城坐在一起谈话,楼天城以ACRush的名字在编程圈内为人们所熟知。在入职谷歌前的2011年,楼天城获得了北京清华大学计算机科学学院的计算机科学博士的学位。

    今年是第十届谷歌的CodeJam。我们一年一度的国际编程竞赛吸引了一些世界顶尖的业余爱好者和专业人才一起来解决算法难题。Code Jam现在开放注册(https://code.google.com/codejam),随之而来的是预定四月十二号开始的资格赛。去年有超过35000名狂热的编程爱好者参与竞赛,我们可以预见今年的Code Jam将更加激烈刺激。

    作为一名五次Code Jam的参与者和2008年和2009年度的冠军。楼天城和我们分享的他的Code Jam经历以及在谷歌的研究和职务。并且对如何在今年的竞赛中获得成功提出了建议。

    谷歌研究员(Researchat Google以下简称:R@G):在我们分享你与Code Jam和谷歌的经历之前。你能不能告诉我们你是什么时候与编程结缘的?


    楼天城(TianchengLou以下简称:TL):我一直对数学感兴趣,但是在我高一的时候,我上了程序设计课并且学会了用Pascal语言来写代码。我真的享受编程中的数学理念——我喜欢那些学习方式的创意,去告诉计算机要做什么,如何控制它;特别是使用数学去告诉计算机如何解决一个问题。我坚信强大的数学技巧是成为一个优秀程序员的前提。

    R@G:因此在你非常小的年纪你就开始对编程感兴趣了。你能谈一谈你的编码比赛的兴趣如何发展以及你到目前为止的比赛经历吗?

    TL:我对编码比赛的兴趣开始的也非常早;在我开始学习编程的六个月后我就参加了竞赛。我总是很享受解决那些挑战性的难题的快感,但是如果你真的想提高你的技巧,竞赛的环境对于促进你快速思考,精确编码是大有裨益的。并且,你看其他的参赛者如何解决问题。它提供了我们一个与竞争对少对话和跟他们学习的机会。

    我在过去的两年都获得了Facebook极客杯的季军。巧合的是,2011和2013年的冠军Petr Mitrichev也在谷歌任职。TopCoder 的比赛,我自从2007年一直规律性地参加并且赢得了2008年和2009年Codecraft比赛的冠军。2007年和2009年我的团队两次位居ACM /ICPC世界总决赛第二名。我本人也曾在2006年到2011年间五次参加Code Jam比赛,在2008和2009年获得了冠军。我享受竞赛的乐趣,我现在有很多编程圈子里的朋友——我们有机会去认识世界顶级程序员,和他们一起交流技术,一起去不同的城市旅游。

    R@G:这真是一个令人佩服的经历!你认为你的计算机科学博士学位对你的编程竞赛有帮助吗?

    TL:我想说,是的,当我还是博士生的时候,我在算法上的研究工作对我很有帮助。它使我理解了算法的基本特征以及每个算法的不同之处,这让我在决定一个问题的解决方案的时候能够选择最佳算法。拥有数论和离散数学的知识背景可能是最重要的;大部分参加程序设计比赛的人都拥有优秀的编程技巧,那么对数学有一个好的理解将给你带来优势。但是只有多练习才是最重要的。

    R@G:Code Jam和你参加的其他比赛相比怎么样呢?你认为像Code Jam这样的比赛对于编程社区来说是否是重要的呢?

    TL:我认为Code Jam是最好的比赛之一。它的任务非常具有挑战性,甚至在网络上的初赛的时候。他的题目也确保了准确性与速度之间的平衡,当你研究问题的解决方案时,这也是适用于我的解题工作的。并且,Code Jam允许你使用任何你感到舒服的编程语言去解决一个问题,因此这为那些缺乏强大的编程背景却拥有强大数学背景的人参赛提供了可能。

    R@G:你选择哪种编程语言呢?

    TL:我参加比赛时使用C++,它是我最喜爱的编程语言,也是我在工作的时候使用最多的语言。

    R@G:为什么你决定来谷歌工作?是曾经的Code Jam比赛经历影响了你的决定吗?

    TL:在2007年夏天我曾在谷歌实习,因此我已经对于谷歌是什么样的有了一个理解。我喜欢谷歌重视复杂问题的独特处理与解决方案的价值观。我的Code Jam的经历也清楚的证实了我对谷歌是什么的理解。

    另一个影响我决定的事情是我曾经阅读了大量的行业论文,并且发现那些论文表现出来的是,谷歌的研究是非常有影响力的并且有很有效的结果。我对大型网络很感兴趣,因此来到山景城在谷歌工作对我来说基本上是完美拟合的。

    R@G:继续出版发布论文对你来说你是重要的吗?你感觉你能够继续研究和出版吗?

    TL:是的,出版对我来说是重要的。事实上,我合作出版的论文,“Mining Structural Hole Spanners in Large Networks”(http://goo.gl/HBYVe)在今年五月已经被在巴西召开的国际互联网大会采纳。当我还在清华大学的时候,对于这篇论文我就做了很多工作,但是对我来说继续发布很重要。我认为我有一个和其他研发人员合作的潜力,并且我感觉我在这里这个潜力被支持。

    R@G:现在你已经是是一名谷歌的员工了,无疑你已经不能参加Code Jam的比赛了。你能给那些想要有出色表现的参赛者任何的秘诀或策略,或者给那些第一次对编程比赛产生兴趣的人一些话吗?

    TL:当然可以,对于那些竞赛有一个心理学的因素。当你比赛的时候,我喜欢去首先处理最简单的问题,逐步发展到困难的问题。然后我喜欢推迟我相对简单的题目的提交。这会使其他人认为那个问题可能是困难的,并且能防止我的竞争对手知道我已经解决了几道题目。我喜欢握着我胸前的卡片!另一个我曾经看到被使用的策略就是故意地对一道难题快速提交错误答案以误导其他竞争对手认为那个问题是容易的,从而浪费他们宝贵的时间。

    虽然我不能比赛,但是今年的CodeJam是我第一次为了这种规模的编程竞赛出题目。有时如果你选取了一道简单的题目并且修改了题目中一个小小的限定,从而使它变得非常困难,那样做是很有趣的。这个花招使题目变得十分困难而无法解决。我想要问题将更具挑战性,但是我也希望大家来解决我的题目。

    如果“出色表现”意味着你想要获得前五十名,那么对于数学有一个优秀的理解使很重要的,这将使你与众不同。正如我刚刚所说的,大多数Code Jam的参赛者拥有优秀的编程技巧,但是并非所有人都有一个能够解决具有挑战性问题的良好数学知识。如果你想获得冠军,我的建议是冒一次险!尽力去解决最困难的问题,或者至少是对你来说最困难的问题。这样做可能有一个风险,但是如果没有其他人能解决你就能取得成功。

    我真的强烈要求那些对编程感兴趣的人去参加竞赛!那是一个学习新技术,提高已存在技术,解决挑战性问题,进入好的团体,并且玩的很开心的绝佳方式。

    ———

    发表评论去分享一些你的竞赛经历和秘诀,或者试着去理解在楼天城的代号ACRush背后的含义。

    你想拥有和世界最优秀的程序员比赛的经历吗?现在Code Jam注册已经开始了!想要注册或者获得更多的信息,访问下面Code Jam的网络链接。

    https://code.google.com/codejam


  • 相关阅读:
    Pytorch学习(一)基础语法篇
    CSAPP深入理解计算机系统(第二版)第三章家庭作业答案
    理解DP(持续更新)
    LeetCode题解 | 215. 数组中的第K个最大元素
    快速排序
    浅谈设计模式(java)——从lol来看观察者模式
    <小虾米的android学习之旅1>Android框架
    程序员如何用技术变现?
    为了反击爬虫,前端工程师的脑洞可以有多大?
    如何成为一名爬虫工程师?(顺带提供工作机会)
  • 原文地址:https://www.cnblogs.com/unclejelly/p/4082162.html
Copyright © 2020-2023  润新知