本来是像效仿大家在去年(2020)年底写一个年底总结的,不过想了想 2020 年也没有做什么事情,前半年受影响只能待在家里,当时还不清楚方向是什么该怎样去做,只能随便找个目标给点动力。现在想想当时以 ACM 为方向还是有点不妥,但好歹用在家半年的时间磨练了一下数据结构与算法,不过当时那种水平也只是能看罢了。后半年多少有点不同,放弃了 ACM、在别的系学自己喜欢的课、接触更多的人、尝试一些新鲜的东西、发展自己的技术栈。这些改变给我最大的感觉还是充实,相比之前的学习来说更有满足感,真正体现了 cs 的实践性,而不是一味的刷题。
现在想想轮子哥所说的不推荐 ACM 论是有道理的,ACM 本质上还是刷题竞赛,单论 ACM 本身来讲,其涉及到的 cs 理论、实践均不多,只是需要一定的智商和大量的练习,最好的证明便是我自己,哪怕一些最基本的常识都不会也能凭借 ide 和刷题刷到中等水平混牌子。ACM 需要投入大量的时间与精力,如果没有天赋与热情很难真正投入其中,而其回报率又很低,不能真正投入便很难真正”得到”什么,进一步打击自身的热情与自信。总之 ACM 是一个非常艰难的过程,坦白来讲它也只是某一部分精英的登云梯,当然 ACM 也并非全是弯路,ACM 经历是很好的锻炼,也是对 cs 的一个相对比较好的入门(反正我觉得从 oi 入门比从拿 cpp 做游戏入门好一些)。从这个角度上讲,学 cs 最好的路径应该是高中 oi 大学学术或者工程。
算到现在确切地说我真正学 cs 只有一年,也就是只有去年一年,再往前不是在绕远路就是在混日子,没有几天真正学进去的。大概是当时确实无法理解。还记得第一次接触深搜的概念,算法本身并不难,所需要用到的递归法我也能大概理解概念,但就是无法理解何谓”给走过的地方打上标记”,何谓”回溯”,直到后来静下心来当人肉编译器才理解这些过程是如何用代码实现的。
从这个角度上讲,代码实现是 cs 一项必备的能力,也是初学 cs 时最大的考验之一。cs 的本质是抽象现实世界,而代码实现便是这一过程的外壳。初学者最困难的地方大概是如何用这样密密麻麻英文单词拼接起来的读不通顺的文章表达现实世界的逻辑与事件。cs 的诸多教程、书籍都没有对这一部分有过教学乃至介绍,但这些教程无一例外都是建立在这一基础上的,因此这样的能力还是越早锻炼越好。
有一说一,制作游戏能够较大程度地锻炼代码实现能力。本质上来说,游戏也是抽象现实世界,因此游戏的种种规则设定可以较为规整地用逻辑表述出来,而再去制作它,一方面较为简单(简单是单从逻辑层面来说,整个游戏的制作并不简单),另一方面可以清楚地看到反馈。
因此 oi 和游戏制作其实都有适合初学者的地方,oi 更为系统更为学术,能够为游戏制作提供必要的算法数据结构知识,而游戏制作又能化编程为整活,锻炼自身在项目开发中的能力,给自己更大的满足感。
这么说来我在初中阶段还曾使用 gamemaker 引擎制作过一些很小规模的游戏,无奈当时只能找到 gamemaker gui 界面下的教程,涉及到语言脚本便没有了教学,身边又没有搞 cs 的人帮助,最终游戏也停留在一些十分简单的逻辑上,没有向深层次的 cs 知识深入。所以早期多问别人多找资料偶尔找成年人帮忙还是非常关键的。很多人小时候就对奇怪的计算机非常好奇,但大多没有引导,便渐渐没了兴趣。
大概就写这么多吧,写到最后就写成了对 cs 初学者的一些建议。毕竟我也是一个初学者,这些就当做我学 cs 的一些经验总结吧。
本篇文写在 2021 年 2 月 11 日晚 22 点,写在 2021 年春节之前,希望我在新的一年中能够继续坚持自己坚持自己的道路与梦想,也希望大家在新的一年中过得开心万事顺心。