【笔记】CS50x 第 0 讲:Scratch(图形化编程)
本讲从 AI 与编程的关系切入,介绍了计算机科学的核心——问题求解(输入→算法→输出)。通过灯泡演示讲解了二进制、ASCII/Unicode 编码、颜色与图像/视频/声音的表示方式,并用电话簿查找例子引出算法效率。最后通过 Scratch 图形化编程,展示了函数、条件、循环、变量、抽象等核心编程概念,并以学生作品(Oscar Time、Ivy’s Hardest Game)收尾。
哈佛 CS50x 全课笔记:从 Scratch 起步,经 C 语言、算法、内存、数据结构、Python、SQL,到 HTML/CSS/JavaScript 与 Flask,最后以《The End》收官。
本讲从 AI 与编程的关系切入,介绍了计算机科学的核心——问题求解(输入→算法→输出)。通过灯泡演示讲解了二进制、ASCII/Unicode 编码、颜色与图像/视频/声音的表示方式,并用电话簿查找例子引出算法效率。最后通过 Scratch 图形化编程,展示了函数、条件、循环、变量、抽象等核心编程概念,并以学生作品(Oscar Time、Ivy’s Hardest Game)收尾。
本讲是 CS50x 第一周课程,主题为 C 语言。从 Scratch 图形化编程过渡到文本编程,介绍源代码与机器代码、编译器、VS Code 环境、C 语言基本语法(printf、变量、条件、循环、函数)、Linux 命令行操作,最后通过实际案例展示整数溢出和浮点精度等计算机局限性。 核心思想:上周的概念完全不变,只是语法变了。
本讲围绕 C 语言中的 数组 展开,揭示了字符串本质上是字符数组。内容包括:常见 bug 类型与调试工具(printf、debug50、橡皮鸭)、编译的四个阶段(预处理、编译、汇编、链接)、数组的声明与使用、字符串的底层实现(NUL 结尾)、命令行参数(argc/argv)、退出状态码,以及凯撒密码等加密思想。
本讲围绕算法设计与效率分析展开:通过课堂人数统计、储物柜搜索等实例引入线性搜索与二分搜索,正式讲解大O、Ω、Θ渐近符号;随后介绍选择排序、冒泡排序与归并排序,并用递归实现马里奥金字塔;最后通过可视化对比各算法运行时间,强调算法设计对效率的决定性影响。
本周 “拆掉CS50库的训练轮” ,深入计算机内存底层:从像素与十六进制讲起,引入指针、地址、 & 与 * 运算符;揭示字符串本质是 char* ;通过 swap、字符串复制、Valgrind、堆栈溢出等示例讲解内存管理与常见错误;最后介绍文件 I/O,实现持久化存储和文件复制,为后续图像滤镜项目做铺垫。
本讲是C语言部分的最后一课,聚焦数据结构。介绍抽象数据类型(队列、栈、字典),深入讲解数组动态扩容(malloc/realloc)、链表、二叉搜索树、哈希表和Trie,分析各种结构的运行时间与空间权衡,并通过实际案例说明数据结构在真实世界中的应用,为下周Python和问题集5(拼写检查器)做铺垫。
本讲从C语言过渡到Python,展示Python的简洁语法与高级抽象:无需编译、无指针、内置数据结构、异常处理等。通过重写拼写检查器和图像滤镜,对比了开发效率与运行性能的取舍,并演示了第三方库的安装与使用。
本讲介绍SQL(结构化查询语言),一种声明式编程语言,用于高效地存储和查询数据。通过Google表单收集真实数据,演示了从CSV文件到SQLite数据库的完整流程,涵盖CRUD操作、关系数据库设计、JOIN查询、索引优化,以及SQL注入和竞争条件等安全问题。
本讲通过 ”AI vs 真实” 互动游戏引入人工智能主题,讲解CS50 Duck背后的提示工程、AI辅助编程(Copilot),并系统介绍机器学习、强化学习、神经网络与大语言模型的基本原理,最后以一首诗提醒AI并非完美。
本节课从互联网底层原理讲起(IP、TCP、DNS、DHCP、HTTP),然后系统介绍Web前端三大语言:HTML(结构)、CSS(样式)、JavaScript(交互)。通过大量现场演示,展示了如何用这些技术构建网页、实现搜索、表单验证、动态DOM操作等,为最终项目打下基础。
本讲是 CS50 的 Web 编程核心课,介绍如何使用 Python Flask 框架构建动态网站。从最简 Flask 应用出发,逐步讲解路由、模板(Jinja)、GET/POST 方法、表单处理、模板继承、服务端验证、数据库集成(SQLite)、会话与 Cookies、MVC 模式,最终实现注册系统、购物车、搜索 API 等真实案例。 强调不要信任用户输入,并理解 HTTP 的无状态性及会话机制。
CS50 最后一课完整笔记:回顾课程历程,用两个「编程人」互动游戏演示抽象层次的重要性;介绍最终项目、黑客松与 CS50 Fair;通过猜词游戏和全班结课测验覆盖二进制、编译、指针、数据结构、SQL、HTTP 等核心考点;最后给出后续学习资源与工具建议。