Graduate Seminars

CSE 590d: Live Programming: Concepts and Applications, including Musical Performance The seminar addresses an “extreme” form of programming in which programs are edited while they are running. We consider a mix of issues: semantic, language-design, implementation, as well as applications, especially in musical improvisation and performance. Participants read/present/discuss papers, and try out systems. Most registered students will summarize and lead discussion on one or two papers or systems during the quarter.

Undergraduate Courses

CSE 331: Software Design And Implementation Explores concepts and techniques for design and construction of reliable and maintainable software systems in modern high-level languages: specifications; program structure and design; program-correctness approaches, including testing; and event-driven programming (e.g., graphical user interface). Prerequisite: a minimum grade of 2.0 in either CSE 123 or CSE 143.
CSE 341: Programming Languages Basic concepts of programming languages, including abstraction mechanisms, static and dynamic typing, scope, syntax vs. semantics, first-class function closures, and algebraic datatypes. Detailed study of functional programming and other paradigms. Cannot be taken for credit if credit received for CSE 413. Prerequisite: CSE 123 or CSE 143.
CSE 351: The Hardware/Software Interface Examines key computational abstraction levels below modern high-level languages; number representation, assembly language, introduction to C, memory management, the operating-system process model, high-level machine architecture including the memory hierarchy, and how high-level languages are implemented. Prerequisite: CSE 123 or CSE 143.
CSE 401: Introduction To Compiler Construction Fundamentals of compilers and interpreters; symbol tables; lexical analysis, syntax analysis, semantic analysis, code generation, and optimizations for general purpose programming languages. No credit to students who have taken CSE 413. Prerequisite: CSE 332; CSE 351.
CSE 403: Software Engineering Fundamentals of software engineering using a group project as the basic vehicle. Topics covered include the software crisis, managing complexity, requirements specification, architectural and detailed design, testing and analysis, software process, and tools and environments. Prerequisite: CSE 331; CSE 332.
CSE 413: Programming Languages & Their Implementation Basic concepts and implementation strategies for modern functional and object-oriented programming languages such as Scheme and Java. Intended for non-majors. No credit to students who have completed CSE 341 or CSE 401. Prerequisite: CSE 373.

Professional (Evening) Courses

CSEP 501: Compiler Construction Principles and practice of building efficient implementations of modern programming languages. Lexical, syntactic, and semantic analysis of programs. Intermediate program representations. Intra- and interprocedural analysis and optimization. Run-time system techniques. Related programming environment facilities such as source-level debuggers and profilers. Prerequisite: CSE majors only.
CSEP 503: Principles Of Software Engineering

Study of major developments in software engineering over the past three decades. Topics may include design (information hiding, layering, open implementations), requirements specification (informal and formal approaches), quality assurance (testing, verification and analysis, inspections), reverse and re-engineering (tools, models, approaches). Prerequisite: CSE majors only.

CSEP 504: Advanced Topics In Software Systems Topics include software architecture, software tools, programming language analysis, type systems, formal reasoning, and other pertinent topics in software engineering and programming languages research.
CSEP 505: Programming Languages A study of non-imperative programming paradigms such as functional, object-oriented, logic, and constraint programming. Programming language semantics and type theory. Prerequisite: CSE majors only.

Graduate Courses

CSE 501: Programming Language Analysis And Implementation Design and implementation of compilers and run-time systems for imperative, object-oriented, and functional languages. Intra- and interprocedural analyses and optimizations. Prerequisite: CSE major and CSE 341; recommended CSE 401.
CSE 503: Software Engineering Specification, implementation, and testing of large, multiperson, software systems. Topics include abstraction, information hiding, software development environments, and formal specifications. Prerequisite: CSE major and CSE 322, CSE 326, and CSE 378 or equivalents.
CSE 504: Advanced Topics In Software Engineering Topics vary but may include software design and evolution, formal methods, requirements specifications, software and system safety, reverse engineering, real-time software, metrics and measurement, programming environments, and verification and validation. Prerequisite: CSE major or permission of instructor.
CSE 505: Principles Of Programming Languages Design and formal semantics of modern programming languages, includes functional and object-oriented languages. Prerequisite: CSE major and CSE 341.
CSE 506: Advanced Topics In Programming Languages May include functional, object-oriented, parallel, and logic programming languages; semantics for languages of these kinds; type declaration, inference, and checking (including polymorphic types); implementation issues, such as compilation, lazy evaluation, combinators, parallelism, various optimization techniques. Implementation project required. Prerequisite: CSE major, CSE 501 which may be taken concurrently, and CSE 505.
CSE 507: Computer-Aided Reasoning for Software Covers theory, implementation, and applications of automated reasoning techniques, such as satisfiability solving, theorem proving, model checking, and abstract interpretation. Topics include concepts from mathematical logic and applications of automated reasoning to the design, construction, and analysis of softwar