哈佛大学CS50课程笔记--算法,数据存储,磁盘,程序设计等

本课程旨在帮助大家了解社会上的各种技术难题以及技术缺陷。十周后,再次看Youtube,你绝对觉得这些人很好玩。比如,一个视频里讲到:几个星期以来,我一直在研究变态杀人。旁白的妹子讲道:这不是实时的,我用VB创建一个图形用户界面,试试看能不能跟踪到IP。

涉及到专业的用词是十分精准的,GUI是图形用户界面,使用VB语言,听起来很专业,像是重新流行的语言。当然,这门语言我们在上这门课的过程中附带着要学习的。事实上,使用VB真的不是这个故事出彩的地方。最后,我们看一下是否可以跟踪IP地址,这是我们的目标。但实际上当你听到这样的事情,你可能开始愁眉苦脸了。

我们看一下第二个视频,该视频来自《犯罪现场调查》,视频讲道:这是暑假拍的,它给了我们创作的素材,这个游客正在拍这个女孩,留意她眼珠里的图像,把照片翻过去,这就是受害者。当我们处理这样的原数据时,事实上计算机科学中并不存在无限放大,你不能直接要求计算机增强这张图片或是修复它,然后要求计算机很神奇的放大图片,以及死者眼珠的反光。讨论这些可能有点随意。

幸运的是我早上在网上闲逛的时候发现了一些东西,一些对还在使用Gmail的人来说可能技术上有吸引力的东西,你可能已经看到,其右上方有个广告说的是最新版Gmail优先收件箱发布了,这个就不是开玩笑啦,它其实是一个比较有趣的视频,它让我们有机会了解在我们课堂上会讲到的一些思想,现在如果你申请了Gmail优先收件箱,如果你还没使用它,或者不懂他是什么。好,你是否考虑过在其背后Gmail是如何运作的?这些对我们又有什么意义呢?

在我们周三上的课中,包含很多重要的计算机思想。其实这节课的目标不是教会你编程,尽管编程会花费你们大量的时间和精力,但是这门课的意义是学习一些你真正关心的东西,例如,管理你的邮件,或者使你的时间更加高效或者回答一些我们关心的,可以提高效率的东西,我的意思是规划的很好的话,其实这些都是计算机能帮我们完成的,正如Gmail这个短片的意思,对我们有所启发,去找到哪些是对我们有用的邮件,我们看看哪些邮件要回复。如果你回复了,理论上来说这表明用户一定很关心发件人以及邮件的主题,如果你阅读了这个邮件,这也是个重要的暗示,当然还有没有其它的一些暗示或者说技巧或者规则之类游泳的办法呢?(学生讲了几种,David做了讲解)我想Facebook肯定用了计算页面停留时间的应用程序来推断你对什么感兴趣,你想看到什么。今天早上我就遇到这样的事情了,我收到了两份邮件单,其中一份有一封邮件说,(。・∀・)ノ゙嗨,有人用过这个吗?真是糟透了。另一份邮件则是相反。因此,这是一个有意思的事情,因为它可能是投其所好或者不对胃口,当然继续,正如其中一个短片所示,这些东西需要计算机花一些时间去学习。

作为先驱,谷歌也许并不知道,你关注什么,但是他像关注广告一样,花费一些时间关注你。这些算法和进程,想必会提升吧。也许这暗示了以后发展的方向。

这节课的意义不是你和你同学相比最终如何,而是第十二周的时候相比第0周你的收获如何,这可能是这节课的最大意义了。(老师继续鼓励刚入门的同学,毕竟老师本科学的是政治)学习大纲会照顾每一位同学。为了合理评定成绩,老师会和30多位助教商议300名零基础同学的成绩。某些机制的设定,可能会让未来几周成为难忘的经历。带着这些问题,你就能深入研究,你真的能沉浸到计算机世界和编程世界中。但是生活还要继续,诸如运动,社团等。

我们将向大家示范书写代码以及跟用户交互,抛开趣味性不提,我们意识到作一个计算机科学家来说技术并不是我要的最终答案,遗憾的是,中小学教育中,就是讲知识然后运用所学的知识解决问题,但是在实际生活中不总是这样,实际上,有时候最简单的解决方法就是最好的,所以按照我们一直的想法,我们去年做出来shuttleboy cards,我们现在都已经习以为常了,我们都认为极为平常了。这些关于班车的程序已经做得很好了,但我们有时候拨打一个电话或上一下移动网络,都是不太方便的,也许伸进口袋,拔出一块塑料来看看,还有其他的班车时间呢。我们提及这个今年我们继续研究它的新版本,可不可以做出更好的版本。

