哈佛CS50x 2025|Week0 课堂笔记|211 CS新生自救指北 | 计算机科学概论

部署运行你感兴趣的模型镜像

WeeK 0 课堂笔记


  • 计算机科学与问题解决
  • ASCII
  • 字符集/ 统一码: Unicode
  • RGB
  • 算法: Algorithms
  • 伪代码: Pseudocode
  • 人工智能: Artificial Intelligence
  • 未来展望 What’s Ahead
  • 可视化编程语言: Scratch
  • Hello, world
  • Hello, you
  • 喵喵与抽象
  • 条件 Conditionals
  • 奥斯卡时间
  • 常春藤最难的游戏
  • 总结

计算机科学与问题解决


  • 本质上,计算机编程就是获取一些输入并创建一些输出,从而解决问题。输入和输出之间发生的事情,也就是我们所说的 “黑匣子/ black box”,是本课程的重点。

    带有输入和输出的黑匣子

  • 例如,我们可能需要点名某个班级的出勤情况。我们可以使用一种称为一元 unary (也称为以 1 为基数 base-1 ) 的系统来一次数一根手指。

    • 计算机信息量最小单位: 位 / 比特/ bit/ binary
      • 计算器中的储存器唯一可以储存的形式是 比特 bit, 因此如果想要在计算机上处理信息, 就必须把它们按位储存.
    • “位” 代表 0 或 1 ; 关 或 开。
    • 如今的计算机使用一种称为二进制 binary 的系统进行计数。我们熟悉的术语“位 / 比特/ bit/ binary ”正是源于 “二进制数字 binary digit ”
  • 计算机只用“0”和“1”来交流。“0”代表关闭, “1”代表打开。计算机由数百万甚至数十亿个晶体管组成,它们不断地被打开和关闭 。

    • 如果你想象使用一个灯泡💡,单个灯泡只能从0数到1。但是,如果您有三个灯泡,那么您就有更多选择!
    • 在你的 iPhone 内部,有数百万个被称为晶体管的灯泡,它们使这个设备能够执行人们每天习以为常的活动.
  • 作为一种启发式方法,我们可以想象以下值代表二进制数字中每个可能的位置:

4 2 1
  • 使用三个灯泡,以下内容可以代表零:
4 2 1
0 0 1
  • 类似地,以下内容代表一个:
4 2 1
0 0 1
  • 按照这个逻辑,我们可以提出以下内容等于二:
4 2 1
0 1 0
  • 进一步扩展这个逻辑,以下代表三个:
4 2 1
0 1 1
  • 四个将显示为:
4 2 1
1 0 0
  • 事实上,我们只使用三个灯泡就能数到七个!
4 2 1 
1 1 1
  • 计算机使用二进制进计数, 计算方法: 类比十进制个十百乘阶. 图式如下:
2^2 2^1 2^0
 4   2   1
  • 因此,您可以说需要三位 three bits(四位、二位和个位 the four’s place, the two’s place, and the one’s place)来表示高达七的数字。
  • 类似地,要计算高达八的数字,值将表示如下:
8 4 2 1
1 0 0 0
  • 计算机通常使用八位 eight bits(也称为字节 byte)来表示一个数字。
    • 8个比特/8位组成一个字节.

    • 例如,00000101二进制 binary 数字 5. 11111111 代表数字255. 您可以按如下方式想象来零:

      **128**          0
      **64**           0
      **32**           0
      **16**           0
      **8**            0
      **4**            0
      **2**            0 
      **1**            0
      
      

上述我们表达了数字, 但是怎么 表达字母 ?

前面我们了解了比特可以用来表示数字和机器码,接下来我们面临的一大挑战是如何用它来储存文本?

毕竟人类所积累的大部分信息都是以各种文本形式保存的. 在过去文本信息聚集的最多的地方就是图书馆. 而在今天每当我们使用计算机来处理文本(也包括存放图像和影音信息!)总会在不经意之间使用到 ASCII 码 (美国信息交换标准码 American Standard Code for Information Interchange). 不过为了易于理解我们还是先从如何使用计算机存放文本开始!

