Foundations of Software Design
Three hours of lecture, one hour of programming laboratory per week. Introduction to programming paradigms, including object-oriented design. Introduction to design and analysis of algorithms, including algorithms for sorting and searching. Analysis, use, and implementation of data structures important for information processing systems, including arrays, lists, strings, b-trees, and hash tables. Introduction to formal languages including regular expressions and context-free grammars.