2. Survey of CC2001/CS2008 Usage
• Developed survey to gather data for CS2013
– Reviews usage of CC2001 and CS2008
– Rating of importance of existing knowledge areas
– Rating of principles (e.g., importance of stylized classes)
– Suggestions for new topics of import/knowledge areas
• Survey released in December, 2010
– ~1500 US department chairs/directors of UG education
– ~2000 International department chairs
– Received 201 responses
5. Bounding Size of Curriculum
CC2001 CS2008 CS2013
Tier 1 Tier 2
AL. Algorithms and Complexity 31 31 20 8
AR. Architecture and Organization 36 36 0 16
CN. Computational Science 0 0 1 0
DS. Discrete Structures 43 43 38 3
GV. Graphics and Visual Computing 3 3 2 1
HC. Human-Computer Interaction 8 8 4 4
IAS. Security and Information Assurance 0 0 2 6
IM. Information Management 10 11 5 5
IS. Intelligent Systems 10 10 0 10
NC. Networking and Communication 15 15 10 0
OS. Operating Systems 18 18 4 11
PBD. Platform-based Development 0 0 0 0
PD. Parallel and Distributed Computing 0 0 5.5 8.5
PL. Programming Languages 21 21 8 20
SDF. Software Development Fundamentals 38 47 41 0
SE. Software Engineering 31 31 5 19
SF. System Fundamentals 0 0 21 9
SP. Social and Professional Issues 16 16 6 10
TOTAL 280 290 172.5 130.5
Tier1 + 100% Tier2: 303
Tier1 + 90% Tier2: 290
Tier1 + 80% Tier2: 277
6. Body of Knowledge Update (1)
• Addition of new Knowledge Areas
– Parallel and Distributed Computing
• Most important area to add as indicated by previous feedback
• Will include additional core hours
– Information Assurance and Security
• Second most important area to add
• Will include additional core hours
– Systems Fundamentals
• Cross-cutting systems concepts
– E.g., caching, locality, latency, parallelism
• Avoid tying these to any one topic (e.g. Operating Systems,
Architecture) to foster broader thinking and new pedagogy
– Platform-based Development
• E.g., web, mobile devices, game consoles, robots, etc.
7. Body of Knowledge Update (2)
• Reorganization of topics in many Knowledge Areas
– Net-Centric Computing Networking and Communications
• Sharpen focus on networking
• Web development moves to “Platform-based Development”
– Notably, includes a reworking of topics in Programming
Fundamentals, Programming Languages, and Algorithms
• Move paradigm-specific concepts (e.g., OOP, Functional) to
Programming Languages
• Programming Fundamentals + some Software Engineering = “Software
Development Fundamentals”
• Seek to broaden thinking away from equating “Programming
Fundamentals” with “Introductory Programming Courses”
– Introductory programming course includes:
platform + language/paradigm + software development
8. CMU 计算机本科教学
CMU Computer Science Core:
15-122 Principles of Imperative Computation
15-150 Principles of Functional Programming
15-210 Parallel and Sequential Data Structures and Algorithms
15-213 Introduction to Computer Systems
15-251 Great Theoretical Ideas in Computer Science
15-451 Algorithm Design and Analysis
9. CMU 计算机本科教学
One Algorithms & Complexity elective:
15-354 Computational Discrete Mathematics
15-355 Modern Computer Algebra
15-453 Formal Languages and Automata
21-301 Combinatorics
21-484 Graph Theory
10. CMU 计算机本科教学
One Applications elective:
05-391 Designing Human-Centered Software
05-431 Software Structures for User Interfaces
10-601 Machine Learning
11-411 Natural Language Processing
15-313 Foundations of Software Engineering
15-322/15-323 Intro to Computer Music
15-381 Artificial Intelligence: Representation and Problem Solving
15-384 Robotic Manipulation
15-385 Computer Vision
15-415 Database Applications
15-462 Computer Graphics
11. CMU 计算机本科教学
One Logics and Languages elective:
15-312 Foundations of Programming Languages
15-317 Constructive Logic
15-414 Bug Catching: Automated Program Verification and
Testing
21-300 Basic Logic
80-311 Computability and Incompleteness
12. CMU 计算机本科教学
One Software Systems elective:
15-410 Operating System Design and Implementation
15-411 Compiler Design
15-418 Parallel Computer Architecture and Programming
15-440 Distributed Systems
15-441 Computer Networks
16. Great Theoretical Ideas in Computer Science
• How to use theoretical ideas to
– formulate and solve problems in computer science
• Integrate
– mathematical material with general problem solving
techniques
– and computer science applications
• Examples are drawn from
– Algorithms, Complexity Theory, Automata Theory,
– Game Theory, Probability Theory, Graph Theory,
– Algebra, Cryptography, and Combinatorics
• Assignments involve
– both mathematical proofs and programming
17. Great Theoretical Ideas in Computer Science
• Number
– Pancakes with a Problem!
– Choose Your Representation!
– Unary, Binary, and Beyond
– One Step at a Time: Induction
– On Raising a Number to a Power
– Euclid's Great Recursive Algorithm for GCD
– Fibonacci Numbers: An Unexpected Formula
– Modular Arithmetic and the RSA Cryptosystem
18. Great Theoretical Ideas in Computer Science
• Counting:
– Counting I: One To One Correspondence and Choice
Tree Representation
– Counting II: Recurring Problems and Correspondences
– Counting III: Polynomials Count! Pascal's Triangle
19. Great Theoretical Ideas in Computer Science
• Computation:
– The One Minute to Learn Programming Language:
Finite Automata
– Playing Symbol Games: Logic, Language, and Meaning
– On Time versus Input Size
– Problem Solving: The Method behind the AHA!
– Grade School Revisited: How to Add and Multiply
– Grade School Again: A Parallel Perspective
20. Great Theoretical Ideas in Computer Science
• Probability Methods
– Probability I: Counting in Terms of Proportions
– Probability II: Probability Pitfalls and Paradoxes
– Counting, Naming, and Worst-Case Compression
– Dating Theory: Who Wins the Battle of the Sexes?
– Probability III: Random Variables and Great
Expectations!
– Probability IV: Event Space in an Infinite Choice Tree
– Probability V: Random Walks.
21. Great Theoretical Ideas in Computer Science
• Computational Theory
– Thales's Legacy: What is a Proof?
– Cantor's Legacy: Infinity and Diagonalization.
– Turing's Legacy: The Limits of Computation
– Godel's Legacy: The Limits of the Symbol Game
– Ancient Paradoxes with an Incompressible Resolution
24. 计算机系统工程
• 大量的经典论文阅读
2. Worse is Better
3. A Fast File System for UNIX
4. The X Window System
5. The Evolution of an x86 Virtual Machine Monitor
6. End-to-end Arguments in System Design
7. MapReduce
8. The Design and Implementation of a Log-Structured
File System
9. RAID: A Case for Redundant Arrays of Inexpensive
Disks
10.Hints of Computer System Design
25. 计算机系统工程
• 设计类 project
– tagged file system
– 设计类 google-doc 系统
• Lab
– The UNIX File System (practice file system related
commands)
– The UNIX Time-Sharing System (practice other
shell commands)
– Internet Routes and Measuring Round Trip Times
(traceroute)
– MapReduce
26. Stanford 计算机本科核心课程
Systems
cs106B Programming Abstractions
cs107 Computer Organization and Systems
Computer Systems: A Programmer‘s Perspective by Bryant and
O’Hallaron(CMU) . C Programming Language by Kernighan
cs110 Principles of Computer Systems
课本: Principles of Computer System Design by Jerome
H. Saltzer and M. Frans Kaashoek (MIT)
Theory
cs103 Mathematical Foundations of Computing
cs109 Intro to Probability for Computer Scientists
cs161 Data Structures and Algorithms
27. Berkeley 计算机本科核心课程
Core
CS 61A Structure and Interpretation of Computer Programs
CS61B Data Structures
CS61C Machine Structures
EECS42 Digital Electronics
Upper Division Required
CS 170 Algorithms
CS 162 Operating systems
28. Berkeley 计算机本科核心课程
Breadth courses choose two from the following:
CS 150 Digital Systems
CS 152 Computer Architecture
CS 160 User Interfaces
CS 161 Computer Security
CS 164 Languages and Compilers
CS 169 Software Engineering
CS 184 Computer Graphics
CS 186 Databases
CS 188 Artificial Intelligence
29. Utexas 的《计算机系统概念》
• Yale Patt , Introduction to Computing
Systems: from bits and gates to C and beyond.
• 美国计算机界的卓越泰斗,与 Knuth 齐名
35. Programming in C++
• Introduction
– Computers, People, and Programming
• Programming and “Hello, Word!”
• Objects, Types, and Values
• Computation
• Errors
• Writing a Program
• Completing a Program
• Technicalities: Functions, etc
• Technicalities: Classes, etc
36. Programming in C++
• Input/Output Streams
• Customizing I/O
• A Display Model
• Graphics Classes
• Graphics Class Design
• Graphing Functions and Data
• Graphical User Interfaces
37. Programming in C++
• Vector and Free Store
• Vectors and Arrays
• Vector, Template, and Exceptions
• Containers and Iterators
• Algorithms and Maps