为了将文本表示为数字形式,我们需要构建一种自己的编码系统—给每一个字符指派一个唯一的编码💡. 这样一来,使用不同方法制造出的计算机之间就可以互相兼容,甚至可以相互交流文本信息.

当我们使用计算机来处理文本时,如果字母表中的字母的编码是按顺序来的,就会给我们的工作带来很多便利,优点就是字母的排序和分类将变得简单易行!👏

简而言之,所有由符号所表示的字母和数字(Alphanumeric)都需要编码,就有这种功能的系统被称之为字符编码集(Coded Character Set), 系统内的每个独立编码称为字符编码(Character Codes).

— 摘自《编码》第20章ASII码和字符转换

ASCII 和字符转换


  • 正如数字是 1 和 0 的二进制模式一样,字母也使用 1 和 0 表示!

  • 由于代表数字和字母的 1 和 0 之间存在重叠,因此创建了ASCII标准来将特定字母用特定数字表示*「数字映射字母」。*

    • 例如,决定将字母A映射到数字 65。

    在这里插入图片描述

  • 如果您收到一条短信,该消息下的二进制可能代表数字 72、73 和 33。将这些数字映射到 ASCII,您的消息将如下所示:

    H   I   !
    72  73  33
    
  • 由于二进制最多只能计算 255,因此我们仅限于 ASCII 表示的字符数。

  • 如果您愿意,可以了解有关 ASCII 的更多信息。

Unicode 字符集 / 统一码


  • 随着时间的推移,通过文本进行交流的方式越来越多。
  • 由于二进制中的数字不足以表示人类可以表示的所有各种字符,因此 Unicode 标准扩大了计算机可以传输和理解的位数。Unicode 不仅包括特殊字符,还包括表情符号。
  • 您可能每天都会使用一些表情符号。以下内容可能对您来说很熟悉:
    • 😂😍😒😜🙈👀🤣🥲😇
    • 比如全世界使用评率最高的 “😂”表情包的二进制表示和Unicode是“U+1F602” .
  • 虽然 0 和 1 的模式在 Unicode 中是全球统一的,但可能在不同的制造商硬件上, 比如安卓手机、iOS系统、windows系统、苹果手机上哭笑的表情略微有所不同, 就像是同一个人在驾照、身份证、护照上面的形式有所不同,但只要是同一个人用Unicode 就一定可以识别出来.
  • 越来越多的功能被添加到 Unicode 标准中,以表示更多的字符和表情符号, 目前已收入了15万+字符, 甚至包括甲骨文! 例如:

在这里插入图片描述

RGB


  • 零和一可以用来表示颜色。
  • 红色、绿色和蓝色(称为 RGB)是三个数字的组合。

在这里插入图片描述

  • 以我们之前使用的 72、73 和 33 为例,它们通过文本表示 HI!,图像阅读器会将其解释为浅黄色。红色值为 72,绿色值为 73,蓝色值为 33。

在这里插入图片描述

  • 表示各种颜色的红色、蓝色和绿色(或 RGB)所需的三个字节构成了任何数字图像中的每个像素 (或点)颜色。图像只是 RGB 值的集合。
  • 0 和1 可以用来表示图像、视频和音乐!
    • 📹 视频是存储在一起的许多图像的序列,就像活页簿一样。
    • 🎶 音乐可以使用各种字节组合以类似的方式表示。

算法 Algorithms


  • 解决问题是计算机科学和计算机编程的核心。算法 是解决问题的一组分步指令。
    • 算法思维:进行抽象,简化某件事,不关注低级而关注高级后者过程本身,也就是更高层次进行思考的操作. 我们平时不会用0和1,会选择更高级的语言来表达【符合下文提到的思想:抽象】

      • 回到第一张图,中间的黑匣子就是算法:

      在这里插入图片描述

