introductory computer science courses past experiences & thoughts haakon ringberg, thomson...
TRANSCRIPT
Introductory Computer Science Courses
Past experiences & thoughts
Haakon Ringberg,Thomson Research Paris& Princeton University
2006/12/21Introductory CS Courses: Experiences and Thoughts
2
Overview
Courses at PrincetonCS 126 – “General computer science”
CS 333 – “Advanced programming techniques”
Courses at CornellCS 211 – “Computers and programming”
CS 312 – has had too many names…
Opinions & Conclusion
2006/12/21Introductory CS Courses: Experiences and Thoughts
3
Princeton CS 126: concepts
First required programming course Also an engineering requirement
Taught in Java Does not teach OOP
Basic aspects of programming Functions, recursion, sorting, searching,
linked lists, stacks & queues, symbol tables Broad overview of CS subfields
Analysis of algorithms, architecture, theory of computation, universality, computability, circuits, cryptography
2006/12/21Introductory CS Courses: Experiences and Thoughts
4
Princeton CS 126: projects
N-body simulation Calculate acceleration, velocity, pos Calling a graphics library
Recursive graphics Think Sierpinski triangles
DNA sequence algorithm Dynamic programming approach
Digital signal processing Create data types for waves
2006/12/21Introductory CS Courses: Experiences and Thoughts
5
Princeton CS 126: projects
Traveling salesperson problem (NP-complete)Point DT, heuristics for next step
Markov ModelsAuto-completion of words
Theory of computationDesign Turing machine for integer
comparison
2006/12/21Introductory CS Courses: Experiences and Thoughts
6
Princeton CS 333: concepts
“Advanced Programming Techniques” is optional Brain-child of Brian Kernighan
Overview of many languages shell, awk, yacc & lex, perl, HTTP, PHP,
javascript, CSS, XML, Ajax, C++, Java, etc Languages are tools; use the right one for
the task Large half-semester project
Web-based, three-tiered architecture “Real world feel:” design docs, CVS, MySQL
2006/12/21Introductory CS Courses: Experiences and Thoughts
7
Cornell CS 211: concepts
Second required programming course Taught in Java
OOP principles Basic algorithms & data structures
Sorting, searchingLinked lists, trees, graphs
Basic specifications Basic analysis of algorithms
2006/12/21Introductory CS Courses: Experiences and Thoughts
8
Cornell CS 211: projects
Interfaces ADT stacks & queues Exceptions on improper input
Web reachability Implement ADT set, two enumerators Algorithm to find reachable URL set
Loop invariants Preconditions, postconditions, invariants
Arbitrary sized integers Any base Linked lists
2006/12/21Introductory CS Courses: Experiences and Thoughts
9
Cornell CS 312: concepts
Third and final programming course Taught in SML
Covers most salient SML features Software engineering fundamentals
Modularization, testing, documentation, representation invariants, etc
More algorithms & data structures Hash maps, red-black trees, splay trees,
LRU tries, binary heaps, B-trees, Dijkstra’s, BFS, DFS, A*, etc
2006/12/21Introductory CS Courses: Experiences and Thoughts
10
CS 312: PL concepts
Garbage collection (copying, mark & sweep, reference counting)
Substitution and environment models Typing (strength, checking, inference,
unification) Tail recursion
2006/12/21Introductory CS Courses: Experiences and Thoughts
11
CS 312: theory
Analysis of algorithmsBig-O notationAmortized runtime analysisInductive proofs
Correctness proofsInductive proofs
2006/12/21Introductory CS Courses: Experiences and Thoughts
12
CS 312: and more…
Basic theory of computation RE/DFA/NFA
Huffman coding Concurrency Locality Continuations “Taking 312 is like trying to drink from a fire
hydrant” – Professor Andrew Myers
2006/12/21Introductory CS Courses: Experiences and Thoughts
13
Cornell CS 312: projects
“Specification and Testing” Implement ADT specifications (tries and arbitrary
sized integers) Representation invariants (repOK) Black-box testing
Lazy streams RSA cipher as a stream operation LZ compression as a stream operation
• Resizable arrays & dictionaries Single-step evaluator of Robot Control Language
Robot design Memory synchronization Garbage collection
2006/12/21Introductory CS Courses: Experiences and Thoughts
14
Cornell CS 312: projects
λ-game – final project Specifications
• Design of “world” resistant to spec change
Use of RCL interpreter Robot programming
Sub-problems to projects Specification writing Associated correctness proofs Complexity analysis
2006/12/21Introductory CS Courses: Experiences and Thoughts
15
Opinions
Choice of languageDifferent paradigms, pick up fast,
teach its highlights Algorithm design Software engineering
Rep invariants, abstraction functions Analysis of algorithms Inductive correctness proofs
Thank you!
Questions are welcome…