[音乐] 这是哈佛CS50-- 大学介绍 到智能 计算机科学的企业 和艺术节目。 我的名字是大卫·马兰和 我只是在想今天上午, 它已经令人惊讶的今天20年 自从我上次坐的地方你们现在要做的。 那是1996年。 我是一个大二了,我正在 CS50的第一次。 而我什至没有得到鼓起勇气 把它自己大一的时候, 部分原因是时间。 计算机科学给我 是那种喜欢,MEH。 我是一个有点怪胎成长 ,但我真的不 有任何知识产权 在什么似乎兴趣 仅仅是一大堆 编程的人所有的时间。 而且我很害怕是诚实的。 本课程和计算机科学更多 通常具有和在一定程度上 还有一个领域的这种声誉 当心,如果仅仅是因为我们许多人 不熟悉它并不能确定它。 它真的直到我逛过 这个类大二fall-- 即使这样,我只招收 因为professor-- 我的第一个导师之一,布赖恩 Kernighan的现在Princeton-- 让我走班通失败。 事实上,这就是为什么 今天我们允许和鼓励 学生参加此类SAT /不饱和度。 也只有这样,由 学期结束 我才意识到一样,哇,这 没有这样一个陌生的领域。 实际上,这是一个 非常赋权领域, 而更令人兴奋, 特别是后来, 因为我把课程 话剧艺术101和拉丁 然后最终 研究生院考古学, 我才真正开始看 此领域中,计算机的交点 科学与人文科学, 自然科学,艺术,医药, 和类似物。 所以这就是只是这么 整齐的有关计算机科学 最终,因为我们希望您 see--是它的适用性 这些等领域,以及如何 采取一些今天和本学期的的 理念和实用技巧 回到你自己的域名, 实际上探讨此交汇 的文科和理科。 因此,73%的你,如果最后 今年是任何迹象显示, 以前从未采取了CS课程。 所以,如果像我一样,你是 有点感觉了 害怕,或者坦白地说你不 知道为什么你甚至在这里。 也许你只是跟着一些 在桑德斯的朋友现在。 这是完全正常。 这里的目标是勾 你和向你保证 如果你看 左边和右边, 你会看到有同学 很少或尽可能多的经验 你自己可能有。 事实上,我们将分享 今天有人统计后 至于什么样的人口统计 类典型的模样。 而作为补充reassurance--这个我们 做意味着自从我接手课程 几年ago--在 课程的教学大纲 是this--什么最终 在这个过程中的问题 与其说你在哪里结束 达相对于你的同学, 但如果你在11个星期的结束 学期结束了相对于自己 0周,这是 在这里我们今天在这里。 而这也正是我意识到 所有这些年前。 我知道很多 班说,但它的 在计算机科学中尤其如此。 在一天结束时,此字段 是陌生的,因为它是我的 并可能对你,实在是 只是解决问题。 正因为如此,它确实有这 适用于获取等领域。 而事实上,如果我们试图 蒸馏这意味着什么, 这是解决问题 在本质上,我敢说。 有input--所以无论它 是,你试图解决的问题。 有输出,这是希望 解决这个问题。 然后,当我们将 说,在计算机科学, 有这个黑盒子的 中间的那个你不一定 要关心它是如何工作的。 你自己可能最终 实现那是什么盒子里。 但对于今天的目的且更加 一般在生活中,你所关心 的是,这些问题得到解决。 而这是什么课程 最终的就是探索 的交点 这些输入和输出, 这些所谓的 算法,我们很快就会看到, 实现什么 底下还有,油烟机。 但这些投入和这些outputs-- 这是什么实际上意味着? 那么,在这一天结束时,我们需要 表示信息的一些方法。 这是在一个计算机尤其如此, 其中花哨和复杂,因为它 似乎,是一个非常愚蠢的设备。 这需要electricity--无论从 电缆或电池作为input-- 然后它产生一些 在屏幕上preprogramed响应。 但是,我们如何从中获取 开始到结束吗? 那么,什么是一个亟待解决的问题? 好吧,也许我们可能在 任何学期的开始, 尝试点名 在一个房间里是这样的。 所以,我可能会做这样一,二,三名。 或者,也许,如果我做到了 要排序的追踪 myself--的跟踪things-- 我可能很快用完手指。 所以,我可能只是做散marks-- 1 人,二,三,四,五,六, 七,八。 而我们每个人都有可能 做到了这一点,无论是在你的手中 或在一张纸上。 而这其实只是 所谓一元notation-- 在这里,如果你只有一个字母 在字母表中,一个或哈希 标记在这种情况下,对于每一个 要计数输入, 你需要放下其中之一 letters--这些标志之一。 好吧。 这是所有罚款和好, 不是所有的复杂。 但电脑是不是全部 该更复杂。 事实上,大多数人可能 知道即使你不是真的 认为这是什么意思,那 电脑只懂得零 和ones--的所谓的二元系统。 我们人类,相反,是这样 更为复杂的范围内 据我们了解,通过花枝招展零。 但即使是二进制文件,首先 一眼望去,不是所有的熟悉, 事实证明,这就像系统 和想法,我们已经知道了。 因此,例如,考虑一下。 这仅仅是一个码元的序列。 和所有的你,当 看了一眼它,大概 想123--什么 真的很有趣那里。 但为什么这个数字,123? 这些只是对字形 在screen--只是模式 有人可能会得出或打字。 但是,如果你像我一样,你 大概从小学记忆 有几分 这里列或场所。 还有的人的地点和 十位和百位。 其原因,这是123和 不只是三个符号的格局 是因为,当然,如果我们 有数以百计的地方之一, 你做100次一个数学, 然后两人在十位。 所以这是10次2,然后在三个 在一个人的地方,这是1次3。 而当你添加所有这些起来, 当然,你会得到100加20加3。 所以我们开始时只有一个模式 的symbols--的alphabet-- 但后来我们被映射到意义 它通过这些列的方式。 那么,事实证明, 电脑是真的不 从你我所有的不同。 但是,而不是使用的10次幂, 所以speak-- 1,10,100,1000, 万到位等 forth--他们实际上 只是使用的权力2-- 所以一,二,四,然后 如果我们把更多的数字,8,16, 32,64,128,等等。 所以这是怎样一个计算机 将代表数字0, 就像我们人类。 0,0,0--你可能猜到 什么零和一的格局, 如果一台计算机只能 说话0或1--什么 模式将代表 数我们人类所知道的1? Yeah-- 0,0,1。 好吧。 所以,0,0,1是我们如何代表 1,所以你可能会再倾斜 代表数字2,如果你有 四的地方,这两个的地方 作为一个地方,你可能会说,好吧, 如果我们在自己的地方有一个1, 现在我们要 数到2,你可能 做到这一点,留给这是一个零。 但当然这不是如何 十进制系统的工作原理无论是。 如果你把一个数字 这两个栏目, 你必须做算术。 那么什么号码我做 意外只是代表什么? 所以这是3,因为2次1加1 次1,当然,给了我们三种。 所以,这将是两个。 位排序的翻转,可以这么说,为0 成为一个,很像一个9角色过 当你携带1变成0。 然后,这将是三道的。 Four--另一个有趣的事情 发生,其中的那些翻转 你随身携带的1,可以这么说。 因此,这当然,为4。 但是,如果你快进了, 这是怎么回事的最大数量 是计算机能够代表什么呢? 所以它只是在这种情况下七,对不对? 因为你必须在四一, 一个在这两个,一个在所述一个。 所以这是4加2加1。 所以,让你七。 事实上,它会 乍一看 计算机能够算 不高于此。 但是,这当然是不正确的。 什么是我们人类做的时候,我们希望 算不是像999高? 只需携带一个公正 加的第四位到左侧。 所以,我们确实可以。 我们可以有一个八的 放置和第16的位置, 和32的地方,64 128--你 可以只保留事情到无穷。 因此,这些零和ones-- 的所谓的二元系统 - 什么是计算机科学家会 一般叫了一下,还是二进制数字。 但是现在,我们如何从一开始 概念或这些东西的图形 一个实际的计算机? 我们似乎在这里跳过了一步。 那么,在最后唯一的输入 一天,我的笔记本电脑在这里 是电的这种流动。 即使它是一个漫长的 既然你想过时间 或者从来没有想过 电力是如何工作的, 有一个在流动的电子或 出来,这是我的一种投入。 所以,如果这一切,我们是 让作为输入这里, 我们可以做什么用这些信息? 好了,我们可能会认为一个零的 只是一个没有电。 没有什么是flowinw,没有什么是 动,什么也没有发生。 这只是默认state--为零。 但是,如果有电流淌,为什么 不要我们只是随意,但全球范围内 始终,把那个叫之一。 所以,简单地通过无电, 我们有一个零,是电力, 我们有一个one--没有权力,是权力。 并以这种方式,使用的东西 多个物理或电子 我们开始实施的这个概念 东西要么是1或0。 事实上,我们可以做它在这里。 所以在这里,我不是三个,但 八块光灯泡,其每一个 有它自己的交换机。 所以,如果我想代表 七位数这里, 我可能会打开这三个灯泡。 事实上,里面的 我的电脑是数以百万计, 数十亿的东西,只是 小于,称为晶体管, 开关,你只需打开和关闭。 所以这些都是big--比较 我laptop--内big--开关 有很多,很多,很多, 更多的交换机。 但他们做的是完全that-- 打开一些东西,把东西掉。 正因为如此,一个计算机可以代表 与百万或数十亿 晶体管,地段和 大量的零和一。 而且还有其他的硬件仍然是 让您存储信息长期, 所以,当你拉 插,你不会失去它。 但是,这是另一天的故事。 那么,我们可以用这些位? 也许我们只是拿 压过的我 - 可能有人要来 在这里,并提供了一​​个演示? 我第一次看到这个手。 你叫什么名字? MADAY:Maday。 DAVID MALAN:Maday,上来吧。 很高兴见到你。 MADAY:很高兴见到你。 DAVID MALAN:这边走。 我不会有嘴唇你。 好吧。 所以在这里,我们有,notice--之一,two-- 我们将编辑out--一,二,四, 八,16,32,64,128。 这是经过深思熟虑的。 有八位这里 - 二进制digits--零和一。 和一点是measure--一个有用的单位 不是有用的测量单位 到自身。 通常你至少需要 这些东西八,又名 一个字节。 所以我们这里有位字节。 因此,如果我们想与你来挑战, 例如,拼写出,在二进制 这个值这里 - 42。 要采取的一个刺? MADAY:[听不清]。 DAVID MALAN:是的,只需轻轻一按 白色的小开关在前面。 而你要拼 出42,和待价而沽 这是CS50压力 球,如果你得到这个。 好吧。 所以,你有32个。 我们将需要42。 所以这是一个八,所以这是40。 而excellent--非常好做。 谢谢。 [掌声] 好吧。 因此,我们又多了一个压力球。 我们如果我们可以的做一次。 另外一个志愿者? 无压力球,无压力球。 好。 在这里在中间, 你想下来? 好吧。 我知道。 在那里,我们走了。 因此,数字这里 - 下来吧。 你叫什么名字? DAVEY:戴维。 DAVID MALAN:戴维。 好。 上来吧,戴维。 很高兴见到你。 而我们要去有你 spell--如果你能留在那里 只是一个moment--是数字50。 但是,但是,但是却,但是,这些都是 小学磁铁的一个原因。 只是有点困难,没事吧? 目前仍然八强。 好吧。 那么,我们有吗? 我们有32个。 尼斯。 32加16给我们48--如此接近。 与精彩。 恭喜戴维为好。 [掌声] 好吧。 因此,我们可以长期做这一切的一天, 它没有得到所有的东西更多 有趣和更具挑战性。 但是,这真的是point-- 是怎么比较简单 它是,在一天结束时,什么 计算机确实存储信息, 存储投入和最终 存储或代表那些输出。 但仅靠数字不 那么有趣。 所以人类,若干年前, 决定了,你知道吗? 这将是很好的,如果 电脑不只是 计算器算术 操作,但实际上可能 做的事情,如文字处理,或 电子邮件,或更现代的化身 这些种类的技术。 这样一来,世界决定 随意,但普遍, 如果你想存储的资本 在计算机字母A,你知道吗? 就让我们都同意存储 零和ones--的一些模式 bits--最终 代表十进制数65。 我们只都同意这一点。 66将代表B, 67将代表C, 这里面的的其他模式串 零和一,或底层号码 这将是 其他字母依然。 所以,如果你有种精神 这个吸收了一会儿, 我特意提出了一个通过 我,其中H 72,我是73。 如果计算机然后,在的情况下 字处理程序或电子邮件, 引擎盖下显露有 bits--模式这些模式 代表位 72,然后73,然后33-- 什么可能这个咒语在该程序? 所以喜,然后什么。 我们不一定知道,但确确实实 33--没有在图表上先前已经 只是一个感叹号。 所以72是H,73是我,发生了33 是一个感叹号依然。 但是,这一切优秀和良好, 而事实上现今,而不是 只需用七八 位,这要感谢的东西 所谓的Unicode相 为ASCII早在一天, 我们实际上可以代表更 有趣的角色不仅仅是 这些原始英文字母偏颇。 但是,我们也可以代表甚至 整洁的东西喜欢的颜色。 如果你曾经听过的缩写 RGB,红,绿,蓝,这 只是意味着一台电脑 通常使用三套bits-- 某些数目的位表示 一个号码,你要多少红, 另一组的比特为 多少绿色的你想要的, 而另一组数字 多少蓝你想要的。 因此,一个大的数字意味着大量的 红,数量少意味着没有红。 所以这些都是种 这里的中间值。 所以给我一些红色的,给我一些 绿色,给我的蓝一点点。 如果你混合这三个​​色调 颜色一起的,在这种情况下, 你得到这个黑暗的树荫 黄色或棕色。 但是八个这种模式加 八加eight--所以24 bits-- 从左到右,是如何在计算机 将代表特定的颜色。 现在,这只是一个屏幕上的一个点。 如果你看起来真的收于电视的 计算机,你会看到点或像素。 如果你有一整个网格 像素,水平和垂直方向, 你有图像。 然后,如果你拿 一个图像,然后洗 展示自己的另一个形象,另一 图像,另一个图像,另一个图像, 真快,你当然得电影。 因此注意到我们开始的地方。 我们开始与这些零和一。 我们从那里工作为十进制 数字,我们如何代表他们。 现在我们有英文字母。 但在其他情况下等待,我们可以使用 几个比特和表示颜色。 只要你有 表示颜色的能力, 你有代表的能力 图片和GIF动画 及其他这样的字符在屏幕上。 而当你有一大堆的 图像飞被人一次, 它看起来像电影, 所以你得到的视频也是如此。 因此,使用这些非常 简单的基本难道我们 有代表的方式 最终,这些媒体形式的所有。 而我们又抽象 一次又一次,直到我们 从最低水平得到 这个最高水平。 所以这给了我们这个 抽象的总体思路。 但是,我们从这里开始。 在这里,现在,我们不妨 表示在一个计算机 我们与零和的投入, 我们在零和一输出, 但所发生的盒子里面? 这就是计算机 科学变得有趣。 这就是你真正把你 自己的心来承担解决问题。 现在,我们可以规定,对于 本学期剩下的,是的。 我知道如何二进制的作品。 我记得ASCII或Unicode-- 映射到letters--作品。 它肯定代表 有理由相信,我们 可能代表红色和绿色和 蓝,和代表多媒体为好。 但是,这是有趣的东西。 这是什么使一个人 能够解决的问题。 和一个这样的问题 我们喜欢做的事,事实上, 正在出席,或 算法这样做。 再次,我可能做到这一点。 我可以做一,二,三,四 五,六,七,八九岁。 我可以把它写 下降到跟踪它。 但是,这只是我如何会 表示的信息。 或者我能做到这一点faster--二,四, 六,八,十,12,14,16,18,20, 22--感觉两倍 以最快的速度,但它仍然是 要采取一个整体大量的时间。 但事实证明,如果我们还充分利用 另一个resource--确实电脑 这些日子有多个CPU或大脑。 原来电脑可以 同时做很多事情, 而事实上,我们在这个房间里, 可能代表正是这一点。 所以这是一个小社会 尴尬,但如果你愿意我的幽默 只是一个三步骤的过程,让 我的地方请大家那里只是 站起来一会儿。 站起来。 所以想给自己,数 one--所以大家在这个房间里, 但谁没有人 成人之美,都在思考一个数字。 所以这是你的号码现在。 这是第一步骤,或作为 计算机科学家或程序员 通常会做的,我们要去 要从零开始计数。 如果最小的数,我们可以 这些灯泡代表 为零,只需让他们 所有的时候,我还不如干脆 从开始计数 零是而不是一个。 所以这就是 计算机科学家做的。 所以零一步,站起来 想到头号。 下一步骤是this--对 了与有人站在 并添加您的数字加在一起。 精彩。 因此,在这个时刻, 从字面上大家参与 正在考虑2号,除了 一个奇怪的人,如果我们有 奇数的人在房间里。 现在这里的第三步骤是要 是你this--应该坐下。 其中一个,你应该坐下来, 如果你仍然屹立不倒, 回到步骤之一。 好吧。 好吧。 因此,越来越多的人 应该坐下。 注意,这已引起 一个loop--某种循环。 你们有些人应该是笨拙卡住, 来回第一步之间 和二,一和二,一和二。 没关系。 我们的第一个错误。 我们会处理这一点。 好吧。 让我尝试以刺激顺水推舟。 理论上,只有一个人站在 大家都继续交配。 但让我加快速度 随着人们仍然屹立不倒。 你在想什么号码? 46。 好。 来吧,坐下。 你们仍然站立。 谁在还站着? 你在想什么号码? 好。 因此,我们会回来给你。 在后面? 那是什么? 22。 确定别人了top--是吗? 34。 好。 在这里我right--在这里? 132,非常漂亮。 22? 好。 又是谁的还站着? 在这里? 46,很不错。 72。 我再也不能拖延。 是吗? 30,美观大方。 在这里? 23? 23。 我认为这是每个人 除了你们,没有压力。 等一下。 28? 只是八强。 好。 只是八强。 到这里? 30。 23。 24。 18。 这是最坏的实施 这个算法永远。 好。 所以其他人? 还有谁? 好。 多一个。 16? 好。 16。 好吧。 所以,如果我没有错过任何人 这里的眩光,当我敲回车, 我们将看到,算法的 总人数的桑德斯中。 因为再次,它好像每个人都 当你坐下来,通过你的号码了 给别人,给别人, 给别人,因此,在理论上, 最终,只有一个尴尬 人要罚站。 但是,这很好。 我们手动加快东西。 这是特别难得一见 在这个特殊的空间。 和人的总数 我们认为这里有546是。 总数有人递给我 通过教学研究员, 谁做旧 学校缓慢的方式,是820。 [笑] [掌声] 没关系。 所以那么肯定,有这些错误。 这很好。 等回想起这 在第一时间的东西 你写的不一定工作。 这发生在我这里。 但是,让我们现在考虑我们如何 应用此相同的想法的东西 你可能已经见过的,这 这是老派技术这里 - 一个真正的大电话簿。 并假设该电话簿 有1000页和1000名 和数字字母顺序在它的内部。 嗯,我们可以种应用相似 主意,这个非常实际的问题, 只是在利用我。 我只是有种被骗 通过利用大家 有很多很多不同的CPU 或大脑执行某种算法。 但是,如果它只是小 以前的我,我还是可以 利用一个想法相同的本质 分治的问题 一遍又一遍,这样你一半, 一半的你,你一半,你一半, 理论上保持坐下, 直到我们被留下,理论上 只有一个人。 因此,在这个老同学 技术 - 我们不 需要这个map--这 老派的技术, 我们可能会开始找人 喜欢迈克·史密斯,一次一个页面。 而我看​​到没有,迈克不在这里。 我仍然在A部分。 最后,我发现 自己在B部分。 这是一种算法 - 一步一步的指示。 从头开始,一个页面 在一个时间,找迈克·史密斯。 这是correct--这 算法或方法? 是的,这是正确的。 如果麦克在这里,最终 我会得到他。 但它的效率不高。 这显然​​很慢。 因此,我可以利用 同样twosies接近。 我能做到几分二, 四,六,八,十,十二。 它的快两倍。 我会去麦克 如果他有速度更快。 这是对的吗? 是的,但我听到了little--没有。 现在,我听到了没有。 是啊。 还有一个潜在的错误。 也许只是迈克不慎 夹在两页之间, 因为我飞过 这两个位于一个时间。 所以,至少我们需要一些 这种条件修复。 我需要说,哎, 如果我打的人 名字为T,而不是一个S开始, 我更好的双回至少一个页面。 因此,车在第一,但可以解决的。 但是没有人会去寻找 迈克·史密斯通过1000页的电话 同时预订一页。 什么是正常的人怎么办呢? 你会去到S的, 如果你知道S其中的。 你可以粗略地去中间 或接近尾声略倾斜。 而我在这里往下看, 我在M部分。 但是你怎么知道 这个问题现在, 我们并不一定知道前 与我们所有的人只是计算自己 等效? 那么,迈克显然将 要在这一半的书 如果他在这里,因为在所有它的排序。 所以你可以很dramatically-- [喘气] 我知道。 [掌声] 它实际上是很容易的,如果 你做下来脊椎那里。 但是你可以再扔 问题的一半的路程。 现在,我留下了相同的problem-- 找到迈克·史密斯在接受电话book-- 但现在的电话簿在m启动 并进入Z,但它的一半大。 但是,这是何等的令人印象深刻。 就像在理论上,你们这些家伙,当 大家坐下来只有一半的时间, 这个问题得到了一半大, 一半大,一遍又一遍。 所以有这个问题成为了 同样的问题,但一半大。 现在,这是一个250页的问题。 当我意识到,哦,我 在T节意外。 太远了,我走了。 我可以抛出一半 的电话本了。 现在,我到一个 问题的四分之一。 而且可以重复,重复, 重复,直到,在理论上,你 只剩下一个页面。 如果迈克是在该网页上, 我现在可以解决这个问题。 但如何迅速没我解决呢? 在第一种情况下,花了我喜欢 也许1000步找到迈克·史密斯。 它可能采取我 - 我拿起电话本 于是我开始寻找 一个页面的时间, 和迈克可能是1000页之后。 第二条本办法也许 花了我500步, 因为我飞 通过两个一次。 而第三种方法虽然, 这是特别强大。 但是,让我们考虑一下我们实际 做这种第三种方法。 我要什么,我会打电话给这些刚 陈述在这里,一次一个。 拿起电话簿。 打开到电话簿的中间。 看名字。 然后,事情变得有点 更有趣的智力, 如果仍然简单。 如果史密斯是其中 即当前页面上的名字, 然后做一些有条件。 这就像在一个岔路口。 呼叫迈克。 如果迈克是名中 在该网页上,叫麦克。 但只能做四线如果线 树,如果你愿意,是真实的。 在回答这个问题是肯定的。 否则,如果史密斯早在book-- 换句话说,如果我在M节 我期待有人来 左边,那么我应该怎么办 是非常类似的东西。 然后,我应该开到中间 的书的左半部。 于是往左走,然后 回到第二步。 看名字在那里。 因此,换句话说,做同样的事情, 但是,一个问题一个已经减半。 你知道还有什么? 如果史密斯后来在书 基于我期待在页面上, 开放的中间 书的右半 然后再回去 步骤二,else-- 这里有一个第四种可能性。 迈克的这里或向左 或向右或不存在。 在这里,我们更好地考虑这一点。 而事实上,如果你曾经 您的计算机崩溃只是你, 即有时但不总是,在 只是人类程序员的结果不 实现哦拍,有 其实这第四个场景。 如果你不写代码 处理这种情况, 有时候你不知道 哪些电脑可以做。 事实上一个程序可能会崩溃。 但是,在这种情况下,我想 这件事,和我说,别的不干了, 因为这是第四 逻辑可能的情况。 现在,让我们只需添加 一些词汇,所以我们 可以开始折腾围绕该条款 在其他方面非常直观。 所有的事情我已经只是 以黄色突出显示在这里, 我只是要去 函数或过程。 他们只是一种行动。 所以回暖,开放的,看 在,打电话,开,开, quit--这些都只是行动,否则我们将 叫他们更正式,功能。 同时,现在在黄, 我强调的东西 that--就让我们开始打电话 这些条件或分支机构。 这些点决定在哪里 你可能会走这条路,这样一来, 或一些其它方向仍。 因此,那些会的条件。 而现在这个有点票友。 让我们把这些问题 布尔表达式, 有人用姓布尔之后。 和布尔表达式 只是事 这是真或假,是或否。 因此,它的回答你的问题 关心,以便在条件 使decision--得到一个答案, 然后去左或右,或东西 否则干脆。 然后最后,这些 线这里 - 回去 步骤二,回去 步骤two--我们可以 实现这个想法的方式不同。 然后,那些有 编程经验,可能会做 或者可以想像不同的这样做。 但是今天的目的,这是 只是重要的想法。 这是什么诱发 我们一般会打电话 一个loop--某种周期的,因为 它使我再做些什么。 所以,现在,我们只考虑 怎么好这种算法。 这是正确的。 如果麦克在书中,这是一个 这四个连连scenarios-- 又一次,我们会找到他的。 但是,它有多好? 好了,我们没有 太正式在这里。 但是,我们刚刚绘制 东西,x和y,以获得 这个问题的形状感。 在x轴这里是 我的问题的规模。 他们y轴位置 将要解决的时间。 因此,也许这就是页数。 也许这是秒 turns--任何网页。 然而,你要算的 这是什么画面将代表。 而这第一个算法,我要去 描述只是一个直线。 如果有n个网页 电话簿,然后将其 可能要花费许多 作为n步找迈克。 如果Verizon公司或电话公司 增加了一个更多的页面,明年 它可能需要我多step-- 时间一个单位找迈克。 所以这是仅此一比一的比例。 这是一个直线的斜率。 与此同时,第二 算法 - 如果我 在时间 - 2去二, 四,六,八,或double-- 通过网页去两次 在一个时间,每次两个, 它仍然是直线。 现在有一到两 比,但只是有点低。 所以,如果有这么多的网页 在此图中黄色, 这可能需要我这个 许多步骤或秒, 否则它会带我 两倍的红线。 但是,绿线是真正的外卖。 这是我们一般什么 调用logorithm--日志 的n,其中n是页数。 但它是重要的形状 今天,因为我们没有 别想绘制点。 想想一个极端的情况。 假设Verizon公司明天的双打 在该电话本的页数, 从1000至2000。 在第一算法,我 可能会浪费额外的1000 步骤寻找迈克,只是因为 Verizon的一倍书的大小。 算法 - 这第二个可能 带我一个额外的500步。 1000多页,我走两头在 时间 - 500多个步骤,找到迈克。 但是,第三算法 是种神奇。 Verizon的双打数量 从1000至2000页, 但究竟有多少更多的步骤做 它带我去找迈克? 这只是一个,因为我可以 撕电话簿一次 从2000页问题一 1000页的问题,瞧。 我已经采取了大规模的咬出来。 如果你去非常极端的, 假设该电话簿 公司有什么样的疯狂 4十亿页电话簿。 那么它多少步可能需要 找到迈克·史密斯在4十亿 页电话簿? 这是一个大数目,但只有4十亿到 2十亿至1十亿至500亿美元, 250 million--仍 听起来像大的数字, 但我很快 得到一个较小值。 而事实上,如果我做数学题 好吧,我只能分4个十亿 前了大约32倍 我踏踏实实地只有一个。 因此,如果这电话簿分别为4 十亿页长,没什么大不了的。 在几秒钟内,也许32 秒,我可以一分为它 并最终找到麦克或 断定他不在那里。 这就是一个企业的本质 算法 - 一个好的算法。 这就是之一 像这样一类的目标, 正在试图找出我怎么 只是正确地解决问题没有, 就像我一直都知道怎么做这件事 在时间 - 页面,但正确和幸福。 如何设计好 解决问题的办法? 因此,让我们花点时间在这里 现在给你一个感觉 CS50的过程itself--介绍 几场的工作人员。 就在凌晨2点之前,我们将 短暂休息 使那些您 谁是购物能 逃避并采取 看一些其他类 看着这个网络的其余部分。 但现在,让我来介绍 CS50,类本身, 特别是什么新鲜事。 因此,在过去的春天,我们 花了相当多的时间 - 课程的工作人员和我 - 思考 它是什么,我们希望CS50是, 和重返第一 的原则,可以这么说, 要考虑什么是我们想要的 本课程的样子,并 像它的学生。 所以你会看到问题 设置零为好,邀请 看看那个 URL其中概述 一些背后的动机 以下2016年秋季的特点。 所以,你可能已经收集 从TL:DR讲义, 今天的课程,以及从 课程目录,今年CS50, 你只是将出席 today--这样的工作做好done-- 并在11月21日最后一次演讲。 而你是受欢迎的,但预计不会 参加这些讲座在中间, 因为我们在做什么 今年,正在拍摄 在实时过程中的材料。 所以一切都将保持 当前和合并 作为最好的,我们can--时事 和交谈的人可能 在工业上具有在 世界,但使该材料 可用的,作为结果,即使先前已经 完整的全文成绩单 和检索性 其他资源的链接。 事实上,我们已经 声称了一段时间 而我们现在相信这一点, 我们可以创建,数字化, 更逼真,更引人注目 教育经验,而不是 到这里聚会大约23倍 在人,听见有人喜欢我 简单谈谈计算机科学, 相对于卡合更积极。 所以,你在使用过程中的教学大纲看 本学期的草图在这里, 随着当宣讲会 被拍摄下来,到你 欢迎,但预计不会, 当他们将 在球场上的网站上公布。 而我们会在这里做 周三下周开始, 很多更紧密,只有 谁不想参加那些人, 是所谓的穿行, 在那里我和课程的头 实际上让事情 一点更贴心 到这里的乐队 节中,仍然有一些技术 并通过走 本周的习题集, 并为您提供particularly--如果中间 那些少comfortable--更加 您可能要指导或 需要一周的挑战。 同样,对于那些谁不能 参加那些人,没什么大不了的。 会有由类似地导致 课程的高级职员之一, Zamalya,同样的机会嵌入式 在习题自己。 问题今年台 将在周五公布 不再做七天后, 但10天later--故意 重叠的每个问题 设置,这样才能更好地适应, 我们希望,潮起潮落 在学生的时间表, 尤其是在期中考试或竞技 或学者或课外活动 往往来去 尤其是期中。 这应该给你多一点 自由裁量权是否你面前 与CS50或背部负荷加载周 它在接下来的周末吧。 所以,看该课程的教学大纲 此处其时间表。 你会发现其中也 今年的变化, 对于那些更熟悉 编程在过去, 我们将启动该学期 我们今天会在划痕, 尤其是注重语言 所谓C,然后过渡不 到PHP,而是一个叫做语言 对学期结束的Python 在web编程的情况下, 随着SQL和JavaScript, HTML,CSS,并且还更。 而在回答常见问题, 它的确是这样的 即CS并不像我那么可怕一次 以为是,但它是许多工作 因为我听说它可能是。 但是,这是说,这里有一些 从2015年秋季学生身上的统计, 从而水平蓝线 代表的时间的平均数量 报道。 你会看到的平均 六至10〜12--也许16 左右等,但与 高方差予以明确。 因此意识到,不仅有 学生更舒适,减少 舒服在使用过程中, 但相应的支持 结构得到那些学生 通过成功的学期。 事实上,在回答常见问题,应 你把CS50作为第一年? 绝对。 而事实上,我很遗憾 没有发现我的方式 或者发现了一个新的领域 第一年为好。 你应该采取与CS50 其他课程,一定会与well-- 和一般建议我们不妨 给学生,这CS50可能是 不是那种类或介绍类 你应该采取三个 其他或其他四名P-设置课程。 但是,如果你正在做另外两个P-集 班,别的东西,和CS50, 绝对的管理。 我有很多学生在 过去这样做相当成功。 并让你往那 终点线成功, 它的过程中有sections-- 不同轨道的学生 不太舒服,更舒适, 和介于两者之间, 因此在使用过程中的 第一个问题集, 你会被要求来形容自己。 如果你是在那些较少 舒适,它的那种东西 您刚才宁知。 事实上,这一直是该 在CS50人口不断增长 了好几年。 由于去年秋天对 例如,所述类的58% 言必称 在那些不那么舒服, 用在那些9% 舒服,然后 其他学生那里 红描述自己 如介于两者之间。 你会总体看到这里的主题 和调度部的,所有这些都 均以人, 实时,与课程的 教学研究员惊人的工作人员 当然助理,其中一些人 你会在短短的时刻见面。 自己的部分,因为你会看到,会 是周一和周二和周三, 这样才能让你潜水 在搞,如果你打完 选择,在使用过程中的 那个星期早些时候的演讲。 然后办公时间,这 当然,每过一年, 已经没有任何的少 挑战的课程。 而今年,我们计划不 仅任职hours-- 1 在为帮助,人的机遇 学生在周三周四 周日,最后那些 在下午的设计是 降低一些应力那 与深夜总是出现 加上一个期限对settting looming-- 但办公时间也将提供 周一和周二和 星期三和星期五和星期六, 感谢我们的朋友HSA。 CS50现在有自己的空间 学生和工作人员CS50, 67之上奥本山街, 正确的,在哈佛广场。 该愿景这是CS50的 课题组中科院整个星期, 在大多数几乎 天,将在那里寻求支持。 所以,如果你有一些 上的p组质询 或者你感觉有点 堵塞或有点困惑, 和Heck,你有一个小时 类之间的一个半小时, 尤其是在square--你能 流行的和有问题的回答 有这混乱clarified-- 非常的精神, 你熟悉的数学 部门自身的数学问题中心, 但围绕每个时钟几乎 [?克卡?]我们将在网上发布。 家教也可用于那些 学生,自由地从课程的 自己的员工,如果你想 更贴心的一对一, 或者只有两三个同学,工作 随着病程的工作人员之一。 而事实上,这些在这里都只是 有些课程的工作人员, 其中一些你会 在短短的时刻见面。 事实上,CS50自身 头助教, 和头部课程 助理,导师, 可以上来吧,让 他们打招呼。 [掌声] 解说1:[听不清]。 [掌声] 解说2:[听不清]。 [掌声] 解说3:[听不清]。 [掌声] DAVID MALAN:,让我们 带来CS50的董事会两个最 高级职员,罗布和Zamayla为好。 [掌声] 事实上,无论是罗布和 Zamayla一直伴随着我们 这么久了,我能够 进入CS50的档案 找到这个非常SD 他们的参与进尺 在舞台上自己几年前。 罗伯:[听不清]。 [掌声] ZAMAYLA:[听不清] [掌声] DAVID MALAN:谢谢。 所以除了这些 这里的团队成员, CS50拥有一支近100 工作人员,所有的人 将可用于部分 和办公时间和这么多。 并作为罗布说太,这是 最显著检修 在10年CS50的那 我一直在[听不清]。 [听不清]特别是重点 在提供一个支撑结构, 修剪带走了大量的 这一直是大头 积累在10年内 迭代开发 在球场上的习题集。 所以今年,不仅在课堂上,但 还在使用过程中的问题的形式 集,你应该找事情 更精简,修边机,多 比更便于管理 在过去的几年,因为我们 摆脱一些这就是行李 通过不断发展的一年开发的性质 一年后的迭代。 所以今天的新的和改进的开始。 你会遇到更多的 当然公司在[听不清]的工作人员出来 下午2:30,在那里我们服务, 作为一个传统的蛋糕。 有一个多一点的蛋糕 不仅如此,但你 满足艾琳和Tobias等人还在。 让我给你 我们听到前游 从一些其他工作人员 在类的东西等待为好,。 事实上,我们总是开始CS50的 学期本周六, 什么叫做CS50益智日。 它无关 计算机科学本身, 但随着有关问题 解决更普遍。 如果你这样选择参加, 每部分的邀请, 你可能已经看到门 掉落或在这里的舞台上, 这是在团队中的机会 的两个或三个或四个, 参与的难题和比萨饼 和奖品,并缓慢 - 本周六, 敬请期待更多。 你会发现太多,每 周五,在火与冰, 不CS50带来 一大堆学生 午餐,做一个大的 一流的手感更贴心, 一般汇集 校友和来自业界朋友 谈论他们已经什么 自从毕业以来最高。 同样的,今年,我们将 开创了有史以来第一个50 CS50 编码contest--一期中 机会,让大家 在基础的选择,有一个 针对同学们斗智斗勇的挑战, 再次在两个或三个或团队 四个仅使用编程 精明的你就必须下 只是六七后,你的腰带 类周,参与 在这种竞争 online--如果你想磨练自己 技能都在挑战更多。 在学期结束是 所谓CS50 Hackathon-- 开始于7:00一个机会 下午结束于7:00 AM,沿途 是在潜水12日晚小时 到课程的最后project-- 一个机会来设计和 实行最感兴趣的东西 你与你的教学 老乡的指引。 大约9:00 AM做,我们通常 服务比萨饼,1:00 AM, Philippe的,和我们几个 谁是还醒着上午5:00, 梭乘坐大巴下来 路IHOP早餐。 然后几天后 是所谓的CS50 fare-- 学期展览在结束 多远这么多的庆祝活动 CS50的学生都来自 周零一路周 并牢记那些73% 同学们和你今年有 以前从未采取了CS类。 实际上,再次强调为多,这里 从CS50的工作人员多了一些面孔。 扬声器4:[听不清]。 SPEAKER 5:[听不清]。 扬声器6:[听不清]。 扬声器7:[听不清]。 SPEAKER 8:[听不清] 扬声器9:[听不清]。 扬声器4:[听不清]。 扬声器10:[听不清]。 扬声器11:[听不清]。 SPEAKER 12:[听不清]。 SPEAKER 13:[听不清] 扬声器14:[听不清]。 SPEAKER 13:[听不清]。 SPEAKER 15:[听不清] SPEAKER 16:[听不清]。 扬声器11:[听不清] SPEAKER 5:[听不清]。 DAVID MALAN:有些团队 是自己购物类。 但是,如果这些成员 CS50的工作人员都在这里, 能来最多只是一瞬间。 CS50的转录因子和CA和[?工作人员?] 会员这里 - 这些只是少数 其中的faces--一个你刚才 看见了,和几个other--和其他几个人 仍然。 我们为什么不继续前进,让 你们五分钟的休息时间。 如果你需要逃避到 店类,这很好。 五分钟后,我们将重新开始, 采取一看Scratch--第一 我们的编程语言,满足 在此过程中的工作人员多一些, 并注重最终 在问题设置为零。 因此,我们会回来的五分钟。 [掌声] 好吧。 所以我们又回来了。 而在我们剩下的 今天的时间,我们的目标 是公平的竞争环境 在一些术语方面, 在一些观念方面。 因为事实上,按照 一些早期的图表, 那里将是一个范围 在类的经验水平, 其中一些人的学生 前采取了一些节目, 其中一些人还没有。 所以这个第一个问题 置,并与该第一语言 我们有机会启动 拿今天之后批出 一些常用的词汇和概念。 我们会通过的方式做到这一点 课程的第一languages​​-- 除了C和Python和 JavaScript和SQL和HTML和CSS, 我们将首先着眼 和公正的问题设置为零 这个图形语言,称为 从无到有,由麻省理工学院媒体实验室开发 下山的路,帮助 学生和孩子尤其是 表达自己algorithmically-- 的方式与什么更一致 我们不妨称之为计算思维。 这是一个非常有用的语言,因为 很快下周在一个星期内, 我们过渡到一个更 所谓的传统和神秘语言 C,这是纯粹的文本。 你只用键盘 为了写指令 像这些在屏幕上。 但是,即使你从来没见过 编程语言之前, 在刚刚一眼 这一点,所有的无论是神秘的, 你可能猜到 大概打印Hello World。 但是有一个很大的 句法开销那里。 有怪异的哈希 符号或散列标签往上顶。 有尖括号,一些 括号,大括号,半colon-- 这里只有这么多的视觉 语法的方式获得。 我们先从课程 划伤,从而获得 过去所有这些智力 无趣的杂念, 而专注于创意。 事实上,这可能是之前。 此,为此,周须后。 此,在该图形 语言划痕, 是你将如何实现相同的 program--运行时,一个程序, 简单地说,你好世界。 而关于划痕是很不错 它的这种图形化编程 使用拼图或环境 块,只有一起互锁 如果它使逻辑意义这样做。 并与划痕就可以开发 动画和互动游戏 和艺术,以及任何数目的东西 你可能想象你自己的心灵, 而仅仅通过实现它们 拖放拼图。 事实上,我们将有能力 表达一些同样的想法 我只是提了一下 以前,在迈克·史密斯的背景下 和搜索电话book--事 类似的功能,只是动作, 这样的事情做循环 事连连, 变量,这是 这是我们来介绍, 但它也许是熟悉的 algebra--只是一些一种占位符 存放一些价值你可能 需要later--布尔表达式, 如果这些是否或真 从之前假的问题。 条件是在那些叉 road--这些分支可以这么说。 然后还有一些发烧友 特点我们可以看到即使在今天, 所谓的阵列和线程, 事件,我们会再重访 时间在不同的语言。 但划痕让我们 探索所有这些。 所以在这里划痕中,这个紫 块是一个功能是什么通常 将会是什么样的。 有一些这紫一块拼图 字像说,这是动作, 然后它可能具有一个 参数或parameter--某种方式 一种定制的 那是什么呢块 所以,它不是通过预先确定 MIT这是什么紫块说。 事实上,你会看到一个 那一刻,我是能够输入 的话就像世界您好,或 您好大卫,或HELLO Zamayla, 或我想做的事情,在参数 该拼图piece--白盒测试 那里。 同时,如果我想要一个循环,我们将 看到有拼图的 看起来有点橙这样。 而它们的形状样的建议 事情频频发生 在一个周期。 所以,如果我换一个打招呼的世界块 用刮中永远阻止, 它只是要保持打招呼 世界永远的,毫不夸张。 同时,还有另一种 在划痕循环型 我们将see--重演 block--在哪里,如果你 提前知道有多少次 你希望循环执行 次在fact--你有限数量的 可以通过在数字输入指定 或者甚至堵塞在一个变量, 像X或Y作为我们拭目以待。 事实上,变量,如 我在此情况下,这 一个共同的名字为 整型变量 只是存储number-- 整数可能是, 在这里使用的橙色块 设置一个变量像我到零。 下面是一个绿色的例子 在划痕布尔表达式。 虽然这看起来像一个数学 公式,数学不等式这样 真的是布尔表达式。 这是真或假。 我是小于50。 它要么是或否的答案 或真或假的答案。 而我们通常会打电话 这些布尔表达式。 它不必须是50。 它可以为x小于y, 大于y,等于y-- 任何数量的其他 问题可能会问。 现在,乍一看,这可能看起来 突然很大胆在这里,它是。 但聪明的概念,它是 与以前相当熟悉。 比说如果x小于y,为多。 否则,如果x大于 比Y,然后说那么多。 别人说x等于为y。 因此,我们有一个例子 第三scenario--的有 只有第三possibility-- x是 大于,小于或等于。 因此,我们必须在客场三路叉。 并注意什么很酷这里 - 划痕, 这似乎只有一个谜题 件,在这种情况下,如果else块。 然而,这似乎意味着你可以 只有在路双向叉子。 你可以去左或右,但 什么关于第三种方案? 如果x等于ÿ什么? 没什么大不了。 取一拼图,把 它的另一个内 创建语义等值 如果,否则,如果,else--现在你 在路上你的三路叉。 正如我们看到的, 刮拼图 可拉伸和成长,因此 作为对他们挤更多的东西。 你不必适合 一切都在它的默认大小。 这是我们要 很快看到被称为数组。 这就像一个列表中 - 一些方式 存储的多条信息 在一个变量中,不只是一个数字。 这些我们可以看到代表 所谓多线程。 事实上,所有的 Mac和PC,这些天 支持多线程, 这意味着你可以从字面上 在同一时间做多件事情。 您可以安装Microsoft Word起来的 前景,在一些作文的工作。 你可能有一个浏览器 在后台开口 G-mail或Facebook或类似物。 您的计算机可以做多件事情 今天,因为它是多线程的, 和方案,他们在 特别是还多线程。 有东西叫做事件 以及在划痕的世界里, 再有一种方法也使 我们自己定制拼图,如果事情 事先不实际存在。 因此,让我们这个激励如下。 几年前,当我 首先发现划痕, 当我实际上是一个 在麻省理工学院的研究生,我们 我们大伙儿做的功课。 我implemented-- 其中,回想起来, 是一个非常错误的决定,因为它是 在世界上最令人气愤的歌 听八小时 而在您的工作homework-- 但有些事我呼吁奥斯卡时间, 这也许是一个熟悉的歌曲。 CS50s拥有乔丹林,一 我们更多的高级职员, 已经升级了其2015年和 现在2016年,因为早在一天, 我拥有了一切只是去 进入奥斯卡的垃圾桶。 现在,我们支持回收和堆肥。 但画的图画 什么,我们可以在这里做 并激励一些 较低级别的例子, 我们可以得到一个其他 志愿者刚刚上了 玩我的第一次 家庭作业永远不会消失? 上来吧。 你叫什么名字? 亨利:亨利。 DAVID MALAN:亨利​​,上来吧。 上来吧。 头部无论哪种方式,和 你会看到一个时刻, 我要继续前进并击中了 在右上角的绿色标志 角落,这意味着去。 小停止标志图标 会说停, 这就是当你开始 并停止该程序。 很高兴见到你。 好吧。 所以,我们要看到的说明 在短短的瞬间在屏幕上。 而仅仅通过玩这个游戏 几秒 - 相信我, 我们不打算要想玩 一路的end--你会 得到的程序在做什么的感觉。 而不仅仅是专注于亨利 处于这场比赛中,焦点是好是坏 并且又如何能够实现我 最初再由乔丹。 换句话说,在这里是变量? 在哪里循环? 在哪里的功能呢? 我们会看到,如果我们不看 这些引擎盖下方。 只需点击并拖动垃圾桶 以合适的纸槽。 [音乐] 好吧。 这是非常好的。 为什么我们不存在停止。 谢谢。 恭喜亨利。 谢谢。 [掌声] 试想一下,调试该程序。 如果有一个问题的两种 分进入song--但如此 这是怎么回事这里真的吗? 由于复杂的,因为它可能 开始似乎随着时间的推移, 的确越来越多 东西霏霏, 有什么有趣的左右 这种example--的 我们会看到一些 others--是,如果你 看过去的复杂性或 游戏的复杂性, 有一个很简单的建筑 该演奏成所有的块, 如果他们提炼出那些 积木,都十分便利 和可执行你们自己。 例如,它的 过了一段时间,但我 很肯定我最初做的时候 使得本场比赛的第一次 是我完全像个拖再拖。 我根本不注重 逻辑或拼图, 我专注于图形和发现 街道后和垃圾桶 和所有的。 但是,这些都是必要的 成分在第一。 一旦我完成了拖延, 布局总体框架, 我决定,我只想做一个 一块从天上落下垃圾的。 我们将看到划痕 支持东西叫做 sprites--字符,可以 对因此他们不同的服饰 看起来不同。 所以,我把一个垃圾桶 服装上的这样一个精灵。 我只是需要它 从天上掉下来。 所以事实证明,从无到有, 最喜欢的编程语言, 支持随机数字或 技术上伪随机数, 以便通过拖和 某些下探拼图, 我能够有垃圾桶 首先来自于左侧。 再下一次下跌,从 右,然后从中间。 和所有的游戏都只是 有垃圾从空中落下。 你不能在它指向或点击它。 你不能打开垃圾箱。 你不能做任何事情。 但它是一个小步 对我的终极愿景。 在这之后,我居然 实施某种 传感所以如果你没有点击 并拖动一块垃圾 在垃圾桶,奥斯卡 将盖子打开和关闭。 没有什么会发生在垃圾桶里,但 至少所述盖将打开和关闭。 所以,再检查,第二步中的两个。 这是发生了什么事情是 在这两个问题的关键设置为零 和编程更一般地,是 采取这些非常谨慎的婴儿的步骤。 因为它不仅让你 老实说,感觉完成了多 quickly--它的 在世界上最糟糕的事情 尝试实施所有奥斯卡时间, 然后小时后打绿旗, 并没有什么作品如预期 因为你在哪里,甚至 开始调试或 故障排除程序? 这只是压倒。 所以,真正拥抱这个想法 再次采取steps--婴儿的步骤 和again--建立 东西是,在最后, 真是令人印象深刻和复杂的,但 起初,是不是几乎一样如此。 事实上,让我们做到这一点。 让我先走还有 - 本身划痕 存在于Scratch.MIT.edu在网络上, 你会被告知为 在问题再多 设置为零,规范 这已经是在CS50的网站。 但是,这是什么划痕本身。 而且也真的只是 三个主要领域。 在左上方有 是所谓的阶段。 这是划痕。 默认的服装是一只猫。 这是矩形世界 你可以move--上,下,左, 右侧和一些其他的东西。 在中间这是我们的类别 还是我们的拼图托盘, 和不同的颜色 意味着不同的事情。 如果你闲逛,你会看到 之类的东西循环和条件 和变量等成分。 然后在这里是脚本的区域。 这是我可以拖放 这些拼图做的事情。 因此,让我们做一这样的事情。 让我先走还有 - 我知道它在哪里。 所以,我要立即点击 在那里,我知道的东西都准备好要, 但指向和点击和 四处是不可避免的。 因此,当绿旗点击, 我想要做什么? 我要做到这一点。 我要拖到这个谜题紫 件,问好两秒钟, 让我放大]。 而我要改变这种 是我希望它be--什么 世界你好两秒钟的罚款。 现在,我要点击 绿色食品标志,或者如果我真正想要的, 我可以全屏幕,然后回来。 这将只是保持 一切在一个窗口。 绿色flag--世界你好。 好吧。 不是所有的有趣。 因此,让我继续前进,做到这一点。 让我试试另一个。 当绿旗clicked--让我们 做类似声音。 并注意出 免费你得到的盒子 一只猫的声音,因为是默认的精灵。 所以,现在让我去前进, 打到现在绿色环保标志。 [喵喵叫] 胡。 这是可爱的。 我编程。 所以我做了什么? 这是一个程序的等价物。 这显然​​是超级简单。 它并没有真正采取所有的东西 努力和麻省理工学院做了大部分的工作, 但我已经调用的函数。 我已经使用的功能。 我做了一些动作,只使用 一个紫色的一块拼图。 好吧,如果我想要做的 3叫声在一排? 让我继续前进,做两三个。 并注意当你 悬停附近的一块拼图, 显得有点白线 诸如此类的磁性, 它会捕捉 在一起的时候你放手。 让我们来看看这里发生了什么。 [喵喵叫] 有一个错误。 我只听到一喵。 为什么会这样呢? 是吗? 是啊。 我们真的不听到它, 但是这是很好的直觉。 他们都打在同一时间。 为什么? 那么,电脑正要 做什么你告诉它做的事。 所以,如果你说,播放声音, 播放声音,播放声音, 但你不告诉它发挥到及至 大功告成,玩到大功告成, 这将通过吹 该计划真快 而且只做你告诉它做的事。 所以,我真的需要修复 这几种方式。 我可以做到这一点,摆脱了这一点。 让我试试这个谜题其他 piece--播放声音喵直到完成, 然后将三 这些和单击播放。 [喵喵叫] 这不是真的very-- 感谢你 - 很自然的。 那么,为什么我 - 让 我去这里控制。 尼斯。 等待一秒钟,现在让我回去 对声音和播放声音,直到完成, 然后让我等待一秒钟。 然后让我去送一 更多的声音,在这里我们去。 [喵喵叫] 多一点自然的,但 这不是很有效。 就像我开始厌烦,都是 简单来说,点击来回 真正复制我的work-- 几乎复制和粘贴。 事实上,如果我控制 点击或右键点击, 我可能只是复制和粘贴。 什么会是一个更好的构造使用? 什么想法来自之前? 是啊,这样一个循环。 而事实上,如果我们周围戳, 我们可能会发现这一点。 让我去活动或者说控制。 所以repeat--我不 希望它是10倍。 这是怎么回事招人烦快。 但我会重复三次。 让我回去声 直到把它完成播放声音。 让我回去控制 而只是等待一秒钟。 和通知,您可能 觉得不适合, 但如果再次磁你让它 在单元的地方,它会增长到填满。 它是什么,现在玩吗? [喵喵叫] 好。 尼斯。 而这也正是将被称为 一个程序,也是正确的。 它meowed相当三次 自然地,但它设计得更好。 我使用较少的冗余。 我没有复制和粘贴任何东西。 我只是用一个更好的主意。 现在,这仍然不是所有的 有趣的伤痕累累不做 任何东西。 因此,让我们做别的事情来代替。 让我们做一些事情永远。 你知道吗? 运动似乎很有趣。 让我们动他10 步骤,现在打比赛。 好。 嗯,我们可以种阻力 他回来了,他仍然 运行,因为他永远这样做。 所以循环是做 它在说的事, 但是这并不是那么有趣。 我们开工吧。 让我补充一个控制模块,并使用一个 的首次这些条件。 所以它要移动10 steps-- 10个点,10个像素的screen-- 然后它会问这个问题。 如果事情是真的,那么做 这事块中。 因此,原来传感有一个整体 一堆布尔expressions--的 Yes(是)的问题没有或真 假form--让我这样做。 如果touching--然后有 这个小下拉菜单。 我可以将其参数化。 如果触摸edge--让我们 做这样的事情。 所以,如果触摸edge-- 让我回去运动。 而我们为什么不只是 转身180度? 好吧。 所以永远,移动10步。 如果你接触 边,转180度。 而这还不是该计划的结束 因为你在一个被永远挡, 所以它会再次去 一遍又一遍又一遍。 因此,让我们看看会发生什么。 好。 一个小马车,但那种清凉。 我们可以添加到此一些无聊的事 那是不是所有的智力 有趣。 但是,如果我们打这个小 麦克风button--哎哟。 让我打扫一下。 让我加强这方面的作为 他们会说在电视上。 清理一下,保存, 现在去到脚本。 现在,让我去的声音。 让我给它一个名字。 我会打电话给这个哎哟。 现在播放声音哎哟。 请注意,它出现在 小下拉菜单。 让我们来看看。 [哎哟] [笑] 但是,我们可以动态牛逼了改变。 我们可以两倍烦人。 [哎哟] 或者,如果我们使它像 在时间 - 1000步 好。 所以,我们要独自离开的那一个。 如此反复,建筑blocks--我 开始与一些超级简单, 然后我增加了一个功能, 增加了一个功能,增加了一个功能。 而我不再需要担心 如何在第一的这些功能 被实现为我继续 在上面一层的东西。 所以,事实上,让我做另外一个在这里。 让我继续前进,打开一个文件 我带来了进步,所谓的羊。 因此它具有略微不同 字符,看起来像这样。 让我看看,如果我不能 使用计数器做些什么 在此case--所谓变量。 我要继续前进,Events--下 让我得到一个绿色的旗帜点击。 然后让我去的数据,我知道 从仅仅玩弄之前, 就是变量。 而且我要继续前进,这拖累。 因此,一个变量,名为计数器, 我将其初始化为零。 我可以称之为anything-- x或 y或z--但在编程, 调用东西语义 有用的方法,如柜台, 描述它是什么,它​​是一个 不少方便以后阅读你的代码。 让我继续前进,得到 一个永远阻塞在这里。 并让我去长相 页面,并做了说块。 但是,什么是酷的变量是我 不必只是在一些类型 像世界你好,我们已经过 完成后,我可以改为向数据 并拖动我的变量,甚至 虽然外形并不完全 看起来像它应该适合, 它会增长到填满。 而我只想说一个计数器 second-- spoiler--他要算。 我们会说这一秒。 然后我会去 让他等待一秒钟, 所以这不算涨得太快。 然后最后,变更计数器 通过换句话说one--, 递增一个计数器 附加价值,永远做到这一点。 所以羊太像一个 程序员,从0计数。 如果我们等待足够长, 他将永远做到这一点。 但是,这并不完全正确,因为 事实上,正如我们将在一个星期内发现, 更一般整数和计算机, 技术上只有一个finite--好, 而计算机上,当 他们表示整数, 只有比特的数量有限。 这些灯泡有 只能算这么高 你出的灯泡了。 和一台电脑也是如此, 只有这么多的内存, 只是有这么多的晶体管, 所以它只能算这么高。 因此,原来的羊, 我认为,可以算为2十亿 什么蛮大的。 因此,我们不打算 等待这种情况发生。 但最终一些bug会发生 可以有一些非常现实世界 后果。 但是,除了羊,那 只是引入了一个变量。 让我们继续前进,开拓 这是我事先做 这里所说的宠物Cat-- 宠物猫在这里。 并注意这里的几 块,但是当绿旗 点击后,永远做以下。 如果你去摸鼠标 pointer--使光标在屏幕上, 在arrow--玩喵喵声 然后等待两秒钟。 而就在这样做永远。 只要坚持等待 看是否pointer-- 如果猫触摸指针。 所以,我打游戏。 什么也没有发生。 但是,当我将光标移到猫, [喵喵叫] 如果我将其移开,不 再抚摸猫。 因此,一些条件逻辑 嵌套在一个循环内。 怎么样这个例子中,故意 所谓没有宠猫? 这是什么打算做什么? [喵喵叫] 你为什么不应该宠物猫? [喵喵叫] 好。 所以这是的,如果别人的例子。 这是一个决策点和 因为它是坐在环, 他们都得到检查。 这是真的? 这是真的? 这是真的? 这是真的? 最终,一个 那些将要应用 所以你听到的要么喵或 在这种情况下,狮子的吼声。 好吧,让我们做一个稍微看上一眼 我事先太...线程进行。 这样一个线程仅仅是一个 一台计算机可以做的事情。 因此,一个多线程程序是一个程序 可同时做多件事情。 和所有的这些实施例 迄今有 只是一个剧本,所以speak-- 一个程序像这样在这里。 但是请注意这个程序有 2精灵,两个字符。 一个是鸟。 一个是猫。 并注意当我点击这些下跌 左,他们每个人都有自己的脚本 或与之相关联的程序。 而这两项的 计划,通知,启动 同当绿旗clicked-- 让我们来看看在cat-- 当绿旗点击。 所以事实上,当我打到现在的发挥, 两件事情会立刻发生。 猫和鸟都 要同时操作 创造这种效果。 你可能想象发生了什么。 有一个循环和鸟 和猫是在一个循环。 鸟只是喜欢弹跳 我是当我说哎哟之前。 但猫显然具有优势。 还有另一种感应块 故意指向猫 在这种情况下,这里的鸟。 因此,我们可以梳理出,通过查看 通过这些块,发生了什么。 但这里的关键因素之一。 鸟,让这个游戏是不是 完全boring--或本animation-- 开始于一个随机的方向。 和计算机正在复苏 90和180之间的数 基本上,因此它是一个略 每一次不同的动画。 然后注意到这里,如果 猫接触小鸟,然后 玩狮子4 sound--轰鸣声。 但同时在鸟的 调色板,我们有这个。 永远,如果不接触猫, 只是不停的往前三个步骤。 然后这里的另一个拼图。 如果你是在边缘,反弹。 所以鸟是正中下怀 在意自己的业务, 只是飞来飞去,并 弹跳,它真的 该份条件逻辑猫 以确定它是否已经抓到了小鸟。 好吧。 因此,让我们做另外一个在这里, 这个被称为喜喜喜。 而这一次在这里少了点 这一个永远循环。 但是notice--我们怎么停 这很烦人的程序? 敲空格键。 因为如果我这样做, 左手program-- 察觉到它的不断listening-- 关键是空间按。 如果空格键按下, 如果是这样,它有什么作用? 它非常普遍的技术。 它设置等于某个值的变量。 但是,切换该值。 [?所以外观?] 基于所述shape--我 有一个变量,我 提前编写了一个名为 静音,这只是说yes或no。 是否设置为静音或没有? 对或错? 和通知,我说如果this-- 静音是零,然后换到一个, 否则设置静音为零。 所以只是价值翻转从零到一。 我可以done--改变 从两到三和三比二 或四,五或四到六个。 但没关系 我用的号码, 只要我保持 改变它的对面。 而大多数任何程序员只想 选择零和one--虚假和真实, 关闭并on--来表示这一点。 这是仍在运行。 如果我再敲空格键 [SEAL声音] 该程序仍在运行。 因为有这等脚本 上面写着,永远做到以下几点。 如果静音变量等于 zero--所以如果你没有静音 是logic--如果它是假的 或者没有,则播放声音, 因为你没有静音。 您应该演奏的声音,然后 想喜喜喜两秒钟 然后等待,并做到这一点 一遍又一遍又一遍。 因此在这种方式我们有一种方法 中场休息的人对程序进行交互。 并且它们不必 像日期为其他。 事实上,戳around-- 没有双关语intended-- 有人花了一个巨大的量 实施时间在互联网上 PokemonGo在划痕。 它甚至geolocates你 剑桥或奥尔斯顿在这里。 所以,如果你想看到过什么人 能做的就是this--很花哨的菜单。 请点击此处。 这是我与我的箭头键了。 我打算在这之后去。 点击。 现在你点击PokeBall。 我的意思是,我觉得你 应该点击PokeBall。 好吧。 所以,我做到了。 我可以在这里走了过来。 而这个人实施一些 PokeBalls在这里 - 3 PokeBalls。 我们会发布一个链接到这个 网上这样你就可以玩了。 但通知有刚 一些基本的构建块。 它看起来有很多票友,它是。 这是令人印象深刻,更 比我们通常会 期待,当然,对于问题设定为零。 我不知道多久 这个人上网时间。 但是,这一切都只是一个循环。 有一个声音播放。 有一些类型的循环 听了我是否 击中向上或向下 箭头或左和右, 然后如果是这样,它的移动 它的一些数目的像素。 然后如果我点击 另一个精灵,有 某种情况是否存在。 是啊,这是越来越过于激烈。 我们要停下来。 这是所有的基本组成部分。 有其他没有其他成分 比那些我们已经看过了。 然而在这里,让我做 最后一个组的例子 用于绘制的图片太 你可以做这里。 这里是一个非常简单的程序, 少了点this--咳,咳,咳。 与仅基于什么 我们已经看了到目前为止, 哪里是显而易见的 机会改善。 这个程序是正确的。 它咳嗽三次, 这就是我的本意。 但它的执行不力。 它的设计很差。 为什么? 是啊。 这不是一个循环。 而且它是没有这么多 这不是一个循环, 那就是有很多冗余。 有被复制和 粘贴代码,可以这么说。 而可能的解决方案 确实是一个循环。 因此,让我先走 并呼吁改善。 而我要在这里拖这些。 让我先走,并得到一个重复 块,这一变化为三个。 我要扔掉 其中的一些块。 你会发现它非常直观。 拖放和事 出现并最终消失。 而且我可以拖动该在这里了, 现在我有一个更清洁的版本依然。 但是,你知道吗? 有这样的机会 现在abstraction-- 开始以限定新的词汇 麻省理工学院没有预料到的。 有等待和重复 永远,如果, 但如果我想要什么介绍 这个词咳嗽作为一个块? 如果我想要一个拼图 他们的生活目的就是咳嗽? 好吧,让我们来看看这个版本 在这里,我提出如下。 奇妙的是,我已经创建 这一块拼图在这里, 其中刮允许你这样做。 事实上C和Python的 和JavaScript 打算让你做这一点。 您可以创建自己的自定义 你打电话给你想要的作品。 在这种情况下,咳嗽感觉 像一个合理的定义。 然后用这些碎片倒 在这里你能定义是什么意思。 我拖着从下降 此调色板这里 - 更多 blocks--这个大紫 块,在那里我的咳嗽类型 作为我的新拼图的名称。 然后我说,任何时候用户 称这种新的咳嗽一块拼图, 做一个发言权和等待。 所以,在这里我重复块, 我只能咳嗽三次。 而且我认为,特别是 如果现在你隐藏这个细节。 谁在乎咳嗽怎么实现? 我所关心的一个 程序员,我可止咳。 我不在乎怎么说的实现。 我只关心的 猫能说些什么。 我可以抽象掉的细节, 只专注于屏幕上这里什么。 但我可以进一步借此一步。 请注意,在这里,我有 实施循环三次。 但是,如果不是我抢这个版本? 而如果不是 这里这个版本, 我只是改变我的拼图拿 参数,并输入你们自己? 而且输入可以是 一些像三个。 所以,现在,如果我写一个程序 我想猫咳嗽, 其实,我可以告诉拼图 拼凑多少次咳嗽, 因为这里的底部,票友 这些定制拼图版 让我指定 咳,其实需要 一个input--需要一个像这样的论点。 你知道吗? 也许我知道,等一下。 咳嗽是same-- 这是从根本上 同样的想法打喷嚏。 这只是一个不同的 字在屏幕上。 我可以抽象掉 进一步贯彻 的这个最终版本 咳嗽,乍一看 方法是更复杂的期待。 但是请注意我做了什么。 我现在已经generalized--泛型化 真的 - 这拼图 被称为说字n次。 现在我有两个新的拼图 到这里定义的咳嗽n次。 又是什么止咳的功能呢? 什么是我的自定义拼图吗? 它只是调用发言权块, 传递我想说的话, 传递数 多少次我想说的话。 因为现在我可以实现 简单地说ACHOO打喷嚏, 在这种情况下,一些次数。 所以我分层和层次感。 再次,这里的关键是不 我是如何实现它,但事实 如果我只是从字面上 这些移动关闭屏幕, 怎么看怎么简单,如果不 漂亮的我的计划现在看起来。 因为它做的事情 说,我已经抽象 走什么是黑盒子里面。 它正好是一个紫色的盒子在这里, 但我已经离开受阻里面有什么 因为我不关心它是如何工作。 我刚才它的工作原理在意。 事实上,在问题 设置为零,这正是 那种想法的层次感你会 要探索的机会。 这正是机会 适用于解决问题的技巧, 什么是可能是一个 陌生的环境。 而无论你没有编程 前或编程, 你会发现,有 一个小东西 在这种环境中的每一个人。 并与问题集 之一,一个星期的时间, 我们将过渡到聚焦 在被称为高级语言 C--或相当的低级 所谓的高级语言 C--这更 功能强大,即使它的 有点乍一看更加神秘。 你会每今天的TL意识到:DR, 这个问题设置具有较短 时间会比将来的窗口,只需 因为你应该还算找到它 无障碍。 而不是担心,如果 您添加上课迟到。 我们将解决这个不久。 而之前我们休会的蛋糕,让我们 只有一两分钟的样子完成 什么,你在这里等待着CS50。 [音乐] 好吧。 以上就是CS50。 我们很快就会看到你。 蛋糕现在担任。 [音乐] 扬声器17:你听说过 的休假,首席? 扬声器18:或许有 更引擎盖下。