如何学习编程

记得之前有一位妈妈带着她的孩子(五年级)来找我,说孩子正在学习编程,学的 C++,计划接下来参加 CSP-J,在和孩子聊的过程中,我问孩子怎么学的,结果孩子掏出一本厚厚的《C++ Primer》,他说是按照这本书来学的,但他学得很痛苦,我一下也有点懵,我对这本书也还算比较熟悉,很早前也啃过,当然也很好,对于很多 C++ 程序员,这也是必备的一本书学习参考书。

但对于一个想参加 CSP-J 竞赛的五年级孩子来说,按照这本书来准备和学习,我觉得就有很大问题了。也不知道是哪位给孩子推荐的,生生就是不想让这位孩子继续下去的感觉!

国内的信息学竞赛编程是用的 C++ ,大家可能会到网上去搜,哪些好的 C++ 教材,也很容易就搜索到 《C++ Primer》这本书,但可能没了解上下文,专业程序推荐的 C++ 学习用书并不一定适合竞赛入门学习。

所以这里专门来聊一聊竞赛编程,以及如何去学习和准备竞赛编程。

竞赛编程与工程编程

工程编程,就是程序员日常的工作软件编程,编程是围绕产品来进行的,所以更强调代码的可读性和可维护性,本身要涉及的知识点细节更深,范围也更广,而且会涉及到各种开发框架与工具的使用。

竞赛编程(Competive Programming)是一种强调算法设计与实现能力的竞技活动,参与者需要在规定时间内解决多组复杂的编程问题,因此选手在日常的学习和训练中,需要不断提高自己的速度和准确性,相对来说竞赛编程更纯粹一些,边界也更清楚。

当然,无论是竞赛编程,还是工程编程,都需要扎实的编程基础,都需要具备调试与代码优化的能力。

我们这里讨论的更多是竞赛编程,更准确一点来说是针对青少年信息学竞赛,这份信息学C++编程指南也是严格遵循中国计算机协会出的《全国青少年信息学奥林匹克系列竞赛大纲(2023年修订版)》来设计的。

如何学习竞赛编程

【待补充】

无它,唯手熟尔

编程是一门手艺活,特别强调动手实践!就像学习游泳一样,听教练讲如何做动作,如何调整呼吸,相信很容易听懂,但听懂不代码你就会游泳,你得下水去扑腾,可能你觉得动作并不难,但很可能的是,一下水,你的动作全乱了,这就需要练习,通过练习才能真正的理解和掌握!

编程学习是一样的,光看书、看视频不行,得动手写代码,而且很多时候需要有针对性的刻意练习。

例如,刚开始学习编程时,程序代码一般都不长,尽可能先去尝试理解程序,再打开编辑器去写代码,写的时候不要照着文档一行一行的敲,更不要去复制粘贴代码,凭自己的理解尝试去写,实在写不出来,再回去看,再尝试自己去写,反复这个过程。直到能够独立写出来为止,这是一个必经的过程,也很重要。

学习编程,无它,唯手熟尔!