提问: 想象一下试图在电话簿中找到一个名字的基本问题。一个人该如何去做呢

  1. 一种方法可能是简单地从第一页阅读到下一页,直到到达最后一页.
  2. 另一种方法是一次搜索两页。
  3. 最后一种也许更好的方法是走到电话簿的中间,问:“我要找的名字是在左边还是在右边?然后,重复这个过程,将问题切成两半。
  • 这些方法中的每一种都可以称为算法。这些算法中的每一种的速度都可以用所谓的大 O 表示法表示如下:

    在这里插入图片描述

    请注意,第一个算法(以红色突出显示)的大 O 为 n,因为如果电话簿中有 100 个名称,则可能需要多达 100 次尝试才能找到正确的名称。第二种算法一次搜索两个页面,其大 O 为 n/2,因为我们在页面中的搜索速度是原来的两倍。最终算法的 big-O 为 log2n,因为将问题加倍只会导致解决问题的多一步。

  • 程序员将基于文本的人工指令翻译成代码。

Pseudocode 伪代码


  • 这种将指令转换为代码的过程称为伪代码

  • 创建 伪代码的能力对于一个人在本课程和计算机编程中取得成功至关重要。

  • 伪代码是代码的人类可读版本。例如,考虑到上面的第三种算法,我们可以按如下方式编写伪代码:

    1  Pick up phone book
    2  Open to middle of phone book
    3  Look at page
    4  If person is on page
    5      Call person
    6  Else if person is earlier in book
    7      Open to middle of left half of book
    8      Go back to line 3
    9  Else if person is later in book
    10     Open to middle of right half of book
    11     Go back to line 3
    12 Else
    13     Quit
    
  • 伪编码是一项如此重要的技能,至少有两个原因。

  1. 首先,在创建正式代码之前进行伪编码时,它可以让您提前思考问题的逻辑。
  2. 其次,当您进行伪编码时,您可以稍后将此信息提供给寻求了解您的编码决策以及代码如何工作的其他人。
    • 注意我们的伪代码中的语言具有一些独特的功能。首先,其中一些行以动词开头叫做 函数,例如 pick up、open、look at。
    • 其次, 注意有些行包含诸如 ifelse if 之类的语句。这些称为条件Conditonals
    • 再然后, 注意有些表达方式可以说是 真 ,例如“人在书中较早”。我们称这些为布尔表达式
    • 最后,注意诸如“返回第 3 行”之类的陈述。我们称之为循环
  • 这些构建块是编程的基础。
    • 在下面讨论的 (Scratch) 上下文中,我们将使用上述每个基本编程构建块。

人工智能 Artificial Intelligence


  • 考虑一下我们如何利用上面的构建块来开始创建我们自己的人工智能。看看下面的伪代码:

    If student says hello
        Say hello
    Else if student says goodbye
        Say goodbye 
    Else if student asks how you are
        Say well
    Else if student asks why 111 in binary is 7 in decimal
    ...
    
    

    请注意,仅仅对少数交互进行编程,就需要许多行代码。数千或数万次可能的交互需要多少行代码?

  • 人工智能程序员不是像上面那样对对话式人工智能进行编程,而是在大型数据集上训练大型语言模型 (LLM)。

    • LLM 着眼于大块语言中的模式。此类语言模型试图对哪些单词在彼此之后或彼此并排进行最佳猜测。
  • 虽然基于 AI 的软件在生活和工作的许多方面都非常有用,但我们规定,使用 CS50 自己的软件以外的基于 AI 的软件是不合理的

  • CS50 自己的基于 AI 的软件工具名为 CS50.ai 是一个 AI 助手,您可以在本课程中使用。它会对您有所帮助,但不会泄露课程问题的全部答案。

前景提要 What’s Ahead


  • 本周您将学习 Scratch,一种可视化编程语言。

  • 然后,在接下来的几周内,您将了解 C。这将看起来像这样:

    #include <stdio.h>
    
    int main(void)
    {
      printf("hello, world\n");
    }
    
  • 通过学习 C,您将为将来学习 Python 等其他编程语言做好更充分的准备。

  • 此外,随着几周的进展,您将了解算法。

  • C 之所以如此具有挑战性,是标点符号。今天抛开标点符号和语法不谈,我们将只使用一种名为 Scratch 的编程语言的想法。

  • C 之所以如此具有挑战性,是标点符号。今天抛开标点符号和语法不谈,我们将只使用一种名为 Scratch 的编程语言的想法。

