Princeton 计算机科学专业
普林斯顿大学以优质而严苛的本科生教育闻名,计算机科学和人工智能之父图灵、现代计算机之父冯诺依曼都曾在普林斯顿大学求学和工作过。普林斯顿计算机专业对数学有着比较严格的要求。
课程说明
普林斯顿大学计算机专业课程分为基础课、必修课、选修课,学生需要学完所有基础课程,至少8门必修课以及至少3门选修课(必须是COS300开头或更高的COS课程,其中COS500为研究生课程)。
基础课包含数学类微积分(上、下)、线性代数以及工程导论,除此以外还需要学习计算机COS126(计算机科学:跨学科方法 )、COS217(编程系统导论)和COS226(算法与数据结构)以及COS340(现在改为COS240) 计算推理这四门课程必须在大三结束前学完。
和其他计算机专业一样,普林斯顿开始将计算机专业的必修课程分为4类:研究计算机硬件和软件设计的计算机系统、使用数学来严格发展研究领域的基础理论课、人工智能和机器学习以及比较宽泛的应用课程(比如函数式编程、图形学、信息安全、人机交互等)。
选课说明
从普林斯顿2023年课程安排来看,物理、化学等理科课程已经被排除在计算机专业之外,而以往的必修课人工智能和机器学习已经不再是必修,改为应用类的选修,2025年则又要求人工智能和机器学习为必修。2025年的学生需要从以下4类专业课程(计算机系统、人工智能与机器学习、理论课程、应用课程)中都选择一门课程作为必修,同时从这4类里要选择8门必修课,以及3门选修课(选修课也可以是COS500开头的研究生课)。
① 计算机系统
新版课程大纲明确推荐学习COS 316(计算机系统设计原理)或 COS 375(计算机体系结构和组织),而COS318、COS418、COS461为备选,这几门课其实都推荐大家学习。
- COS375 (Computer Architecture and Organization 计算机体系结构和组织)
- COS316 Principles of Computer System Design (计算机系统设计原理)
- COS318 (Operating Systems 操作系统)
- COS375 (ELE 375) Computer Architecture and Organization (计算机体系结构和组织)
- COS418 (Distributed Systems 分布式系统)
- COS461 (Computer Networks 计算机网络)
其中 COS320(汇编技术)、COS425(数据库与信息管理系统)不再做推荐选修的要求、COS333(高级编程技术)则被划分为应用类必修,
② 人工智能与机器学习
明确推荐COS324 (机器学习导论),以下课程为备选:
- COS 424 (Fundamentals of Machine Learning 机器学习基础)
- COS 429 (Computer Vision 计算机视觉)
- COS 484 (Natural Language Processing 自然语言处理)
③ 理论课程
其中 COS240(计算推理)被提到基础必修课里,所有计算机专业的学生必须在大三前学习这门课:
- COS423 (Theory of Algorithms 算法理论)
- COS433 (Cryptography 密码学)
- COS445 (Networks, Economics, and Computing 网络、经济学与计算)
- COS487 (Theory of Computation 计算理论)
④ 应用课程
- COS326 (Functional Programming 函数式编程)
- COS333 (Advanced Programming Techniques 高级编程技术)
- COS343 (Algorithms for Computational Biology 计算生物学的算法)
- COS426 (Computer Graphics 计算机图形学)
- COS432 (Information Security 信息安全)
- COS436 (Human-Computer Interface Technology 人机界面技术)
- COS448 (Innovating across Technology, Business, and Markets 技术、商业和市场创新)
计算机专业学习目标
计算机科学专业的主要学习目标如下:
- 学生将能够理解、修改、调试、重构和分析各种不同编程语言的程序;
- 学生将能够学习未来遇到的新的编程语言和计算范例;
- 学生将能够阅读和理解计算机科学领域的技术文献;
- 学生将能够在自己选择的计算机科学领域计划并完成一个或两个学期的项目;
- 学生将能够识别、隔离和解决重要的技术子问题,从而解决更重要的问题;
- 学生将能够以口头和书面形式清晰地表达计算机科学的技术思想;
- 学生将能够识别和评估其学习领域的相关工作;
- 学生将表现出独立工作来实现上述所有目标的能力。
推荐学习课程
① COS126 计算机科学:跨学科方法
在科学、工程和商业应用的背景下介绍计算机科学。本课程的目标是讲解计算机科学的基本原理和如何解决实际问题,同时帮助学生有效地使用计算机在计算机科学、物理、生物、化学、工程和其他学科中的应用。所涉及的主题包括:计算机硬件和软件系统;用Java编程;算法和数据结构;计算的基本原理;科学计算,包括模拟、优化和数据分析。
先修课程: 零基础可学,无先修课程
学习地址: COS126 计算机科学:跨学科方法
② COS217 编程系统导论
主要包括模块化编程、高级程序设计、编程风格、测试、调试和性能调优;机器语言和汇编语言;和使用系统调用服务。
先修课程: COS126 计算机科学:跨学科方法
学习地址: COS217 编程系统导论
③ COS226 算法和数据结构
本课程调查当今计算机上使用的最重要的算法和数据结构。特别强调用于排序、搜索和字符串处理的算法。还涵盖了许多其他领域的基本算法,包括几何算法、图形算法和一些数值算法。
先修课程: COS126 计算机科学:跨学科方法
学习地址: COS226 算法和数据结构
④ COS240 计算推理
介绍与计算机科学相关的数学主题。组合数学、概率和图论将在计算机科学应用的背景下进行介绍。本课程将介绍一种计算机科学方法来思考和建模。将向学生介绍从高效计算的世界观中产生的基本概念,例如 NP 完整性和密码学。
先修课程: COS126 计算机科学:跨学科方法、COS226 算法和数据结构 以及 线性代数
学习地址: COS240 计算推理
⑤ COS316 计算机系统设计原理
本课程教授学生计算机系统的设计、实现和评估,包括操作系统、网络和分布式系统。该课程将教授学生评估性能并研究现有系统的设计选择。学生还将学习支持模块化、性能和安全性设计目标的通用系统概念。学生将应用在讲座和阅读中学到的材料来设计、构建和评估新的系统组件。
先修课程: COS217 编程系统导论、COS226 算法和数据结构
学习地址: COS316 计算机系统设计原理
⑥ COS318 操作系统
操作系统的设计和分析的研究。主题包括:进程、互斥、同步、信号量、监视器、死锁预防和检测、内存管理、虚拟内存、处理器调度、磁盘管理、文件系统、安全、保护、分布式系统。
先修课程: COS217 编程系统导论、COS226 算法和数据结构
学习地址: COS318 操作系统
⑦ COS320 编译技术
了解编译器的设计和构造。概念包括语法分析、语义、代码生成、优化和运行时系统。将研究命令式语言(如 C)、函数式语言(如 ML)和面向对象语言(如 Java)的编译。学生将为一种小语言实现一个完整的编译器。
先修课程: COS217 编程系统导论、COS226 算法和数据结构
学习地址: COS318 操作系统
⑧ COS326 函数式编程
类型化函数式编程原理的介绍。对结构化数据类型的递归函数进行编程,并通过归纳这些函数的正确性进行非正式推理。函数式算法和数据结构。模块化编程、类型抽象、表示不变量和表示独立性的原则。并行函数式编程、算法和应用。
先修课程: COS226 算法和数据结构
学习地址: COS326 函数式编程
⑨ COS333 高级编程技术
这是一门关于编程实践的课程。编程不仅仅是写代码。程序员还必须权衡利弊,在备选设计方案中进行选择,调试和测试,提高性能,并维护自己和他人编写的软件。同时,他们必须在满足规范的同时关注兼容性、稳健性和可靠性。学生将有机会通过编写自己的代码和参加小组项目来培养这些技能。
先修课程: COS217 编程系统导论、COS226 算法和数据结构
学习地址: COS333 高级编程技术
⑩ COS375 计算机体系结构和组织
计算机体系结构和组织简介。指令集设计;基本的处理器实现技术;绩效管理;缓存和虚拟内存;流水线处理器设计;成本、性能和复杂性之间的设计权衡。
先修课程: COS217 编程系统导论
学习地址: COS375 计算机体系结构和组织
⑪ COS418 分布式系统
本课程涵盖分布式系统的设计和实现。学生将了解现代、可靠和高性能分布式系统设计背后的原则和技术。主题包括服务器设计、网络编程、命名、并发和锁定、一致性模型和技术、安全和容错。一些最大的互联网站点(例如,谷歌、Facebook、亚马逊)采用的现代技术和系统也将包括在内。
先修课程: COS217 编程系统导论、COS318 操作系统、COS333 高级编程技术
学习地址: COS418 分布式系统
⑫ COS423 算法导论
设计和分析高效的数据结构和算法。构建和分析算法的一般技术。NP完全性简介。
先修课程: COS226 算法和数据结构、 COS240 计算推理
学习地址: COS423 算法导论
⑬ COS425 数据库和信息管理系统
用于访问和管理半结构化信息(例如,Web 信息库)的数据库系统和系统的理论和实践方面。主题包括:关系和 XML 模型、存储和索引结构、查询表达式和评估、并发和事务管理、搜索有效性。
先修课程: COS217 编程系统导论、COS226 算法和数据结构
学习地址: COS425 数据库和信息管理系统
⑭ COS432 信息安全
计算、通信和电子商务中的安全问题。目标和弱点;法律和道德问题;基本密码学;私人和经过身份验证的通信;电子商务; 软件安全;病毒和其他恶意代码;操作系统保护;可信系统设计;网络安全; 防火墙;政策、行政和程序;审计;人身安全;灾难恢复; 可靠性; 内容保护;隐私。
先修课程: COS217 编程系统导论、COS226 算法和数据结构
学习地址: COS432 信息安全
⑮ COS461 - 计算机网络
本课程研究计算机网络以及在其上运行的应用程序和服务。该课程涵盖网络概念,包括:分组交换;互联网路由和业务关系;IPv4 和 IPv6 寻址;域名系统(DNS)、路由器、交换机和中间盒设计;网络安全; 内容分发网络;无线网络; 和网络应用程序,例如流媒体视频。该课程还将包括几个编程任务,从客户端-服务器编程到网络测量、分析和推理
先修课程: COS217 编程系统导论
学习地址: COS461 - 计算机网络
推荐选修
① COS426 计算机图形学
计算机图形学导论。主题包括图像合成、3D 建模、图像处理和动画。鼓励亲身体验。
先修课程: COS217 编程系统导论、COS226 算法和数据结构
学习地址: COS426 计算机图形学
② COS433 密码学
计算机图形学导论。主题包括图像合成、3D 建模、图像处理和动画。鼓励亲身体验。
先修课程: COS226 算法和数据结构
学习地址: COS433 密码学
③ COS436 人机交互
创造适合人们日常生活的技术不仅仅涉及拥有技术上复杂的算法、系统和基础设施。它涉及了解人们如何思考和行为以及如何使用这些信息。设计面向用户的界面,以增强和增强人类的能力。您将了解人机交互领域以及指导对人进行研究的工具、技术和原则。设计和实施面向用户的系统,为用户带来欢乐而不是挫败感,并在涉及创建交互系统的为期一学期的小组项目中将这些技能付诸实践。
先修课程: COS217 编程系统导论
学习地址: COS436 人机交互