A study of algorithms and the data structures on which they are based, with a focus on the analysis of their correctness and complexity in terms of running time and space. An introduction to the structure and function of computing machines. The concept that computing machines consist of layers of virtual machines is used as an organizing principle. Topics covered include information representation, automata, assembly language programming, register machines, microprogramming, conventional machines, and language processors. The theory, techniques, and technologies associated with the design, construction, and testing of software systems, particularly large software systems.
Students learn various approaches to functional decomposition and system architecture.
The tools used for building and testing software systems are explored, particularly in the context of open source software. The application of parallel programming and problem-solving techniques to solve computationally intensive problems in a variety of disciplines. Parallel computation invites new ways of thinking about problems, and is an increasingly important skill in corporate and research environments. Students will learn about programming paradigms used in parallel computation, about the organization of parallel systems, and about the application of programs and systems to solve problems in mathematics, physics, cryptography, and other areas. CS380 Theory of Computation A study of computability and uncomputability from a perspective which views the problems we are to solve as formal languages.