-
大家好,我是 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
-
好的,现在可以了
-
我在文档里做实例时,经常就像这样
-
我会做一些实例,你可能想试试看,你可能会对第二个很好奇
-
你想看看那个实例,做一些改变,点点那个错误的按钮
-
你完全可以自由地这样做
-
在文档里,经常会有一个小小的显示答案按钮
-
就是说,你可以去看看,它是空白的,你可以做自己的试验
-
但假如你想看看我用的是什么代码,你可以在文档里看到
-
这样,你就可以比较我的答案和你的答案
-
如果你要复制里面的内容,没问题
-
我们第一部分就讲这里,我们来看看这些代码练习