分享

牛!高一才接触编程就能拿金牌入选国家集训队,他立志做一名计算机科学家!

 长沙7喜 2020-10-07

摘要:

   用代码编织梦想,用字节振动人生。第37届全国青少年信息学奥林匹克竞赛在长沙举行,来自全国27个省市参赛选手上演了一场顶尖的智慧竞赛。

    今天我们要介绍的主人公来自华中师大一附中高三(29)班学子魏辰轩。采访内容由楚天都市报整理,作为湖北省代表队成员参加比赛,获得金牌,并入选国家集训队,将直接保送清华大学。此外,该校另外三名省队队员吴泽文、蒋轩林、徐向灿获得银牌,他们在强基计划中将具有破格入围资格。

    经常有同学和家长私信我们问初中或者高中才接触编程到底晚不晚,通过魏辰轩的故事也能告诉大家,只要努力,即使高中再接触编程也是可以成功的。

魏辰轩(图片来自华师大一附中)

01

高一才接触编程,成功需要兴趣天赋和努力

    “进校时听说学校引进了一位很牛的教练来,我当时就很想学编程。”2018年,华师一附中从信息学竞赛强省湖南引进特级教师向期中,担任该校信息学竞赛总教练,上高中前并没有接触过编程的魏辰轩,由此走上信息学竞赛之路。

向教练带领的四名省队队员斩获一金三银

    “你身边人强了,你才能更强。” 魏辰轩表示,两年多的学习,他除了感谢教练悉心的指导,也很享受同伴之间你追我赶刷题、相互钻研算法的状态,“教练特意在机房里设置了一块白板,让我们能彼此碰撞思维的火花,分享解题思路,发挥团队的力量。”

    向老师介绍,信息学竞赛相比其他竞赛,一大特点是非常注重实践。此次全国决赛分两天进行,每天要求选手们在五个小时解答三道题,每道题需要上机编写一个程序。出题人预先设计好测试点的正确答案,选手程序运行占用的空间,以及选手程序运行的时间,由主办单位中国计算机学会开发的评测软件,对每个选手的程序进行评分。

    信息学并不在高考科目里面,如何平衡竞赛和文化课学习?向期中表示,“一般来说,学生们平时正常上文化课,有重大比赛时会停课2至4周进行集训,全天待在机房研究算法、模拟考试、订正错误、总结与反思。” 据介绍,信息学本质还是数学建模和算法设计,所以竞赛培训中还要学好初等数论、组合数学、概率论和部分高等数学的内容,因此学生的数学都是很棒的。其次,竞赛培训的本质不只是知识的传授,更重要的是能力的培养和非智力因素的提升,通过竞赛培训,学生的分析问题和解决问题的能力得到了提高,在不断挑战难度的同时,考验学生的意志力和心理承受力,“教育的本质也在提升学生的能力,只有能力才是受用一辈子的,把这些能力应用到文化课的学习中去,我们有理由相信,他们的其他学科的学习也不是问题。”向期中说。

    “我们全天在机房里,经常上午考五个小时,晚上再上机考四个小时,十分烧脑。” 魏辰轩兴奋地说,尽管网课期间无法回校训练,但他晚上10点半到12点经常参加线上的一些编程比赛,“能用编程解决问题,很有成就感,自己也很感兴趣,相当于从中学时就提前选定了未来的职业方向。”

02

优秀的孩子可以从青少年时期就接触信息学

“此次学校参加比赛的四名省队队员获得一金三银,可以说有惊喜也有遗憾。”向老师表示,其实选手们都很有实力,但比赛对选手的心理、竞技状态、得分技巧都有考验。对小遗憾,向期中表示,需要用长远眼光看待一时得失,信息素养的培养终身受益,他同时建议更多优秀的孩子可以从青少年时期就接触信息学,培养兴趣爱好。魏辰轩一路走来,清楚记得自己受到过多少打击。“题做不出来,做得不满意,都会很受挫,一路比赛也不断磨练自己的意志力。”最让他印象深刻的是,2019年4月他首次参加信息学省队选拔时,自己把程序写好了,但是因为紧张和做题时间很赶,忘记把代码按要求放入专门建立的文件夹,结果被判零分,“相当于考试忘记写名字交了白卷。”魏辰轩说,此次比赛自己心态稳定,正常发挥,但之前的教训历历在目,这些经历成了宝贵的财富。

    尽管已经保送清华,魏辰轩的高三生活也并不轻松,既要学习文化科目以及大学知识,同时还要为接下来的国家队选拨做准备。谈及未来的打算,他立志将来做一名计算机科学家,研究最新的算法和数据结构,为国家建设作出贡献。

03

编程能力在未来将提升个人竞争力

     为什么这么说?从大环境来说,整个社会已经逐渐迈入人工智能时代(AI时代),AI时代是一个以计算机科学为基础的时代,其中的核心则是编程思维。可惜的是,很多人认为不从事计算机就不需要学习编程,以至于错失了培养编程思维的机会,导致他们在学习和工作中处处落后于其他人。

    比尔盖茨说过:学习编程可以锻炼你的思维,帮助你更好地思考,创建一种我认为在各领域都非常有用的思维方式。

    因为编程所需要的很多能力和数学是相通的,比如逻辑完备性、模式识别等,所以数学底子好的人学编程会更加容易。
什么是编程思维?
    所谓“编程思维(computational thinking)”就是“理解问题——找出路径”的思维过程,它由四个步骤组成:


1、分解(decomposition),把一个复杂的大问题,拆解成更可执行、更好理解的小步骤。
    正如美国麻省理工学院的计算机教授瑞斯尼克所说的:“ 在学编程的过程中教会孩子们如何将复杂的想法分解成几个部分,不管孩子以后做什么,都可以用的到,这才是学编程的意义所在。”