可视化编程语言: Scratch


  • Scratch 是麻省理工学院开发的一种可视化编程语言。使用了我们在本讲座前面介绍的相同基本编码构建块。

  • Scratch 是进入计算机编程的好方法,因为它允许您以可视化的方式使用这些构建块,而不必担心大括号、分号、括号等的语法。

  • Scratch IDE(集成开发环境)如下所示:

    请注意,在左侧,有一个可以在编程中使用的构建块调色板。在构建块的右侧,有一个区域,您可以将块拖到该区域来构建程序。在它的右边,你会看到一只猫站着的舞台 。舞台是您的编程栩栩如生的地方。

  • Scratch 在坐标系上运行,如下所示:

    在这里插入图片描述

    请注意,舞台的中心位于坐标 (0,0) 处。现在,猫的位置是同一个位置。

Hello World


  • 首先,将“当绿旗单击时”构建块拖到编程区域。然后,将 say 构建块拖到编程区域并将其附加到上一个块。

    在这里插入图片描述

  • 请注意,当您点击舞台上的绿旗时,猫会说:“你好,世界”。

  • 这很好地说明了我们之前讨论的关于编程的内容:

    请注意,输入 hello, world 被传递给函数 say,并且该函数运行的副作用是猫说 hello, world

Hello you


  • 我们可以通过让猫向特定的人打招呼hello来使您的程序更具互动性。

  • 修改您的程序如下:

    请注意,单击绿色标志时,将运行函数 ask。程序会提示您(用户)“ 你叫什么名字? 然后,它将该名称存储在名为 answer变量中。然后,程序将 answer 传递给一个名为 join 的特殊函数,该函数组合了两个文本字符串 hello 和提供的任何名称。从字面上看,answer 返回一个要join的值。这些被共同传递给 say 函数。猫说, 你好, 还有一个名字。您的程序现在是交互式的。

  • 在本课程中,您将为算法提供输入并获得输出(或副作用)。这可以从上述程序中描述如下:

在这里插入图片描述

请注意,输入 hello 和 answer 被提供以join ,从而导致 hello, David 的副作用。

  • 同样,我们可以按如下方式修改我们的程序:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    请注意,当单击绿色标志时,此程序会将与 hello 连接的相同变量传递给名为 speak 的函数。

喵喵与抽象


  • 与伪编码一样, 抽象是计算机编程中的一项基本技能和概念。

  • 抽象是将问题简化为越来越小的问题的行为。

    • 例如,如果您要为朋友举办一顿丰盛的晚餐,那么必须做整顿饭的问题可能会非常困难!但是,如果您将烹饪任务分解为越来越小的任务(或问题),那么制作这顿美味佳肴的大任务可能会感觉不那么具有挑战性。
  • 在编程中,甚至在 Scratch 中,我们都可以看到抽象在行动中。在您的编程区域中,按如下方式进行编程:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    请注意,您正在一遍又一遍地做同样的事情。事实上,如果您看到自己重复编写相同的语句,那么您很可能可以更巧妙地编程——抽象掉这些重复的代码。

  • 您可以按如下方式修改代码:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    请注意,循环的执行方式与上一个程序完全相同。然而,通过将重复抽象为一个为我们重复代码的块,问题得到了简化。

  • 我们甚至可以通过使用 define 块来进一步推进这一点,您可以在其中创建自己的块(您自己的函数)!编写代码如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    请注意,我们正在定义自己的块,称为 meow。该功能播放喵声,然后等待一秒钟。在它下面,你可以看到当点击绿旗时,我们的喵函数重复了三次。

  • 我们甚至可以提供一种方法,通过该函数可以接受输入 n 并重复多次:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    请注意 n 是如何从“meow n times”中获取的。n 通过 define 块传递给 meow 函数。

  • 总的来说,请注意这个改进过程如何导致更好、更好的设计代码。此外,请注意我们如何创建自己的算法来解决问题。您将在本课程中锻炼这两种技能。

