CSCI 2041
ADVANCED PROGRAMMING PRINCIPLES
What Comes Next
What once was
Some things we covered in this class:
More programming, in a new language
The process of evaluating / transforming programs
Reasoning about programs
Data structures using references (“mutable” types)
(a little) version control, using git
Modularity and code reuse
Next classes and how they use these skills:
CSci 3081
- (For some) another new language, lots of coding
- More on design and reuse
- More on version control
- C++ data structures use references/pointers
- C++ templates are similar to functors
CSci 4011
- Simplified models of programs
- Proofs that problems cannot be solved by programs
- Reasoning about programs as inputs
- “compiling” programs into other kinds of problems
- Lots of recursion & induction
CSci 4271W
(Technically after 3081W)
- Developing Secure Software: evaluating, analyzing programs
CSci 4511W
- Artificial Intelligence : functional programming
CSci 5106
- Programming languages
- More about program evaluation, semantics
- Coding in SML, Prolog,…
CSci 5161
- Compilers! (You build one)
- Parsing, type checking, syntax trees → Code
- Coding in OCaml
CSci 5801/5802
- Software Engineering
- Code design, testing, requirements
- “specification” and “design” languages
Research?
- Profs. Lu & McCamant – security
- analyzing programs for vulnerabilities
- modifying them for protection
- Profs. Nadathur, Van Wyk, Favonia, Heimdahl – PL
- automated proofs about programs
- designing new hybrid programming languages
- software verification
- Profs. Zhai and Yew – architecture
- compilers for new hardware
- languages for hardware design