2、模式识别(pattern recognition),找出相似模式,高效解决细分问题。
    我们在经验里搜索以往的类似问题及解决方法,套用解决。

    举个例子:假如你需要画100只猫,你会怎么办?正确的发方法是找出猫的“模式”,即猫的躯干、四肢、毛发等基本元素,再不断改变局部特征就可以了。现在流行的机器学习中普遍用到这种思维。
3、抽象(abstraction),聚焦最重要的信息,忽视无用细节。

简单说就是找到问题的本质,过滤掉其他无关紧要的因素。

接着画猫的例子,我们了解了猫的特征,就可以根据这些抽象的特点,形成关于猫的整体设想,画出躯干和四肢,做出一个模型。
4、算法(algorithms),设计一步一步的解决路径,解决整个问题。

 通过这四个步骤,一个复杂的问题先被拆解成一系列好解决的小问题→每一个小问题被单独检视、思考,寻找解决方案→聚焦几个重要节点,忽视小细节,形成解决思路→设计步骤执行→问题解决

    所以,所谓“编程思维”并不是编写程序的技巧,而是一种高效解决问题的思维方式。
    编程思维能培养五个方面的能力:策划构思能力、逻辑分析能力、模式识别能力、问题分解能力、测试纠错能力。


Facebook的移动技术总监魏小亮曾说过竞赛培养的能力可以分成几个类型:

1、基本技术技能。

    我想参加竞赛而且成绩不错的朋友,基本上都有三个非常出色而且难得的基本技术能力:

    算法设计、快速编程和自我调试。这是所有比赛都必须的:给定一个问题,需要很快地设计出算法,很快地编写出程序,并且在整个算法设计和编程过程中不断拷问自己的设计和程序,尽早发现漏洞、完善设计,最后在提交 结果之前通过一系列的测试尽量提高程序通过竞赛评委测试的概率。这三项基本能力是工作里面非常有用的。大部分公司的技术面试也集中在这三项基本技能里面。竞赛经验的确让优秀的参赛者在实际工作中获得先发优势,一般IOI/ICPC/TopCoder的优秀 参赛者都很容易获得公司录取,并且在起始级别的工程师岗位上作得非常出色。

2、独立学习的能力和自信心。

    我想大部分的NOI参赛者都是中学就开始学习中学课程里面不函括的内容:面向对象程序设计、数据结构、图论和网络流理论、算法理论、离散数学等等。如果一个参赛者是通过自己独立学习这些课外知识而在竞赛里面脱颖而出的,她一定有独立学习的能力和自信心,同时相信自己能够很快的学会各种新知识。这个能力和自信在工作中非常重要:        计算机语言日新月异,从Pascal/C到C++/Java到Python/PHP/Javascript/Objective-C⋯⋯一个人不可能从一 开始就懂得所有的知识,但只要自信自己能学会任何新的语言和概念(并且的确可以学会),那他就可以敢于面对未知的挑战。在工作中,这些“敢吃螃蟹第一人”往往会得到更多机会去开发新项目、创建新公司。

3、表达能力

    这一点我本人在吴文虎老师指导的NOI冬令营里面获益匪浅。当时吴老师要求每位冬令营选手挑选一 个复杂的竞赛问题深入研究解法,最后写成论文,并且在冬令营里面做报告。吴老师亲自把关,指导论文里面写不清楚或者报告里面说不清楚的地方。这是我第一次学会如何把一个技术问题写清楚、说清楚。这样的训练虽然跟竞赛成绩本身没有直接的关系,但能够让竞赛选手的表达能力上了一个台阶。表达能力对实际工作有非常重要的意义:现代的大型软件系统开发不是一个英雄人物就能完成的,如果一个子系统的算法和程序不能清晰地被理解,那这个子系统和它的作者就成为单一故障点(Single Point Of Failure) —— 只要作者一度假,就没有人能维护或者扩展这部分。基于这种风险,大家宁愿用一个更慢更费内存但能被其他人看懂的解决方案。在这两年的招聘过程中,我看到不少这样的可惜例子:不少ACM/ICPC的选手能在15分钟之内写出一个很巧妙的算法,在机器上编译、测试例子都通过。            但在黑板上或程序注释里面,他们花20分钟也没能说清楚这个算法为什么是对的,为什么要用这个算法。

4、合作能力

    NOI/IOI/TopCoder更多的是单枪匹马,而ACM/ICPC对合作能力的培养更有帮助。三个编程高手共用一台机器,紧缺资源谁先用谁后用,如何分工,这些问题在实际工作中每天都会遇到,如果一个选手在ICPC里面学会如何跟队友协调、如何培养信任,那她在实际工作里面就很容易融入一个团队,在团队里面找到自己的发力点 ,很快为团队作出贡献。

5、志同道合的朋友圈:

    一般来说,愿意花额外时间参加竞赛的学生都是喜欢写程序的,因为喜欢,他们往往更容易在 这方面越做越好。我10年前在竞赛过程中认识的老对手,现在还有很多是好朋友,不时能联系一下,得到他们的指导、交换最新的行业信息和趋势。这一点虽然对 实际工作没有直接帮助,但我觉得是参加竞赛获得的最宝贵的东西。

    这些大概是我在比赛里面学到的最有用的一些东西。大家如果对编程感兴趣,千万不要因为感觉学的时间晚了就放弃了。很多学习过程中收获的东西不仅仅只体现在竞赛成绩上,有些经验和能力能使你受用终身。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多