你好, 欢迎回来｡
让我们来谈谈 程序的基本原理｡
既然这是一个开始
编程课, 特别是我们将要讨论的 C,
在你能够理解一种编程语言之前, 你需要 来理解什么是程序｡
所以我想描述一些基本的, 基本概念, 然后再开始详细介绍C｡
计算机是很笨的机器｡
我敢肯定你们比 比不熟悉计算机能做什么和它做什么更重要｡
具体来说, 在引擎盖下面
当你点击你的浏览器时, 当你点击 您所使用的不同应用程序,
以及其背后发生的情况
有某种程序正在运行 告诉计算机该做什么｡
电脑真的很笨｡
他们只做他们被告知要做的事｡
因此, 一个 计算机将形成所谓的计算机指令集｡
一个指令集, 如果可以的话 想想看, 这是它将如何做一些事情｡
所以我们要告诉这台电脑 它将如何运作｡
我们是以 在更低级别上进行编程｡
每台计算机都有 称为指令集｡
指令集基本上 CPU上的指令, 即计算机的处理器｡
所以要用电脑解决问题 通过告诉您要做什么, 您可以通过发送这些
指令到指令集｡
所以这就是发生在 你写一个计算机程序就是你发送特定的指令 通过对CPU（即处理器）的命令来解决特定问题｡
而这种方法 被称为算法｡
所以对于你们这些了解 数学, 算法就是你解决问题的方法｡
比如说如果你
创建一个完整的程序, 它所做的就是测试 用户输入奇数或偶数｡
被描述为 算法本身就是一个测试, 不管这个数是否为偶数
或者奇数, 这就是算法
解决问题的语句 它的整体成为程序｡
我们会讨论这个 概念和算法｡
算法均为偶数均为偶数 更多种关系—与模块编程相关｡
所以我们会在 多说说看细节｡
但我还是想让你 当你写代码的时候, 你要理解你在做什么｡
在那发生了什么事 非常, 非常底层
你要写 这些算法包含在程序中｡
所以要写一个程序
将需要正确地编写指令 实现算法｡
这些指令可以表示为 在特定编程语言的任何种类的语句中｡
所以我们要关注c 但我相信你一定听说过其他编程 iOS应用程序中使用的Java､
c++､
objective c等语言, 但 实际上现在更多的是使用Swift｡
但是有这么多的程序 你可以学习的语言基本上可以让你 以算法和语句的形式向CPU发送指令｡
另外, 我还想谈谈 基本术语, CPU,
中央处理器｡
这是电脑的大脑｡
这是大多数 工作正在进行｡
这就是 执行指令｡
记忆中, 你经常 我听到了“记忆”这个词｡
而学生们经常会得到 我对硬盘很困惑
记忆不一样 作为硬盘驱动器｡
内存通常被称为 ram, 其是随机存取存储器｡
存储在内存中的所有数据都是一个独立的硬件组件｡
它不是真正的磁盘驱动器｡
程序中的所有数据 被存储在存储器中, 存储器是独立的硬件组件｡
因此, 它将数据存储在 在程序运行过程中｡
我们将讨论 变量及其含义｡
但是程序需要有数据 为了进行计算,
为了做算法｡
这些数据将 存储在ram､ 存储器中｡
我们把它存储在内存中的原因
与存储在硬盘上不同的是 它可以让程序运行得更快｡
但记忆通常也是 不持久跨重启是另一种澄清｡
但你应该明白 只是这个术语RAM｡
意思是记忆｡
是变量和数据 程序本身的存储位置｡
单独的硬件 组件, 然后是硬盘｡
硬件驱动器是 你买的电脑——那是永久性存储｡
这通常非常非常大｡ 它 包含数GB､ 数TB的数据｡
它存储可能 是程序的资源｡
当你打开电脑 关闭并重新打开, 这些文件仍然存在｡
当你把电脑 程序时断时续, 程序实际上会停止执行
而ram里什么都没有
所以要明白 在ram和硬盘之间｡
这是一个很重要的概念｡
再一次,
把ram想象成 因为硬盘驱动器与永久存储有关, 我们通常将资源放在那里｡
我们会有操作系统文件 各种不同的程序资源｡
开发了一种操作系统, 其 当你想使用电脑时, 基本上可以让你的生活变得轻松很多｡
因为在很低的水平上,
一个 计算机只是按照指令去做 使用指令集｡
这将非常困难 如果你必须理解所有这些说明的话｡
所以有一个叫做 使用户更容易使用计算机的操作系统｡
它控制所有的操作
通过硬件处理所有的输入和输出, 它知道如何与键盘､ 鼠标和显示器交互｡
它还管理计算机的 资源, 处理不同应用程序的执行｡
操作系统是 完全不同阶级｡
有很多东西 操作系统,
但要了解它的基础知识｡
它只是允许你使用 您的计算机｡
一些非常的例子 常见的操作系统是Windows之类的｡
每个人都使用Windows｡
Windows 10,
Windows XP, 不管是什么情况｡
Linux､ UNIX, 我们将 当我们讨论C的历史时,
我们会讨论更多｡
Android是一个操作系统 移动的设备, iOS｡
这些是特定的计划,
可能包含许多不同的程序, 让您的生活更轻松地与计算机互动｡
获取执行周期｡
这是CPU的生命周期｡
我提到这一点只是因为, 同样,
我们只是描述一些基本术语｡
这就是当你发送指令时 到计算机, CPU,
实际上发生的是 从内存中提取指令,
因为这就是程序｡
然后你会 在CPU上执行, 这是一个循环,
一遍又一遍地重复｡
你在重复｡
如果你听说过 用千兆赫这个术语来说, 一个千兆赫的CPU每秒可以做十亿次,
每秒十亿条指令｡
所以你可以想象
当你用这个来运行一台电脑时会发生什么 提取执行生命周期｡
这是一个小例子
我从互联网上的一张图片上看到了这种效果 执行周期更清晰一点｡
发生了什么 你在和CPU和这些指令互动｡
现在的情况是 你从拉姆那里抢来的
还有拉姆, 记住, 包含程序数据｡
您正在获取数据 那里的指示｡
你不断地解码 存储在寄存器和ram中的数据,
然后在 CPU的不同部分, 控制单元或ALU｡
这是一个循环｡
它只是不断重复 一遍又一遍｡
对于现在的CPU 每秒十亿次｡
所以当我们谈到c程序和 写c程序,
在很低的层次上, 在所有东西的下面, 我们 只是通过我们的高级编程语言与CPU交互｡
所以更高的层次 程序设计语言｡
高级编程语言 使编写程序更容易｡
现在如果我们必须
同样, 理解CPU上的所有指令, 很难写｡
要了解所有 指令, 这通常意味着它是汇编语言｡
如果你听说过“组装”这个词
语言, 它只是意味着你在一个非常低的层次上写程序 因为它的层次很低, 你可以理解指令集｡
你可以想象如果你
用这些指令来编写所有的程序 将是非常低效的并且很难编写程序｡
所以更高层次的编程 语言是汇编语言的对立面｡
这是一个更高的层次｡
一个例子是c｡
C为较高水平 程序设计语言｡
它描述了 程序将以一种更抽象的方式运行｡
你不用背 CPU上的指令｡
你只懂语言 通过这些算法来解决问题｡
它看起来更像是 英语｡
这样更容易理解｡
如果你看一个
汇编语言, 您将看到移动命令 寄存器, 数字, 基本上都是数字语句｡
而通过使用更高级别的 像c这样的语言, 您不必担心这些｡
你不用担心 关于指令集｡
你不用担心 汇编语言语句｡
所以它的效率更高 而且更容易完成和解决问题｡
所以我们要研究c作为我们的
更高级的编程语言, 但是其它的例子可以是Java, 目标c, 我提到的东西｡
这些是高级编程 让您的生活更轻松､ 更有效率的语言｡
除了这些更高层次的 编程语言,
如果你有一种更抽象的语言, 您必须能够使用该语言, 然后在CPU上运行它｡
你必须把它转换成 CPU理解的指令｡
所以这就是 编译器开始起作用｡
通常当您在 编程时, 您将使用编译器来翻译
这个高级语言,
源代码变成了详细的 机器语言指令, 基本上就是汇编语言｡
所以你要写一个
一个更高层次, 更抽象思考程序
然后编译器
生成数百万条指令, 这些指令将被发送到 CPU上的指令集｡
所以我们要用一个编译器 在这门课上做这个｡
我们将用 一种更高层次的抽象形式｡
然后我们将运行一个
程序调用编译器将代码转换为 CPU能够理解｡
关于编译器还有一点 他们也会检查你的程序是否有有效的语法｡
因此, 当您编写代码时, 你必须遵守语言的规则｡
语言的规则是 本质上是语法,
不管你在 语句的结尾,
无论是否使用某些关键字｡
如果你做了这些事 错误地,
您将无法运行程序｡
所以编译器会找到 所有这些错误, 它会告诉您,
并回报给 然后说,
嘿,
你没有正确地编写代码, 你必须 在我们将这些东西转换成 CPU上的指令集｡
所以我们要熟悉一下
一般意义上的编译器, 如何使用它们, 如何 理解他们告诉我们的｡
高级语言是非常复杂的｡ 比机器语言更容易学习和编程｡
这就是本幻灯片的要点 现在就是通过使用像c这样的语言, 效率更高､
更容易｡
当我们编写程序时 实际上要执行多个步骤｡
我找到了这张插图 以一种非常好的方式描述了这些步骤｡
所以我从一本书上拿了这个｡
这是一套基本的步骤 你可以写任何程序｡
从第一步定义 计划目标､ 了解需求､
维护 和修改程序｡
让我们来看看
你会发现你正在做的 在这堂课上做这个｡
当你开始写 程序中,
您需要遵循所有这些步骤
第一步是 定义计划目标｡
这就是你要去的地方 了解需求｡
您不能开始编写代码, 除非 你知道你需要做什么｡
所以你得弄清楚 在此步骤中要完成的工作｡
在您了解了 需求,
然后开始设计代码｡
当您设计代码时, 这就是代码将如何满足需求｡
用户界面是什么样的 看起来就像｡
你打算怎么组织你的
程序, 您是否要创建不同的函数, 并尝试创建 不同的算法等等｡
那你就要 开始实现代码｡
这是您实际编写 代码并将其放入集成开发环境中编辑器中｡
您将设计转换为 编程语言（在本例中为c）的语法理解
c语言的规则｡
因此您可以使用任何文本编辑器｡
我们将使用 一种叫做冷块的东西｡
你通常会想用一些 不仅仅是文本编辑器,
还有我们将要讨论的IDE｡
编写完代码后,
你必须编译它, 因为它需要把它转换成源代码 代码转换为低级语言｡
我们已经谈过了, 所以这是一个非常基本的步骤｡
然后运行程序｡
运行程序就是执行它, 就是使用它｡
然后就是 成为第五步｡
运行程序后,
因为即使您编写了代码并且它可能符合 语言的要求, 它可能不会做它想要做的事情,
所以你必须测试它, 你有 查找并修复错误｡
所以仅仅因为一个程序 逃跑并不意味着它能成功｡
我让很多学生 说, 嘿, 编译, 我完成了｡ 不, 不, 不
你得确保
当您运行它时, 它满足要求并执行什么操作 你认为它会做什么｡
所以你必须不断地试验｡
你要执行第一步 一遍又一遍地重复｡
你会成为 发现你要写代码, 测试, 写代码 测试､ 编写代码､ 测试｡
通常, 当你这样做的时候, 你 我想一小块一小块地做｡
你要写两行 代码､ 测试｡ 另外还有两行代码, 测试等等｡
因此需要进行测试和调试｡
调试是另一个概念｡
我们会有很多关于 调试, 但这是您发现并修复编程错误的时候｡
有一些技巧 您可以使用某些工具来帮助您查找这些错误｡
通过测试你会学到很多东西 和调试, 因为您总是可以了解到大量
信息｡
这将是正常的｡
您将编译
程序不会像你说的那样做 你会从中吸取教训的
这就是我们 在这门课上要做的事｡
我不仅要向你们展示 正确的做事方法｡
我要给你们看错误的 然后你就会明白为什么这是错的
最后一步是维护｡
这是程序 发布并被许多人使用,
但仍可能存在缺陷｡
因此, 例如当Windows 10
您会注意到它仍然有错误或崩溃｡
所以你总是 正在获取更新｡
当你得到这些更新时, 这叫做维护程序｡
所以就算你不干了
编写代码并将其发布给公众, 这并不 意味着你不再维护它了
维护是经常的 最广泛的阶段,
最广泛的步骤, 因为当你 发布一个程序, 它可能会在那里五年或十年｡
你得把这些修好 让您的客户满意｡
您可能还需要添加新要素 以使其在市场上保持最新｡
所以维护真的是 也很重要｡
维护在您 将产品发布给客户｡
因此, 对于所有这些步骤, 您可以
跳转, 以不同顺序执行步骤, 具体取决于 编程方法学,
那也是另外一堂课
你并不总是需要 以瀑布式方法执行这些步骤, 从一开始
在最后一步结束｡
你可能正在设计 回去做你的测试, 然后回去
和重新设计等等｡
所以你要跳 取决于什么是最实际的｡
根据我的经验,
许多新的 udemy中许多类的程序员都忽略了 第一步和第二步, 然后直接编写代码｡
他们在教你怎么写 代码,
但他们没有告诉你为什么要写代码｡
所以这是个大错误｡
当您开始编写代码时, 我需要理解概念, 你需要理解需求｡
你就可以逍遥法外了
但是对于更大的程序, 你会发现 需要完全专注于设计｡
所以越大越 程序越复杂,
需要的计划就越多｡
你应该养成这个习惯 在编码之前进行规划｡
不要只是一头扎进去 从这堂课上我注意到我做了很多计划｡
我会告诉你 当你开始写一些你需要的代码时
以及您应该如何设计｡
因为这会让它 更容易实现代码,
这是第三步｡
所以你要记住 我常常把东西写在纸上来种植｡
这里有各种各样的 文档设计语言和您可以使用的东西｡
但你总是想 基本上是有效规划｡
然后当你在编码的时候
我之前提到过, 但这是另一个非常非常重要的 概念,
你总是想工作在小步骤, 各个击破 您需要不断地进行测试｡
你不想写100 行代码, 然后说, 哦,
我完成了, 让我去测试｡
因为现在如果它不能 在任何100行代码中都可能有错误｡
这将是非常困难的 以解决该问题｡
但是如果你用一点 块, 五行代码, 测试它,
然后再写五行 代码, 测试它,
它会更容易找到和修复您的错误.
所以让我们集中精力分而治之 当我们在这个类中编写代码时｡
我希望这对你有帮助｡
同样, 这只是一些基础知识｡
我想提供 一些基本术语｡
你们很多人可能已经知道 很多这样的信息
但是当你学习 编程语言,
您必须了解这些基础知识｡
-谢谢—谢谢