(老师介绍了辅修计算机科学进阶的一些课程,都是以CS开头的编号,比如数据可视化,它其实是CS171课程的主题,它其实已经脱离了计算机科学,是一门尝试如何以最好的方式来表述你的数据的学问。

说实话,尤其是对哪些在这里上课有些吃力的同学,如果你曾经使用哪个程序或软件有困难,好吧,那不是你的错,是那个程序或软件没有设计好,因此考虑人与机器如何交互动以及如何优化所谓的用户界面或者GUI界面就是这个特殊邻域的一个主题。

对于哪些程度比较好的同学,我们马上来讲一下以前遗漏的问题,如果你们已经熟悉这件事,那会觉得很容易接受。但是,在座的每一位可能都记得,这在小时候学得以10为进制的系统或者十进制系统通过数列方式学习数数和加减法,左边一位代表一,旁边代表十,接下来百,千,如此等等,在小学,像123这样的数,为什么要表达成123这样的呢?事实上我们看到黑板上123,这里的1处于百位,2处于十位,所以100乘以1加上10乘以2,再加上1乘以3,但是毫无趣味,这对你是一件极为熟悉的事,但是电脑结果也是以同样的方式运行的。所谓的二进制就是,你觉得模糊的0与1,在电脑上计算,事实上可以简化为跟小学数学一样,知识在电脑上计算而已,因为它更容易,仅仅使用两个数字0与1,他们仅仅使用一位二位,四位,八位吗?四位,八位吗?如果你想想之前学习的十的次方,这些就是二的次方,所以说你如果需要更大的数,就采用16位32位等等,技巧是什么,如果你表达类似于7的数字,在二进制中,它和十进制可不太一样。那我们该怎么做呢,如果你需要7,这是一位,二位,四位,八位,这是位数,刚才的十进制数,我想表达7而且只能采用数字1与0,在十进制中,dec意思是十,由0到9这十个数字构成,相反在二进制中,bi代表2,由1和0组成,我只需要在这些位数中填入0和1然后计算方式是一样的,八位,四位,二位,等等,那7怎么表达呢?好的1 1 1 然后0,就像在十进制中一样,你可以在左边尽你可能地任意放置0,它们完全无关紧要,现在我们表示出了数字7.然后,数字0呢,自然全部是0.只是为了一致性,我们采用四个0,当然仅仅是为了美感,。

在星期三我曾经提过计算机学专家,从0开始计数而不是1,这是为什么呢?你想想,数字系统被简化为只有0与1 地基本思想,无论0还是1都占据一个位数,都有与它相关地权数,自然,我们很明显地从0开始计数,否则,你就浪费了一个比特位,这就多余了。比特,B-I-T,是binary digit的简写从0到1的数字,而bi表示2,你只有两个数字,因此bit就诞生了。再来个测试,那么二进制中15怎么表达?

如何由这些0和1 表达信息?我们实际在乎的是数字的表达,那么我们需要数字和字符的某种对应关系。比如ASCII码,有着明显的对应模式。

用八个比特你就可以表达256个可能的字符,八个比特即一个字节。当你说电脑以这些0与1进行信息存储时,你已经键入了字母A,这就是在计算机内部发生的过程,01000001,这是怎样运行的呢?事实上,它依靠一定的技术,也许你知道电脑中有一个RAM,正在使用的程序和文件都暂时存放在那里,而且会加快电脑速度,而硬盘是程序和文件永久存储的地方,你可以提取没删除的嗯见和记录来但是硬盘使用了一种不同的技术。因为之前电脑使用了二进制而不是十进制,主要是因为当我们用一台实体机器运行计算机时,这实际上很容易用开或者关的概念来表示。当你在硬盘中存储信息时,我们将会用到一种磁性粒子来实现。

这种技术怎样应用到计算机中呢?磁性粒子很小因为它们要放在你的笔记本电脑或者台式机被称为硬盘的里面,打开硬盘你会发现硬盘其实是个大的铁容器,由若干磁盘组成, 这些金属电路板 及其上都是最够小的粒子,以至于你看不到它们,但是如果你碰触它们,或者打开硬盘,戳弄他,你就破坏了磁盘,因为你将使它们变形,也就是它们的排列顺序,你将会损坏数据,有意思的 是当它们分布在那里,如果这是一个磁性粒子,你能很容易的用它代表0和1,你不需要一个电灯开关,或者一根电管,或者打开关闭一个Iphone应用程序,你只需要一个北南极的磁性物体,任意指定,比方说代表1,那么南北极磁性就代表0,因此,你的电脑硬盘是完全是有一簇按照这种方式排列的磁性粒子,你现在按照一定模式一位一位的进行排列。如果你组成块,8位一个单位,这时候我们可以存储字和句子以及段落。这个学期中我们会看到图片,视频等更复杂的文件格式,也是一样的存储格式。

为了能让数据从RAM中到硬盘是要使用软件信号告诉硬盘,如何存储这些数据,硬盘电路板把这些信号转化为电压波动,这些电压反过来控制硬盘的移动部分,现代电脑保留了这些移动的一部分。一些信号控制一个用于金属编码磁盘的旋转,你的数据实际上存储于这些磁盘中,其他的信号移动读写头,来到硬盘中去读或者写。这些设备是很紧密的以至于人的头发都不能在头和旋转的磁盘之间通过。尽管如此,它的运行速度非常快。

SSD硬盘,运转快一些。问题是如何把电磁信号转化为0和1?让我们看下刚才低速运转时我们看到的情形,当一个简单的电脉冲被送到读写头,它会短时间内出现一个小的电磁。这个磁体创建一个能改变覆盖在磁盘表面小金属粒子的磁极。这些在磁盘上的有序的小粒子,代表这个当代计算机中二进制中单独的一位,如果当前通过读写头来发送指向一个方向的信息,这个区域的磁极指向某个方向。如果当前发送一个相反方向,磁极指向就会反转。

那怎样从磁盘中得到数据呢?只要把前面的过程反过来。通过读写头你就可以得到每个粒子的极性, 如果把这些上百万粒子的信息汇聚一起就构成了一个文件。一个独立文件可能需要扫描整个磁盘的硬盘,因此这些特殊的文件保持这它的轨迹。

软盘,现在不多啦,如果你用手指触碰这个金属片,不要用力过猛,你会发现里面有个磁盘,从根本上说这是个软盘。如果我们很小心的损坏了若干字节,从金属片下打开,用手指在上面划过,就会使这些粒子无极性,也就是无法用于存储了。

笔记本或者台式本中的硬盘也是一个道理,从物理大小来说几乎相同。

格式化或者分区只是改变了几千字节的信息,结果是电脑不知道这些信息存在哪里,但是组成这些文件和文件夹的字节,还在原来的地方存储着。

碎片处理,这是因为当你开始对硬盘驱动器进行读写时。。。。。

驱动,才能知道如何与这个硬盘进行通信,操作系统根据数据在磁盘中的存储情况,通过发送上下左右移动的指令来读取磁盘里的额数据。

固态硬盘的优点和工作原理是什么?因为他们没有移动部件,所以存读取速度更快。

伪码是一种类似英语的语法,比较简单,和电脑一样工作。

第一行,定义变量。

第二行,介绍什么叫循环。

第九行,如果你找到相匹配的袜子就执行接下来的代码,否则就执行其他。

其他:按照控制流,返回到while.

计算机不具备自我思考的能力。

Linux有各种各样的接口。

在引号之间的叫字符串,字符串可以是句子,单词或者别的什么。

编译器以人输入的文本 ASCII码为输入,它输出一些cpu实际上可以理解的。0和1 的模式。

计算机语言有一种叫做语句的东西。一个语句是一个动作。scratch语言的后缀就是sb.

Loop.需要在某种情况下做某事,你需要判断下这个条件,来看看条件是真还是假。即boolean布尔表达式。

Boolean expression

Conditions.如果条件成立,执行语句,否则跳过去执行这下面的语句。

游戏:产生随机数,称为伪随机数。写一个交互的程序,希望每次游戏都不一样。伪随机数意味着每个事件都存在不可预测性。

使用数组,我们创造了线程。我们在一个程序里可以同时做几件事,每件事叫做一个线程。

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/weixin_43218659/article/details/87603714