我在 YouTube 上教授 C 语言编程时学到的

与他人分享知识通常是刷新和更新您自己专业知识的好方法。
88 位读者喜欢这篇文章。
Person reading a book and digital copy

为了教给别人而分解某件事,这可能是一种重新认识一些旧概念的好方法,并且在许多情况下,可以获得新的见解。

我有一个 YouTube 频道,我在其中演示 FreeDOS 程序并展示经典的 DOS 应用程序和游戏。 该频道拥有少量追随者,因此我倾向于直接探索观众建议的主题。 当一些订阅者问我是否可以制作更多关于编程的视频时,我决定推出一个新的视频系列来教授 C 语言编程。 我从教授 C 语言中学到了很多东西,并且在这个过程中,我遇到了一些我认为其他人会喜欢的有意义的收获。

制定计划

在我的日常工作中,我领导培训和研讨会,以帮助新的和新兴的 IT 领导者发展新技能。 在正常工作之外,我也喜欢担任兼职教授进行教学。 因此,我很擅长构建课程大纲和设计课程。 这就是我开始的地方。 如果你想有效地教授一个主题,你不能只是即兴发挥。

首先写下你想涵盖的主题的提纲,并弄清楚每个新主题将如何建立在先前的主题之上。 添加新知识的“积木”方法是有效培训计划的关键。

为了教授 C 语言编程作为“跟随”视频系列,我创建了以下初始大纲

  1. C 语言编程简介—#include#definemain()、数据类型和运算符
  2. 流程控制—流程控制和循环
  3. 函数—用户定义、标准库和递归
  4. 数组—固定大小数组、指针和可变大小数组
  5. 文件—读取和写入文件
  6. 高级编程—reallocgetline 和二进制
  7. 控制台编程—conio
  8. 整合在一起—编写一个回合制游戏

每个主题都建立在先前的主题之上,并且在本系列结束时,我们已经学到了足够的 C 语言编程知识来编写一个全屏游戏。

展示和讲述

我最初计划只是录制一个关于 C 语言编程的视频系列,但我很快意识到人们需要某种书面教程; 仅仅一小时的视频包含的信息太多了。 为了配合每周的视频,我决定编写一个简短的编程指南,以更详细地解释每周的主题。 该指南还包括新库函数或编程概念的列表,这些列表提供了学习 C 语言的“快速参考”。

幸运的是,这对我有帮助。 录制一个小时长的视频需要计划,我喜欢计划。 在录制下一个视频的前几天,我写下了我想涵盖的主题,以及我想在屏幕上演示的示例代码。 这给了我一个缩小视频焦点的大纲。 录制视频后,我将我的笔记扩展成一个编程指南,并在网上发布。

使其立即适用

大多数人通过实践来学习效果最好; 这就是为什么本系列中的每个“章节”或“单元”都包含几个示例程序,您可以按照这些程序学习编程。 我不希望本系列只关注编写程序的理论,而是要实际去做。 例如,在第一章 C 语言编程简介中,我们通过编写程序来计算圆的面积,以及如何用余数除以两个数来学习。

每个单元还以几个“练习编程”任务结束,以帮助用户练习他们的新知识。 这些练习直接应用我在当周的视频中介绍的概念,以加强我们所学的内容。

最重要的是,我演示了如何编写实际的 FreeDOS 程序作为视频系列的一部分。 例如,在介绍循环的视频中,我还展示了如何使用 do-while 循环编写 FreeDOS PAUSE 命令的一个版本,以等待用户按下 Enter 键。 在本系列的其余部分中,我编写了 FreeDOS ECHO、TYPE、MORE、FIND、CLS 和 COPY 的版本,以演示如何应用新概念。

乐于学习

当我在本系列中继续时,我发现探索自己的新主题非常有趣。 例如,因为我很久以前就学会了 C 语言,并且通过使用 DOS 上的 C 编译器编写程序来练习我的 C 语言编程,所以我从未学过 getline 函数。 这是一个较新的函数,可以从用户那里读取任意长度的行。 与 fgets 函数和更危险的 gets 函数相比,getline 是读取用户输入的首选方法。 但是在录制视频之前,我对 getline 了解不多。

