经典回顾|2016编程之美“封神榜”系列干货分享
随着编程之美大赛的启动,相信各位同学已经摩拳擦掌跃跃欲试了~
慢着慢着~你不觉得少了点什么嘛?
磨刀不误砍柴工,让我们先来听听前辈们过五关斩六将的经验!
#2016编程之美挑战赛#邀请了四位往期优秀选手担任主讲人共同制作了一套系列视频课程——2016编程之美挑战赛“封神榜”课程。
为了帮助大家更好地了解编程之美和Code Hunt平台,这四位往年编程之美优秀选手从过来人的角度给大家分享最贴心最到位的参赛小建议,同时也将分享他们的编程故事和提升算法能力的技巧。
也许你因为各种原因错过了这个课程,没关系,下面是小编帮你总结的四次“封神榜”课程的精华,一起来看看吧!
封神榜第一期:陈晓奇
本期嘉宾介绍:陈晓奇,上得了清华,写得了代码的大三欧巴。2014、2015连续两年在编程之美挑战赛中取得top5的成绩。(长得帅,还这么大神~各位看官你们慢慢看~小编我先去抱欧巴的大腿了~)
邂逅编程
我从初二开始接触编程,跳进坑就再没能走出来(笑),从那时候起懵懵懂懂地开始写程序和接触计算机本身,后来竞赛被保送进清华又选择了计算机系。
进入大学以后,除了写算法参加竞赛,我也时不时地写一些好玩的小软件给自己和同学们用,比如微博客户端。
很多人都关心在清华学习压力大不大,其实是非常大的,我们大家都会给自己写一个ddl任务管理器,屏幕上永远显示的是时间倒叙排列的要交的任务,时间非常紧张。但同时也提高了我们的效率,所以在组队参赛时我们统筹兼顾的很好。
2结缘CodeHunt
初识CodeHunt
第一次看到CodeHunt这个平台,我就觉得它特别有趣,它像是一个游戏式的平台,注重于逆向算法和逆向工程的能力,在浏览器中让你自己写一些很简短的代码,它会给定输入和输出,让你去猜正确代码是什么,非常具有挑战性。同时呢,CodeHunt让我最喜欢它的一点是它的实时反馈,基本上它的解不会超过三五行,所以你一写完立刻就知道对或者不对,这是一个更实时的反馈。对于不了解它的同学,也非常容易上手,只需要去 Code Hunt官网做几套题熟悉一下平台就可以了。
学长手把手带你飞
运用这个平台最基本的要求就是熟悉语言的标准库,如果你能用标准库的函数会很方便,所以有时间的话就看一看它,以及在比赛之前把java库的帮助放在旁边,这样方便自己查找。
CodeHunt平台的一个好处是有一些简单的规律可循。比如说,如果输入是一个整数,那么你可以试试是不是跟这个整数相关的一次函数,或者一个二次函数,ax^2+bx+c的形式。又比如说输入是俩个整数,那比如说你可以试一试是不是它们两个之间的大小关系,又比如说是不是ax+by+c的形式,这样基本上就可以解决大部分的情况。
同时,在做题的时候要注意的是CodeHunt对代码的简洁程度是有评分的,所以我们需要注重题目的简洁和效率,能用复杂度为O(n)的算法就不要用O(n^2)的。另外一点就是,如果你提交这个代码发现怎么做都不对的话,这个时候你可以往后跳。当然也有很多同学好奇做题顺序的问题,真正比赛的时候就按照题目的顺序做就好,遇到不会的直接跳过,回头再来解决它。
小tip在4月18号到22号之间,同学们都可以在我们BOP的官网上进行CodeHunt平台的测试哦
3
大赛经历
分享一下过去两年我的决赛题目吧~2014年编程之美我选择的是利用扬州市的交通数据跟最新的微博数据来尝试预测哪里会出现交通拥堵,从而避开这些地方,方便大家出行。而2015年我主要就是用SVM支持向量机对大量的新闻进行两次排序分类,然后根据用户数据预测他的偏好,将整理后的新闻推送给他。编程过程中优秀的算法是一方面,但是更重要的是创意,一个好的idea才是编程的灵魂。
经验
连续两年参加比赛,我认为编程之美有别于其他比赛的地方在于,很多其他的编程比赛只是考查一个纯算法,而微软编程之美非常侧重于你最后的项目的评选,以及最后的项目的展示环节,所以它更需要同学们有一种拼一个完整的项目的能力。
4编程之美
创意赛
在去年的决赛中,我有幸见到了做CodeHunt整个大项目的Judith Bishop教授,她跟我们讲了CodeHunt平台很多背后的算法跟运维的含义,让我对微软的企业价值观企业文化有了更深刻的认识。
今年编程之美真的很令人惊喜的地方就是增设了创意赛,创意赛是需要大家把编程和其他的学科相结合,来谈一些怎么让编程来帮助其他学科或者怎么让世界变得更好。我认为这样的创意要分成三个层次。
1使用已有研究方法帮助别的学科进行研究
比如说,大数据可以在交通城市规划领域或者在经济学通过虚拟经济那些东西来帮助学科验证他们已有的理论跟猜想,或者做一些实验,又比如图像识别技术可以抓到人的非常细微的表情,它可以验证心理学已经有的一些假设或已有的理论。
2创造新的研究方法和新的理论
现在很多人可以直接用ipad来画画,数字敦煌、数字化故宫直接使美术领域跟编程产生一个新的混血儿,可以让人们有全新的方式去欣赏艺术。又比如说深度神经网络可以做出一个deep print的项目,可以直接模仿一个大师的画风,把你的脸画得跟梵高里面的油画一模一样,我想这种东西是编程跟其他学科的一种新的创造。
3编程与其他学科融合,出现人们意料之外的技术创新
比如说,IBM的华生,what's the AI,他们是之前拿来下国际象棋的,这并不是什么很创新的事情,后来他们把这个AI拿去很奇怪的领域去用了,自从华生理解了化学,跟分子之间的反应之后,他们就拿华生去做菜,因为懂得化学本质,所以他们可以创造一些匪夷所思的菜谱,而它们吃起来又确实非常好吃,这一点是远远超出人们之前对化学这一学科的期望的,我想这就是一个很好的跨学科交流和跨学科结合的一个例子。
创意做出来的同时,你还要有把它表述出来的能力。第一点要说我做了什么,你可以用一个非常直观的例子告诉其他人,我的项目做到了什么。另外一点就是我做了什么别人做不到的东西。这两点是我们对自己做了什么的完整的表述。
编程之美
对于我自己而言,经历了两年的编程之美,我对编程也有了新的理解,在我眼里它就像麦克斯韦方程组、快速傅里叶变换一样,充满着简洁之美,而就是这种简简单单的东西却给我们的生活带来巨大的提升,解决了许多难题,让我们的生活变得更美好,这,就是我眼中的编程之美。
封神榜第二期:朱睿
封神榜第三期:孙祥彦
封神榜第四期:唐飞虎
我每一届的编程之美都参加了。之前的都没有过复赛,去年的其实也是很危险地通过了。复赛的时候我在最后的关口提交了一次突然发现一个bug很惊险,就是那个第三题的机器人。给大家推荐一个网站Polygon 这是一个提供原创编程问题的平台。出题者需要写标程和错误的程序来保证不通过测试的数据,所以出题也是一项很有挑战性的工作。
当时决赛有两个题目,一个是算法背景比较浓的,一个是设计意味很浓的。当时想算法方面相对弱(你太谦虚了)。要得到冠军就要另辟蹊径嘛。这就是所谓的差异化竞争。我想,既然大家都是通过算法竞赛选拔出来的,那么我要脱颖而出就必然要做一些其他的工作,以己之长攻其之短 所以我当时就选了第二个题目。
我做的这个就是云宝·旅行的网页,比如输入“明天从上海到北京的机票”“附近有什么火锅店”就会实现很智能化的搜索显示相关的信息,当时比赛的时候还是可以语音输入的。
三天时间不可能做出什么很大的东西,还是要利用现成的东西, 那次我们调用了一些NLP的库,关于去哪里、时间、乘坐工具,把信息都呈现出来。我们前期的评分并不是很好,排名大概在中间的位置,但是在presentation的时候我们准备做的非常的充分,所以展示和答辩其实也是非常重要的一个环节。关于你做的细节,为什么这么做。决赛的项目无非就是这几点:审题,你用什么手段,权衡时间资源技术不足的限制和牵制,如何做出取舍来达成最好的效果。而我在答辩的时候我把这个过程完全描述了出来,这才是这次比赛精髓所在,从而打动了评委吧,你需要找到问题,权衡利弊,实现利益最大化。这应该才是我们最终获得冠军的原因。
结束后就到了校招求职季。需要参加好多好多面试。当时有个朋友很关照我,听说我还没有工作以后就帮我改简历,打听情况各种帮助。后来刷了leetcode,这是专门面向面试的题库,很推荐。又看了一遍算法导论。后来就是狂投简历十几家,后来拿到了谷歌总部的offer。 在这里呢我强烈推荐:编程之美,剑指offer这样的书籍,对面试的帮助非常大。不同的IT公司侧重点不同,要好好做工作和准备,最好找老员工的建议。要对简历和面试准备做很多针对性的修改。各个公司面试氛围也很不一样。不过一般对本科生的要求是基础层面的算法能力,所以基础的算法始终是最重要的呢。我当时除了投工程师,也投过投网易游戏的游戏策划,尝尝鲜嘛,有句话不是叫逃离自己的舒适区嘛,这算是不断挑战自我吧。
编程之美的经历当然有很大的帮助啦。把冠军的经历放进去直接就压过了自己所有的经历和奖项,而且参加比赛的过程本身就能得到极大的提高。更关键的是,你能通过比赛接触到很多比你优秀的人,这点非常关键。
现在呢在日本面试了一个智能机械臂公司,他们报销了我的全部费用哈哈。而他们的面试非常严格,是我见过的最严格的。最大的区别就是之前的面试公司都是 面试官问问题,听你说。而这家公司你需要听面试官说,你的任务是在限定时间内学习,把成果展示给面试官看。所以这次我学到了很多东西,感觉真的是太幸运了。
三 、第一次真正的认真做了一份很好的简历。
前辈帮帮忙
怎么样,看了上面四期大神的分享是不是又加深了你对编程的认识呢?如果你不会编程也没关系,编程之美挑战赛创意赛报名截止延期至2016年4月30日,想要抽取限量版玩偶小美(50只)和编程高手一起直上云霄一览众山小吗?那就快来参加创意赛吧~!点击阅读原文即可报名哦!