牛人牛事|William Lin MIT破格全奖录取编程少年
William Lin,华裔计算机天才少年,2019年入选美国青少年信息学奥赛国家队并夺得国际信息学奥林匹克竞赛 (IOI) 全球银牌,2020年继续入选美国青少年信息学奥赛国家队;同时,他还是美国数学竞赛 (AMC) 全国一等奖获得者。因为在计算机和数学方面骄人的成绩,William 今年8月提前被麻省理工学院(MIT)计算机系破格录取,并获得全额奖学金。
William 在2019年国际信息学奥赛参赛现场
William通过自制视频分享了编程和计算机科学学习的经验,对有志于开始代码编程学习的青少年,给出5个阶段的学习规划建议:
编程学习前的准备 – 英语、数学和打字。很多年龄较小的同学是从Scratch开始的,在编程思维上Scratch有一定帮助;但是如果你想成为编程竞赛选手,要尽早的接触真实代码编程语言,比如Python、C++、JavaScript、Java等。在数学方面,William建议要储备从初二到高一阶段的数学知识,特别是代数、组合数学以及基础的模运算、数论和图论知识,而几何和三角几何方面要求不高。在数学知识积累方面,William推荐了HackerRank这个线上资料,有很多数论、组合数学、代数和概率论方面的训练题,扣哒君也推荐同学们课外阅读数学宗师陈景润教授主编的《初等数论》(共三册,哈尔滨工业大学出版社),强化一下计算机算法的数学基础。另外,William也特别强调打字,特别是盲打的重要性,他本人的盲打速度是每分钟100-130词。扣哒君推荐以下打字网站练习盲打:www.keybr.com和www.typingclub.com,简洁好用。学习掌握一门编程语言。很多人都说编程神级选手最好用的语言是C++,William同意这种观点,原因有二,一是C++可以解决一些非常困难的算法问题,二是C++是运行最快的语言之一,在短时间竞赛中速度优势明显。而对于初学者,如果代码编程让同学们有心理阴影,可以先从图形化编程Scratch或者场景化编程扣哒世界(网址: koudashijie.com, 支持Python, C++, JavaScript)开始,作为竞赛选手,William建议代码语言直接从C++开始,扣哒君推荐大家从扣哒世界C++入门,学习60个小时的基础语法和算法,然后结合扣哒世界童羽强老师开发的中国计算机学会CSP-J的OJ基础算法题库进行针对性训练。掌握基础问题的解决方法和数据结构。扣哒君推荐中级学习者挑战扣哒世界的计算机科学5和6,内容涵盖从递归函数到递归算法、队列和栈及应用、深度优先搜索和宽度优先搜索及应用、二分法、分治算法和贪心算法及应用。William还推荐了很多优质的学习资源,比如Antti Laaksonen编写的Competitive Programmer’s Handbook以及GeeksforGeeks算法部分。除此之外,要结合搜索引擎查找算法方面的新知识,特别是学习前辈(往届竞赛大神)总结的算法经验,你遇到的问题也是以前的学神遇到的问题,他们的解法过程和优化算法特别要多看。训练部分,HackerRank算法是William特别推荐的学习资料,体系化知识并有详尽的解释,对于算法入门者系统掌握算法基础非常有帮助。算法OJ平台他推荐的是A20J,国内也有很多类似的OJ平台,比如北大POJ、清华OJ、杭电OJ、洛谷、以及中学信奥竞赛名校(绍兴一中、成都七中、杭州学军中学等)OJ平台。William鼓励大家多参加竞赛,同高手切磋不断提升自己的算法实力,他推荐适合算法初学者的竞赛平台LeetCode Weekly/Bi-weekly、AtCoder Beginner、Codeforces Div.3 , 扣哒君还向算法初学者推荐每年一度的AI世青赛 (aishiqingsai.org.cn)和Code Quest全球赛,同全国以及全球的代码算法爱好者同场竞技。持续训练、唯手熟尔。刷题和参加各种不同的高水平竞赛有助于算法水平的提升,而且可以认识各地高水平学友,互相鼓励,一起进步。通过自媒体分享自己的编程学习经验和见解。独乐乐不如众乐乐,分享也是思路归纳和总结的过程,我们看到往届NOI、IOI等编程大神在知乎、百度经验、CSDN等平台分享自己的编程经验,扣哒世界的优秀学习者隋大神就有这样的好习惯,他坚持分享自己在编程和数学、音乐等学科结合创造和创新的乐趣,并在GitHub上收获了好几颗积极评价的小星星,这对于7年级的编程新星来说,是非常不错的开始。
《诗经》语曰:
高山仰止,景行行止,
虽不能至,心向往之。
荀子曰:
不积跬步,无以至千里;
不积小流,无以成江海。
扣哒君对曰:
行胜于言,
Do it now!