有趣的是,实际上我编写了自己的 getline 版本以供自己使用,我相信无数其他程序员也编写过。 但我没有意识到它是较新的 C 标准的一部分,大约在 2010 年添加。 在教授 C 语言编程时,这自然需要读取用户输入,我也学到了一个“对我来说是新的” C 语言编程函数。

我还磨练了自己的开发技能。 作为一名自学成才的程序员,我知道我早期养成了一些坏习惯。 其中一些习惯是在其他编程语言中编码时的最佳实践,但在 C 语言中却不是很好的习惯。 AppleSoft BASIC 将变量名限制为两个字母。 Fortran 可以假设以 I-N 开头的变量将是整数变量。 因此,在编写自己的程序时,我的默认设置是使用一个简单命名的变量,例如 i 来迭代列表,或者使用 max 来存储某个东西的最大值。

但是在向其他人教授 C 语言编程时,我想展示良好的编程行为。 我最终打破了命名短变量的坏习惯。 在编程视频系列的最后,我编写了描述性变量名,例如 colornum 来存储颜色列表的索引,player 来表示“玩家 1”或“玩家 2”,以及 message 来存储消息。 我认为我终于打破了 20 多年自学编程的大部分坏习惯。

教学通常是双向的——当你分享知识时,你会获得新的事实和观点。 无论你对某个主题的技能或熟悉程度如何,永远不要害怕拿起“老师”的衣钵并帮助其他人学习。

如果你想自己学习 C 语言,你可以在这里找到 C 语言编程系列。

接下来要阅读什么
标签
photo of Jim Hall
Jim Hall 是一位开源软件倡导者和开发人员,最出名的是 GNOME 的可用性测试以及 FreeDOS 的创始人 + 项目协调员。

8 条评论

先生,我真的很喜欢这篇文章。 我完全同意! 教别人有很多原因是有益的。 我也尝试做同样的事情,但使用 c++ 和其他类似的主题。 继续努力!

当我接受医学培训时,有一种说法是关于如何学习以前从未做过的程序:“看一次,做一次,教一次。”
这个想法是要非常简要地解释如何快速深入理解对你来说是新的程序或任务。 即使详细解释,在你真正自己做之前,你也不知道如何做某事,最后,你的理解深度必须更大才能向别人解释。

当然! 你通过做来学习,但你通过教来学到更多。 很高兴你喜欢这篇文章。

回复 作者 Greg P

我不能挑剔你的论点,但在遵循你最后一个关于更大知识的例子时,我发现当被要求向新手解释某件事时,有时它会让我意识到我并没有我最初想象的那么了解。 这对我来说真的很有帮助。

回复 作者 Greg P

我喜欢迭代中的 i。 每个程序员都知道它,并且在括号内更容易阅读。

对于一个简短的函数,我仍然会使用 i。 但它必须大约十行长。 否则,我现在更喜欢使用更具描述性的名称,这样以后更容易理解代码。 如果可以,我的目标是 6 到 8 个字符长。 不要太长,但要足够长以提供足够的描述。

我喜欢保持名称的描述性。 这些天,如果我编写一个函数来评估某事并返回一个真/假值,我喜欢以“is_”作为前缀来命名该函数。 例如,经典的“是否为奇数?” 测试函数最好命名为 is_odd() 而不是仅仅命名为 odd()。 这样,您就有这样的代码

if (is_odd(value)) { ... }

回复 作者 Cassio Tavares (未验证)

我同意你们的观点

哇——还有人记得 AppleSoft 吗? 不过,如果我没记错的话,它允许变量名使用 238 个字符——但只有前两个是重要的,所以如果你喜欢打字,你可以创建“更易读”的代码。

此外,我从第一个 K&R 参考中学习了 C,所以我的许多迭代循环都包括 i、j 甚至 k。 是的,这会降低可读性,但肯定可以节省打字时间…… 我什至没有注意到今天我在更复杂的程序上仍然这样做,所以感谢你让我问自己“为什么?!”!

© . All rights reserved.