条件 Conditionals


  • 条件是编程的基本构建块,程序在其中查看是否满足了特定条件。如果满足条件,程序将执行某些作。

  • 为了说明条件,请编写如下代码:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

请注意,使用 forever 块,以便一遍又一遍地触发 if 块,这样它就可以连续检查猫是否正在触摸鼠标指针。

  • 我们可以按如下方式修改我们的程序以集成视频传感:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 请记住,编程通常是一个反复试验的过程。如果您感到沮丧,请花时间与自己讨论手头的问题。您现在正在解决的具体问题是什么?什么是有效的?什么不起作用?

奥斯卡时间


  • Oscartime 是 David 自己的 Scratch 节目之一——尽管这些音乐可能会困扰他,因为他在创建这个节目时听了几个小时。花点时间自己玩游戏。
  • 我们自己建造奥斯卡时,我们首先添加灯柱。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 然后, 编写如下代码:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    请注意,将鼠标移到奥斯卡上会改变他的服装。您可以通过浏览这些代码块来了解更多信息。

  • 然后,按如下方式修改代码以创建一个掉落的垃圾:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    请注意,垃圾在 y 轴上的位置始终从 180 开始。x 位置是随机的。当垃圾在地板上方时,它一次下降 3 个像素。您可以通过浏览这些代码块来了解更多信息。

  • 接下来,按如下方式修改代码,以允许拖动垃圾箱。

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    您可以通过浏览这些代码块来了解更多信息。

  • 接下来,我们可以实现评分变量,如下所示:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    您可以通过浏览这些代码块来了解更多信息。

  • 去试试完整的游戏 Oscartime

常春藤最难的游戏


  • 从奥斯卡时间到常春藤最难的游戏,我们现在可以想象如何在我们的计划中实施运动。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 我们的计划有三个主要组成部分。

    • 首先,编写代码如下:

      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    请注意,当单击绿色旗帜时,我们的精灵会移动到舞台中心坐标 (0,0) 处,然后监听键盘并永远检查墙壁。

    • 其次,添加第二组代码块:
  • 请注意我们如何创建自定义监听键盘|listen for keyboard脚本。对于键盘上的每个箭头键,它都会在屏幕上移动精灵。

    • 最后,添加这组代码块:

      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    请注意,我们还对感受墙壁|feel for walls 进行了自定义感触。当精灵接触到墙壁时,它会将其移回安全位置——防止它离开屏幕。

  • Scratch 允许同时在屏幕上显示多个精灵。

    • 添加另一个精灵,将以下代码块添加到程序中:

      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    请注意,耶鲁精灵似乎如何通过来回移动来妨碍哈佛精灵。当它撞到墙上时,它会转身,直到再次撞到墙上。您可以通过浏览这些代码块来了解更多信息。

  • 您甚至可以使一个精灵跟随另一个精灵。添加另一个精灵,将以下代码块添加到程序中:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    请注意麻省理工学院的标志现在似乎如何沿袭哈佛的标志。您可以通过浏览这些代码块来了解更多信息。

  • 去尝试完整的游戏 Ivy’s Hardest Game

总结 Summing up


在本课中,您了解了本课程如何在计算机科学和编程的广阔世界中发挥作用。你学到了……

  • 很少有学生有编程经验来上这门课!
  • 你并不孤单!你是一个社区的一部分。
  • 解决问题是计算机科学家工作的本质。
  • 本课程不仅仅是关于编程——本课程将向您介绍一种新的学习方式,您可以将其应用于生活的几乎每个领域。
  • 计算机如何理解和表示数字、文本、图像、音乐和视频。
  • 伪编码的基本编程技能。
  • 理解抽象的概念将如何在您未来的工作中发挥作用。
  • 编程的基本构建块,包括函数、条件、循环和变量。
  • 如何在 Scratch 中构建项目。
    #cs50
    #转码自学
    #计算机基础
    #零基础转码
    #编程入门
    #Scratch

您可能感兴趣的与本文相关的镜像

LangFlow

LangFlow

AI应用
Agent编排

LangFlow 是一款低代码、可视化的 AI 应用构建工具,用于快速搭建和实验 LangChain 流水线

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值