---
title: "如何学习编程"
description: "在开始之前，建议先了解这份指南的定位和学习方法。"
---

> Documentation Index
> Fetch the complete documentation index at: https://cppguide.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# 如何学习编程

![](https://img.dailyup.xyz/originals/8208462134194-5953b711-77bd-41d4-8b68-83da2f9b10cf.png)

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

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

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

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

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

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

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

我们这里讨论的更多是竞赛编程，更准确一点来说是针对青少年信息学竞赛，这份信息学C++编程指南也是严格遵循中国计算机协会出的[《全国青少年信息学奥林匹克系列竞赛大纲（2023年修订版）》](https://www.noi.cn/xw/2023-03-15/788060.shtml)来设计的。

### 如何学习竞赛编程

【待补充】

### 无它，唯手熟尔

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

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

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

学习编程，无它，唯手熟尔！

Source: https://cppguide.xyz/intro/howtolearn/index.mdx
