大家好,我是 Nick Parlante。这门课讨论的是计算机的基本性质 计算机如何运作、可以做什么和不可以做什么 你完全不需要有计算机的背景知识。这门课谁都能上 开始讲课之前,我想花点时间感谢 Google 支持我这个课题的早期研究,使我能够制作这门课 简单提一下,这门课不但有视频,每个视频部分 还有一份书面文档,就是我正在拖动的这份文档 这个文档有解释、图表和代码实例 你随时可以交替使用视频和文档 假如你想要再次阅读解释、试一下实例或其他内容 看我做和你自己尝试有很大区别 所以我的建议是,每个部分结束时,我们经常会有练习 那时,你做练习之前,可以决定 你是否已准备好马上做练习呢 还是想再看看文档,做一些试验来巩固知识呢 你至少应该知道每个部分我们都有文档提供 因此我想说的是计算机的基本等式是 计算机 = 强大 + 愚蠢。强大指的是 计算机可以进行几十亿次运算。它们的运算速度惊人 但这些运算是愚蠢的,因为计算机可以进行的运算 非常简单,是完全机械的 这些运算没有用人类的思想去思考它们在做什么 所以在一定程度上来说,这个奇怪的组合是强大加上机械的愚蠢 我们正学习这些短小的代码实例时,就会看到这样的模式 计算机世界里也是这种模式 好啦,我有点过激,我在调侃计算机。哈,计算机真笨 但另一方面,我们看到计算机是非常有用的 这就是这门课的内容。一方面来说, 翱翔这个有点机械的缤纷计算机世界 然后将它和你知道的事情连接在一起,如电子邮件和 MP3 音频 这些事物在现实世界中是非常有用的。我尝试将两个世界连接在一起 向你展示计算机如何运作、计算机如何融入现实世界 我的目标是学完这门课,你理解计算机如何运作、如何融入现实世界 你也不会被计算机难倒。你不会认为它是 神奇的、不可思议的盒子。我也有一个神秘安排 世界上懂计算机科学的人太少了。我们要解决的问题太多 但就是没有足够的人通过编程来解决这这些问题 我的神秘安排是通过带你进入计算机世界 了解计算机如何运作,你可能会发现你将来想从事计算机科学 我要讲的第一个近似法是 计算机如何运作。计算机内部是由代码驱动的 以后会更详细讨论这点。现在只是第一讲。 我画了一幅计算机的图。计算机内部的代码是 由这些简单指示组成的。 一条指示可能是两个数的相加 就是1加1或者检查2是否小于10 因此在第一讲里,计算机做的事情就是完成这一系列指示 每个指示都很简单,计算机只是 逐个完成一系列指示,只不过它的速度飞快 但每条指示都有这种非常机械的固定感觉。因此我要说的是 人们会问一个很自然的问题,就是 既然计算机如此机械地执行指示 它如何完成现实世界中这么多有用的功能呢?对于这个情况,我画了一个图表 在右边,我要想出一些有用的功能 如消除红眼或即时短信。我要讲的是 你的电话、数码相机都是计算机 那么在右边有一个有用的功能,消除红眼 在左边,有一台计算机要执行这些简单的机械指示 但什么将两个视图连接起来呢 答案就是计算机编程 有一个人,就是计算机程序员,首先想到一个主意。噢,我们应该要 消除红眼,这会很有用。那他们就用他们的创造力和 想象力来思考计算机可以做些什么有用的事情 然后计算机程序员做的就是组织和分解这个问题 让计算机可以执行 程序员组织事物,这样计算机就可以做这件 有用的事情。这就是计算机编程 其实,你在数码相机、手机或计算机上做的有用的事情 都是有人在后端使其发生的 我有点喜欢这个组合。程序员以某种方式 付出他们对现实世界的创造力、洞察力以及对什么事物可能是有用的想法 这是他们要解决的第一半问题 计算机付出的是它的特长。我认为计算机的特长是 最终会变得很便宜。计算机也可以很快地执行这些指示 我们最终也可以得到这个美好的组合 因此世界上有这么多计算机在做有用的事情 这表明人和计算机之间有良好的伙伴关系 这个表是这节课的总结 我们会看看左边 看计算机世界是怎样的。我们会讨论计算机世界 和你使用的实际功能之间的联系,了解计算机 如何融入现实世界,完成任务。这节课的第二部分里 我会开始做一些代码实例。我应该要提到 你要耐心点。我要开始写代码 我们的第一批代码实例非常简单,它们不会做很花哨的事情 我觉得它们有点像乐高积木。我们学每一点代码 就是多一块积木,我们最终要搭起这些积木 做一些很棒的事情。但开始这两个部分 我们要从某个地方开始,这些实例非常简单 所以我让你耐心点,我答应你们,我们会用这个材料做一些很棒的事情 实际上,我提前告诉你 在下面两个小时的讲课里会做什么。我们会开始讲视觉特殊效果 我们会试一下有名的猴子、月亮、香蕉的问题,如这里所示 我提前告诉你我们要做的事情。今天我们只是写一些 简单的代码。做这些代码练习,我们要用一门称作 JavaScript 的计算机语言 JavaScript 是一门很受欢迎的语言 它在新的网页浏览器里运行,所以很受欢迎 它也很适合这门课,因为我们是用网页浏览器 这样就可以很容易运行代码,我们会用 JavaScript 和其他我为这门课添加的扩展代码 因此跟专业的 JavaScript 不太一样。我们会学习很简短的代码短语 足够让我们来了解概况,理解我要讨论的重点 以及探索一下计算机。 但我们不用学习编写完整、专业的程序所需的大量知识 好吧,这个是我的第一个代码实例。 我们采用的方式就是这个长方形的小区域。里面的文本 就是代码。下面有个运行按钮。 我点击运行按钮时,计算机从最顶端开始,运行这几行代码。 它会执行每一行代码。它会进行每一行代码的内容 在这里我们看到的是 print (打印)功能 这只有 print 这个词,还有打印功能的运作方式 有 print 这个词,有左括号 这里有一些内容。这里只有数字6 最后,这行以右括号和分号结束 打印功能就是将括号中间的内容打印出来 如果你看这里右边,这就是我点运行按钮时的输出 假如我要改这里,譬如说打印42,然后运行 我们就会看到42,来自第一个打印行 要是我打印1,2,就可以看到这里有1和2,就是这样运行 我讲过,我们的头两个例子不是很花哨 这当然是真的。那么我可以试一下在这里加一点东西 我可以说逗号 47。运行时,我们看到 有1、2和47。我将高亮的这些行复制 然后粘贴几次 就有几行代码。如果我运行 就有几次重复的输出 关于这里要提出一点,就是这个代码的句法不是自由形式 相反,是很有结构的。必须是有结构的 计算机才会明白。这实际上反映了计算机的内在性质 计算机的性质是机械的、固定的 它可以理解的语言也必须是机械的、固定的 开始的时候会有点奇怪,你不能用自由形式 来写英文,让计算机来跟着做 这是你的第一课,计算机的性质 或者你可以把它看做是入乡随俗的性质 看,我让你去参加计算机的世界,我们要用计算机的语言来学习 开始的时候是有点奇怪 但事实上这并不难。句法是有结构的,但也很简单 因此,我要鼓励你,别因为这种语言的有结构的机械性质而拖延学习 这种语言会帮我们做很棒的事情 好的,那是我的第一个例子,让我们试一下第二个例子 在第一个例子里,我只是打印数字。在计算机代码里, 有个东西叫字符串。这是字符串的第一个例子,Hi 在引号里 字符串只是一串字母,在代码里,它写在双引号之间 所以这里写 Hi。print 可以打印数字 它也可以打印字符串。它只是将字符串解释成一串字母 字符串是什么,就在这里打印什么 我可以改这里,这是 Hi,我也可以改成 good day 字符串可以有空格 那么我运行,这里就有 good day。在计算机程序里,字符串和数字是很常见的 计算机程序里的字符串可以装你输入的 URL 或者你在文字处理器里写的每一段文字都可以用储存为一个字符串 所以,字符串基本上就是一串字母 在计算机里,它是很常见的一种数据 这个代码实例里展示的另一个内容是这里的第一行 称为说明,在 JavaScript 里,说明的开始有两条斜线 说明的运作方式是,说明开始有两条斜线,计算机会忽略斜线右边的内容 我会用说明来写一些评论 如我这里有两个字符串。一些短评论、写给自己看的笔记 或关于代码的一些东西。运行代码时,计算机知道要忽略这个部分 哦,那只是评论而已。在以后的实例里 你会看到有一些说明,有关我评论正在做的事情 这里我要做的实例有点巧妙 我要把 print 这个词放在这个字符串里,我们来看看会输出什么 第二行里,输出了 hello。 在这里,字符串里的 print 和外面的 print 不一样,不是代码 外面的 print 是打印功能的代码 双括号里的是数据,是区分代码里的内容 在本部分结束时,我们有一些练习 你可以写一些代码,像我做的那样 像我刚才提到的那样,代码是在一个有结构的、很有限的句法系统里运作 错误是很常见的。一个专业程序员整天在写代码 他们输入一些代码时,有可能会有句法错误 有可能缺少右括号 或单词里面有拼写错误,这些句法错误很容易纠正 就是说,你点运行按钮时 经常会有一些小的语法错误要纠正 我要让你明白,这些小错误并不反映出 你理解错误或有缺陷 写代码时,这些表面的小错误总会出现。专业程序员总是会犯这些错误 纠正这些错误没有什么大不了的 我们甚至都不会去理会这些错误。我想,当人们开始接触代码 有些东西会使他们偏离方向 这些小的句法错误会让他们学不下去 而实际上,每个人都犯这样的错误。真的没什么大不了。 为了进一步解释这个问题,我要讲一些实例 我已经这里举了一些实例,里面有一些典型的小句法错误 我要给你们看,点运行按钮时,会出现什么样的错误。好吧? 下面会发生的情况是,点运行按钮时,无法运行 我有一些小错误。我要给你们看从出现错误到纠正小句法问题的这个过程 你就会习惯 是的,你点运行按钮时,出错是很常见的 我们来看看这些代码。好的,我点运行按钮 这里没有运行和产出输出,反而有一些错误 有一个小错误的消息。有时错误消息挺不错 会描述出现什么情况。我们来看看第一条消息 错误, prlnt 未被定义。问题是 print 是功能 但第二行这里 尽管不总是这样,但很多时候,有问题的那一行会高亮出现 问题是有拼写错误。这里写的是 PRLNT 我改成 i,然后运行,就可以了。 这个小程序输出1和b。2、c和3,这只是我编的一个没什么实际意义的程序。 当然,我用L,是因为我要用一个看上去很像I的字母 你要仔细看,我是个苛刻的教授 好的,我们来试一下另一个实例 我点这个实例的运行按钮,说出错,Unterminated string literal (未结束的字符串) 第二行高亮。我要从左往右看第二行 你看到这里,有 B。这里的问题是这是一个字符串 我们要的是字符串 B,但却没有右引号 要有两个引号。我试一下第三个实例。 错误,missing right parenthesis (缺少右括号)。这行也是高亮的 在这个例子里,错误消息很不错 错误消息说的是,看,和引号一样 左括号和右括号要匹配 必须要有右括号,print 功能必须要有右括号。现在可以了 好的,到最后一个了。有错误,missing right parenthesis (缺少右括号),但这里有右括号 错误消息是不对的。有时候,出现句法错误时 计算机就糊涂了,无法在错误消息里给你做出判断 它就会说,第二行这里出错 我建议要从左到右仔细看 在这个例子里,缺少的是逗号 我想这个例子说明了计算机和人类之间的区别 人类可以看出你的意图 看,我想这里是要输出1和b。但计算机有其机械特性 事物就必须是怎么样 这里不能少了逗号,要是不纠正,就会出错 好的,这个可以了。我们的第一个部分 只是关于基本的打印、数字和字符串。我这里要试一个问题实例 我们的练习大多数都像这样 以后的练习会更有趣,我保证。题目是,修改下面的代码 使代码运行时产出以下结果,这是来自one, two, buckle my shoe (英文儿歌) 这里的代码执行某些任务 但不是我们想它要做的任务 我们来看看。有1,我加上2 我要加上逗号,把这个字符串改成 buckle 运行看看有什么结果 我建议,如果你有一些写代码的想法,或者只是想试试看 在这里输入点东西,点错误的键,也不会有做出什么破坏 富有试验精神是好的 这是第一行。我检查第二行。3、逗号、4、逗号、knock 好的,现在可以了 我在文档里做实例时,经常就像这样 我会做一些实例,你可能想试试看,你可能会对第二个很好奇 你想看看那个实例,做一些改变,点点那个错误的按钮 你完全可以自由地这样做 在文档里,经常会有一个小小的显示答案按钮 就是说,你可以去看看,它是空白的,你可以做自己的试验 但假如你想看看我用的是什么代码,你可以在文档里看到 这样,你就可以比较我的答案和你的答案 如果你要复制里面的内容,没问题 我们第一部分就讲这里,我们来看看这些代码练习