160 likes | 353 Views
Introductory Computer Science Courses. Past experiences & thoughts. Haakon Ringberg, Thomson Research Paris & Princeton University. Overview. Courses at Princeton CS 126 – “General computer science” CS 333 – “Advanced programming techniques” Courses at Cornell
E N D
Introductory Computer Science Courses Past experiences & thoughts Haakon Ringberg,Thomson Research Paris& Princeton University
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 Introductory CS Courses: Experiences and Thoughts
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 Introductory CS Courses: Experiences and Thoughts
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 Introductory CS Courses: Experiences and Thoughts
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 Introductory CS Courses: Experiences and Thoughts
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 Introductory CS Courses: Experiences and Thoughts
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 Introductory CS Courses: Experiences and Thoughts
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 Introductory CS Courses: Experiences and Thoughts
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 Introductory CS Courses: Experiences and Thoughts
CS 312: PL concepts • Garbage collection (copying, mark & sweep, reference counting) • Substitution and environment models • Typing (strength, checking, inference, unification) • Tail recursion Introductory CS Courses: Experiences and Thoughts
CS 312: theory • Analysis of algorithms • Big-O notation • Amortized runtime analysis • Inductive proofs • Correctness proofs • Inductive proofs Introductory CS Courses: Experiences and Thoughts
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 Introductory CS Courses: Experiences and Thoughts
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 Introductory CS Courses: Experiences and Thoughts
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 Introductory CS Courses: Experiences and Thoughts
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 Introductory CS Courses: Experiences and Thoughts
Thank you! Questions are welcome…