在开始编程之前
1. 什么是编程
1.1 定义
1.2 编程的两个起源
- 两个计算模型:图灵机 (Turing Machine) 和 lambda 演算 (Lambda-calculus)
- 命令式编程 (Imperative Programming) 和函数式编程 (Functional Programming)
1.3 编程语言 (Programming Language)
- 编译型 (Compiled) 语言和解释型 (Interpreted) 语言
- 主流编程语言
2. 学习编程的方法和建议
2.1 多敲代码
- 实践是检验真理的唯一标准
- 敲过才算学过
2.2 学会看报错,看日志文件 (Log)
2.3 使用搜索引擎 (Search Engine) 查找资料
2.4 博客
可以发博客分享自己的心得或提出自己的疑问
2.5 学会使用 GitHub
GitHub 是世界上最大的代码托管网站,上面有大量优秀的开源项目
2.6 关于
2.6.1 关于人工智能 (Artificial Intelligence, AI)
了解一下 Prompt Engineering 和 MCP
2.6.2 关于编程交流群
详见 编程交流群生存指南
2.6.3 关于手册 (Manual) 和标准文档
自然语言是注释,代码更重要
2.6.4 关于黑子
C 有很多值得黑的地方,不过黑的话要拿出证据来(当然这些证据也俯拾即是)
2.6.5 关于更高级的东西
Talk is cheap, show me the code.
Code is cheap, show me the proof.
2
Talk is not cheap.
2.7 理解语言的能力
- 编程语言是人写的,也是给人看的,编程语言当中有自然语言的影子
- 把你的代码写得更像自然语言,就能自然地契合“如无必要,勿添注释”的思想
- 函数名比较抽象,但是绝不是毫无意义,了解一下函数名的词源,有助于记忆函数的功能和在正确的使用场景想起来它
3. 学习编程必需的能力
- 搜索引擎的使用:主流搜索引擎见 2.3 使用搜索引擎查找资料
- 寻找官方网站,注册账号,与下载正版软件的能力
- 基本的英语水平,要理解报错信息的内容
- 合理提出问题的能力,详见编程交流群生存指南
4. 关于 C
4.1 发展历史
- 机器码
- 汇编
- ALGOL CPL BCPL
- C
4.2 标准
- ANSI C(被 ISO 采纳)
- 从 C89 到 C23(建议大家有空了看看标准)
4.3 应用领域
- 系统编程:操作系统 (Operating System, OS),编译器 (Compiler),数据库 (Database, DB) 等
- 嵌入式开发,物联网 (Internet of Things, IoT)
- 网络编程
- 图形图像处理
4.4 推荐网站
- C++ 参考手册 学习 C 和 C++ 必备网站
- Compiler Explorer 在线编译器,支持生成汇编等多项功能,支持非常多的语言和多种编译器
- 牛客网(New Coder) 大量练习题,需要会员
点击在线编程 - 语法篇 - C 语言入门
点击专项练习 - 编程语言,选择 C 语言
- Codewars 偏实际应用的题目,注重语言特性和实践,需要登录后使用
登录后初始化账号,鼠标移动到左边打开侧边栏,点击 practice
4.5 推荐的 C 书籍
C 程序设计语言 第 2 版
C 语言之父力作,第一推荐;
C Primer Plus 第六版(中文版)
C 语言的经典教材,但是有些地方表述有误或者不合适,第二推荐。 习题答案暂时见这里
注意读音
注意单词 Primer 的读音,不要读成普瑞么
5. 开发工具
5.1 编译器
- GCC
- Clang
- MSVC(充话费送的)
5.2 编辑器 (Compiler) 和 集成开发环境 (Integrated Development Environment, IDE)
别弄混代码编辑器 (Editor) 和编译器!!!(否则就等着群友骂你吧)
轻量编辑器 VS Code(Visual Studio Code,简称 VSC)但是需要自己配环境;如果官网下载特别慢的话,复制下载链接,把链接中的
az764295.vo.msecnd.net
换成vscode.cdn.azure.cn
普遍应用于 Linux 的开源编辑器 Vim
什么是 IDE(Integrated Development Environment)
JetBrains CLion 可以在官网或 JetBrains Toolbox App 下载
在线 IDE Lightly
5.3 CMake 和 XMake
在项目案例模块中,我们会讲解一些关于构建系统的知识。
5.4 debugger
IDE 一般会自带 debugger
6. 推荐阅读或学习
- SICP (Structure and Interpretation of Computer Programs) 第二版(用 Scheme 写的那个版本)
- UML
- pl-docs
计算机各领域的课程资料
北大的一位学长维护了 CS 自学指南 这个网站,上面汇集了计算机各个领域的课程资料。
这里的每一门课都可能凝聚着专家教授几十年的心血,他们的伟大远非我们所能企及。
正如《CS 自学指南》的作者所说,很多人的目标只是想快乐地、自由地、高质量地掌握那些专业知识,却因种种原因收效甚微,抑或带着痛苦去应付。上述的名校课程,已经让很多人从迷茫中找到方向,从知识中收获快乐,向着上述目标迈进了一大步。我们会追随他们的脚步。如果我们的 Mdr-C-Tutorial 也能成为一道亮光,划破广大读者学习之路上的暗淡,那将是我们无上的光荣。
我们会感受到与伟大的愿望与呐喊发生的共鸣,我们相信很多人认为不能改变的东西终将改变。
为先行者致敬。
7. 关于 C 语言标准文档
有且只有标准文档,规定了一门语言是什么。如果有精力,非常推荐阅读 C 语言标准,上面不仅有语言规则的定义,还有丰富的示例代码。
各版本 C 语言标准文档获取如下:
- 点开 C++ Reference
- 向下翻,找到 C 参考手册的外部链接
- C 语言及库参考中的
.pdf
就是标准文档,编号(n 后面的数)越大越新
习题
题目难度标注
为了致敬计算机科学家高德纳和他的不朽著作计算机程序设计艺术,梦猫大典采取和那部著作相似的题目难度标注方式。
不同的是,这里采用的格式是 [*.*]
(在本网站内用 斜体 标识),其中 *
是一个 0-9
的数字。第一个 *
表示难度等级,第二个 *
表示工作量。一般地,前面数字大的后面数字不太可能小。
难度前面如果加 M
,说明需要一定的数学知识;如果加 HM
,说明需要比较高级的数学知识。
难度后面如果加一颗 *
,表示不做此题几乎对当前章节的学习无影响;如果加两颗 **
,说明此题涉及当前章节之外(可能是成体系的)知识。
- [10101] [0.1] 查找资料,了解高效使用搜索引擎的方法。
- [10102] [0.1] 熟悉键盘,知道如何打出下列符号:
+ - _ / | \ ' " : ; , . ? ! ( ) [ ] { } < > & # *
。 - [1.3] 在电脑上安装 C 语言开发所需的工具链和编辑器。
- [0.2*] 探索 Compiler Explorer,并了解其功能。
- [0.2*] 探索 C++ Refererence,并了解其功能。
- [3.5*] 了解编程语言的发展史和分类。
- [5.8**] 阅读并学习《计算机程序的构造和解释》(英文书名 Structure and Interpretation of Computer Programs,简称 SICP)。