分享到微博 分享到人人 分享到LinkedIn 分享到Email
2016编程之美挑战赛“封神榜”分享系列——陈晓奇

2016编程之美挑战赛于3月24日正式开启,为了帮助参赛选手更好地参与比赛,在理论学习和编程实践中不断加深相关知识的理解,我们将邀请编程之美往期优秀选手为大家分享他们的参赛经验、建议、职业规划以及编程技巧。

第一位主讲人是来自清华大学的陈晓奇同学,他曾凭借着优秀的编程能力和创新思维连续两年闯进编程之美挑战赛决赛,最终获得了全国五强。此外,陈晓奇同学在以往两年的比赛中,均采用了Code Hunt这一网络平台进行比赛,对Code Hunt平台参赛有一定的经验和技巧。

以下为第一期分享的文字整理:

(图右为陈晓奇)

邂逅编程

我从初二开始接触编程,从那时候起懵懵懂懂地开始写程序,后来竞赛被保送进清华又选择了计算机系。

进入大学以后,除了写算法参加竞赛,我也时不时地写一些好玩的小软件给自己和同学们用,比如微博客户端。很多人都关心在清华学习压力大不大,其实是非常大的,我们大家都会给自己写一个ddl任务管理器,屏幕上永远显示的是时间倒叙排列的要交的任务,时间非常紧张。但同时也提高了我们的效率,所以在组队参赛时我们统筹兼顾的很好。

结缘Code Hunt

第一次看到Code Hunt这个平台,我就觉得它特别有趣,它像是一个游戏式的平台,注重于逆向算法和逆向工程的能力,在浏览器中让你自己写一些很简短的代码,它会给定输入和输出,让你去猜正确代码是什么,非常具有挑战性。同时呢,Code Hunt让我最喜欢它的一点是它的实时反馈,基本上它的解不会超过三五行,所以你一写完立刻就知道对或者不对,这是一个更实时的反馈。对于不了解它的同学,也非常容易上手,只需要去 Code Hunt官网做几套题熟悉一下平台就可以了。运用这个平台最基本的要求就是熟悉语言的标准库,如果你能用标准库的函数会很方便,所以有时间的话就看一看它,以及在比赛之前把java库的帮助放在旁边,这样方便自己查找。Code Hunt平台的一个好处是有一些简单的规律可循。比如说,如果输入是一个整数,那么你可以试试是不是跟这个整数相关的一次函数,或者一个二次函数,ax^2+bx+c的形式。又比如说输入是俩个整数,那比如说你可以试一试是不是它们两个之间的大小关系,又比如说是不是ax+by+c的形式,这样基本上就可以解决大部分的情况。同时,在做题的时候要注意的是Code Hunt对代码的简洁程度是有评分的,所以我们需要注重题目的简洁和效率,能用复杂度为O(n)的算法就不要用O(n^2)的。另外一点就是,如果你提交这个代码发现怎么做都不对的话,这个时候你可以往后跳。当然也有很多同学好奇做题顺序的问题,真正比赛的时候就按照题目的顺序做就好,遇到不会的直接跳过,回头再来解决它。

大赛经历

连续两年参加比赛,我认为编程之美有别于其他比赛的地方在于,很多其他的编程比赛只是考查一个纯算法,而微软编程之美非常侧重于你最后的项目的评选,以及最后的项目的展示环节,所以它更需要同学们有一种拼一个完整的项目的能力。

2014年编程之美我选择的是利用扬州市的交通数据跟最新的微博数据来尝试预测哪里会出现交通拥堵,从而避开这些地方,方便大家出行。而2015年我主要就是用SVM支持向量机对大量的新闻进行两次排序分类,然后根据用户数据预测他的偏好,将整理后的新闻推送给他。编程过程中优秀的算法是一方面,但是更重要的是创意,一个好的idea才是编程的灵魂。

在去年的决赛中,我有幸见到了做Code Hunt整个大项目的Judith Bishop教授,她跟我们讲了Code Hunt平台很多背后的算法跟运维的含义,让我对微软的企业价值观企业文化有了更深刻的认识。

而今年编程之美的一大亮点便是增设了创意赛。创意赛需要大家把编程和其他的学科相结合,来谈一些怎么让编程来帮助其他学科或者怎么让世界变得更好。我认为这样的创意要分成三个层次。第一,使用已有的研究方法帮助别的学科进行研究。比如说,大数据可以在交通城市规划领域或者在经济学通过虚拟经济那些东西来帮助学科验证他们已有的理论跟猜想,或者做一些实验,又比如图像识别技术可以抓到人的非常细微的表情,它可以验证心理学已经有的一些假设或已有的理论。第二,创造新的研究方法和理论。现在很多人可以直接用ipad来画画,数字敦煌、数字化故宫直接使美术领域跟编程产生一个新的混血儿,可以让人们有全新的方式去欣赏艺术。又比如说深度神经网络可以做出一个deep print的项目,可以直接模仿一个大师的画风,把你的脸画得跟梵高里面的油画一模一样,我想这种东西是编程跟其他学科的一种新的创造。第三,与其他学科结合,出现人们意料之外的技术创新。比如说,IBM的华生,what's the AI,他们是之前拿来下国际象棋的,这并不是什么很创新的事情,后来他们把这个AI拿去很奇怪的领域去用了,自从华生理解了化学,跟分子之间的反应之后,他们就拿华生去做菜,因为懂得化学本质,所以他们可以创造一些匪夷所思的菜谱,而它们吃起来又确实非常好吃,这一点是远远超出人们之前对化学这一学科的期望的,我想这就是一个很好的跨学科交流和跨学科结合的一个例子。创意做出来的同时,你还要有把它表述出来的能力。第一点要说我做了什么,你可以用一个非常直观的例子告诉其他人,我的项目做到了什么。另外一点就是我做了什么别人做不到的东西。这两点是我们对自己做了什么的完整的表述。

经历了两年的编程之美,我对编程也有了新的理解,在我眼里它就像麦克斯韦方程组、快速傅里叶变换一样,充满着简洁之美,而就是这种简简单单的东西却给我们的生活带来巨大的提升,解决了许多难题,让我们的生活变得更美好,这,就是我眼中的编程之美。

点击链接即可观看编程之美优秀选手陈晓奇的经验分享视频:http://www.jikexueyuan.com/course/2647.html

关于编程之美挑战赛:

微软“编程之美挑战赛” 是面向在校学生开展的大型编程比赛,致力于为青年开发者提供国际一流水平的开发与交流机会,帮助他们了解、运用先进的算法与编程设计解决各类实际问题。编程赛的初赛和复赛均在网络比赛平台上举行,初赛为算法题,采用由微软研究院开发的Code Hunt(www.codehunt.com)在线编程与评测系统。复赛则采用团队赛的形式,在微软智能云平台上进行。除传统的编程赛外,本届大赛特别增设了创意赛,以鼓励非计算机专业的青年学生充分发挥自身在不同学科领域的创造性才能,用全新的方式探索、呈现编程之美。参加创意赛的选手将通过网络提交参赛作品,评选出的15强选手将与编程赛决出的15强队伍组队参加最终的决赛,决赛将于五月底在微软亚太研发集团举行。优胜队伍除奖金外,还可获得进入微软预苗计划或预科生计划的绿色通道、微软微软创投加速器扶植的创业企业实习的绿色通道,以及赴微软美国总部参观学习的机会。

了解更多信息,请关注大赛官网http://studentclub.msra.cn/bop2016/ 或关注大赛官方微信公众号:MSRAMSC。