The course is aimed at making the student familiar with the general concepts common to all programming languages so as to facilitate learning new languages. Language paradigms (i.e., logic, functional, procedural, object-oriented) are compared and implementation strategies are discussed.
BNF and context free grammars; Data visibility (i.e., lexical and dynamic scoping); Procedures and parameter passing techniques; Types, type checking and type equivalence; Functional programming paradigm: higher-order functions, recursive data structures, programming with recursion (i.e., without iteration); Logic programming paradigm: unification, generate and test; Programming with pointers in C.
There are three graded programming projects and textbook homework assignments.
- will be prepared to contribute to a rapidly changing field by acquiring a thorough grounding in the core principles and foundations of computer science (e.g., techniques of program design, creation, and testing; key aspects of computer hardware; algorithmic principles).
- will acquire a deeper understanding on (elective) topics of more specialized interest, and be able to critically review, assess, and communicate current developments in the field.
- will be prepared for the next step in their careers, for example, by having done a research project (for those headed to graduate school), a programming project (for those going into the software industry), or some sort of business plan (for those going into startups).