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 Princeton CS 126 – “General computer science” CS 333 – “Advanced programming techniques” Courses at Cornell CS 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 Models Auto-completion of words Theory of computation Design 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, searching Linked 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 algorithms Big-O notation Amortized runtime analysis Inductive proofs Correctness proofs Inductive 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 language Different 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…