Washington University in St. LouisWebsiteAcademic Catalog
Computer Science & EngineeringDepartment Website
BS Degree in Computer Sciencesource 1source 2
CS Courses
- Introduction to Computer ScienceCSE 131 (3)introCSE 131: Introduction to Computer Science
An introduction to software concepts and implementation, emphasizing problem solving through abstraction and decomposition. Introduces processes and algorithms, procedural abstraction, data abstraction, encapsulation and object-oriented programming. Recursion, iteration and simple data structures are covered. Concepts and skills are mastered through programming projects, many of which employ graphics to enhance conceptual understanding. Java, an object-oriented programming language, is the vehicle of exploration. Active-learning sessions are conducted in a studio setting in which students interact with each other and the professor to solve problems collaboratively.
- Introduction to Computer EngineeringCSE 132 (3)introCSE 132: Introduction to Computer Engineering
This course introduces students to fundamental concepts in the basic operation of computers, ranging from desktops and servers to microcontrollers and handheld devices. Subjects include digital and analog input/output, sensing the physical world, information representation, basic computer architecture and machine language, time-critical computation, machine-to-machine communication and protocol design. Students will use both desktop systems and handheld microcontrollers for laboratory experiments.
- Data Structures and AlgorithmsCSE 247 (3)algsCSE 247: Data Structures and Algorithms
Study of fundamental algorithms, data structures, and their effective use in a variety of applications. Emphasizes importance of data structure choice and implementation for obtaining the most efficient algorithm for solving a given problem. A key component of this course is worst-case asymptotic analysis, which provides a quick and simple method for determining the scalability and effectiveness of an algorithm. Online textbook purchase required.
- Object-Oriented Software Development LaboratoryCSE 332S (3)introCSE 332S: Object-Oriented Software Development Laboratory
Intensive focus on practical aspects of designing, implementing and debugging software, using object-oriented, procedural, and generic programming techniques. The course emphasizes familiarity and proficiency with a wide range of C++ language features through hands-on practice completing studio exercises and lab assignments, supplemented with readings and summary presentations for each session.
- Analysis of AlgorithmsCSE 347 (3)algsCSE 347: Analysis of Algorithms
This course introduces techniques for the mathematical analysis of algorithms, including randomized algorithms and non-worst-case analyses such as amortized and competitive analysis. It also introduces the standard paradigms of divide-and-conquer, greedy, and dynamic programming algorithms, as well as reductions, and it provides an introduction to the study of intractability and techniques to determine when good algorithms cannot be designed.
- Introduction to Systems SoftwareCSE 361S (3)sysCSE 361S: Introduction to Systems Software
This course is an introduction to the hardware and software foundations of computer processing systems. The course provides a programmer's perspective of how computer systems execute programs and store information. The course material aims to enable students to become more effective programmers, especially when dealing with issues of performance, portability and robustness. It also serves as a foundation for other system courses (e.g., those involving compilers, networks, and operating systems), where a deeper understanding of systems-level issues is required. Topics covered include machine-level code and its generation by optimizing compilers, performance evaluation and optimization, computer arithmetic, memory organization and management, and supporting concurrent computation.
- MethodsIntroduction to Human-Centered DesignorCSE 256A (3)humansCSE 256A: Introduction to Human-Centered Design
This course provides an introduction to human-centered design through a series of small user interface development projects covering information foraging, learnability, and problem solving. Projects will begin with reviewing a relevant model of human behavior. Each project will then provide an opportunity to explore how to apply that model in the design of a new user interface.
AI and SocietyorCSE 411A (3)impactCSE 411A: AI and SocietyAI has made increasing inroads in a broad array of applications, many that have socially significant implications. This course will study a number of such applications, focusing on issues such as AI used for social good, fairness and accountability of AI, and potential security implications of AI systems.
Introduction to Artificial IntelligenceorCSE 412A (3)aiCSE 412A: Introduction to Artificial IntelligenceThe discipline of artificial intelligence (AI) is concerned with building systems that think and act like humans or rationally on some absolute scale. This course is an introduction to the field, with special emphasis on sound modern methods. The topics include knowledge representation, problem solving via search, game playing, logical and probabilistic reasoning, planning, dynamic programming, and reinforcement learning. Programming exercises concretize the key methods. The course targets graduate students and advanced undergraduates. Evaluation is based on written and programming assignments, a midterm exam and a final exam.
Analysis of Network DataorCSE 416A (3)aiCSE 416A: Analysis of Network DataThis course examines complex systems through the eyes of a computer scientist. We will use the representative power of graphs to model networks of social, technological, or biological interactions. Network analysis provides many computational, algorithmic, and modeling challenges. We begin by studying graph theory, allowing us to quantify the structure and interactions of social and other networks. We will then explore how to practically analyze network data and how to reason about it through mathematical models of network structure and evolution. We will also investigate algorithms that extract basic properties of networks in order to find communities and infer node properties. Finally, we will study a range of applications including robustness and fragility of networks such as the internet, spreading processes used to study epidemiology or viral marketing, and the ranking of webpages based on the structure of the webgraph. This course combines concepts from computer science and applied mathematics to study networked systems using data mining.
Introduction to Machine LearningorCSE 417T (3)aiCSE 417T: Introduction to Machine LearningThe field of machine learning is concerned with the question of how to construct computer programs that automatically improve with experience. This course is a broad introduction to machine learning, covering the foundations of supervised learning and important supervised learning algorithms. Topics to be covered are the theory of generalization (including VC-dimension, the bias-variance tradeoff, validation, and regularization) and linear and non-linear learning models (including linear and logistic regression, decision trees, ensemble methods, neural networks, nearest-neighbor methods, and support vector machines.
Introduction to CryptographyorCSE 442T (3)mathCSE 442T: Introduction to CryptographyThis course is an introduction to modern cryptography, with an emphasis on its theoretical foundations. Topics will include one-way functions, pseudorandom generators, public key encryption, digital signatures, and zero-knowledge proofs.
Introduction to VisualizationororCSE 457A (3)graphicsCSE 457A: Introduction to VisualizationDisciplines such as medicine, business, science, and government are producing enormous amounts of data with increasing volume and complexity. In this course, students will study the principles for transforming abstract data into useful information visualizations.
- SystemsOperating Systems OrganizationorCSE 422S (3)sysCSE 422S: Operating Systems Organization
This course involves a hands-on exploration of core OS abstractions, mechanisms and policies in the context of the Linux kernel. Readings, lecture material, studio exercises, and lab assignments are closely integrated in an active-learning environment in which students gain experience and proficiency writing OS code, as well as tracing and evaluating OS operations via user-level programs and kernel-level monitoring tools. Topics include: system calls, interrupt handling, kernel modules, concurrency and synchronization, proportional and priority-based scheduling of processes and threads, I/O facilities, memory management, virtual memory, device management, and file system organization.
Programming Systems and LanguagesorCSE 425S (3)plsCSE 425S: Programming Systems and LanguagesA systematic study of the principles, concepts and mechanisms of computer programming languages: their syntax, semantics and pragmatics; the processing and interpretation of computer programs; programming paradigms; and language design. Illustrative examples are selected from a variety of programming language paradigms.
Translation of Computer LanguagesorCSE 431S (3)plsCSE 431S: Translation of Computer LanguagesThe theory of language recognition and translation is introduced in support of compiler construction for modern programming languages. Topics include syntactic and semantic analysis, symbol table management, code generation, and runtime libraries. A variety of parsing methods is covered, including top-down and bottom-up. Machine problems culminate in the course project, for which students construct a working compiler.
Introduction to Computer SecurityorCSE 433S (3)sysCSE 433S: Introduction to Computer SecuritySecure computing requires the secure design, implementation, and use of systems and algorithms across many areas of computer science. Fundamentals of secure computing such as trust models and cryptography will lay the groundwork for studying key topics in the security of systems, networking, web design, machine learning algorithms, mobile applications, and physical devices.
Reverse Engineering and Malware AnalysisorCSE 434S (3)sysCSE 434S: Reverse Engineering and Malware AnalysisThis course will focus on reverse engineering and malware analysis techniques. Reverse engineering -- the process of deconstructing an object to reveal its design and architecture -- is an essential skill in the information security community. Although hackers often use reverse engineering tools to discover and exploit vulnerabilities, security analysts and researchers must use reverse engineering techniques to find what a specific malware does, how it does it, and how it got into the system.
Introduction to Computer NetworksCSE 473S (3)sysCSE 473S: Introduction to Computer NetworksA broad overview of computer networking. Topics include history, protocols, Hyper Text Transfer Protocol (HTTP), File Transfer Protocol (FTP), Simple Mail Transfer Protocol (SMTP), Domain Name System (DNS), peer-to-peer (P2P), transport layer design issues, transport layer protocols, Transmission Control Protocol (TCP), User Datagram Protocol (UDP), TCP congestion control, network layer, Internet Protocol version 4 (IPv4), Internet Control Message Protocol (ICMP), Internet Protocol version 6 (IPv6), routing algorithms, routing protocols, Open Shortest Path First (OSPF), Routing Information Protocol (RIP), Border Gateway Protocol (BGP), datalink layer and local area networks carrier sense multiple access with collision detection (CSMA/CD), Ethernet, virtual local area networks (VLANs), Point-to-Point Protocol (PPP), Multi-Protocol Label Switching, wireless and mobile networks, multimedia networking, security in computer networks, cryptography, and network management.
- 5 × CS Electives
Math/Stat Courses
- Logic and Discrete MathematicsorCSE 240 (3)mathCSE 240: Logic and Discrete Mathematics
Introduces elements of logic and discrete mathematics that allow reasoning about computational structures and processes. Generally, the areas of discrete structures, proof techniques, probability and computational models are covered. Topics typically include propositional and predicate logic; sets, relations, functions and graphs; direct and indirect proof methods, induction and recursion; finite state machines and regular languages.
Foundations for Higher MathematicsMath 310 (3)mathMath 310: Foundations for Higher MathematicsIntroduction to the rigorous techniques used in more advanced mathematics. Topics include postpositional logic, use of quantifiers, set theory, methods of proof and disproof (counterexamples), foundations of mathematics. Use of these tools in the construction of number systems and in other areas such as elementary number theory, combinatorial arguments and elementary proofs in analysis.
- Calculus IIMath 132 (3)mathMath 132: Calculus II
Continuation of Math 131. A brief review of the definite integral and Fundamental Theorem of Calculus. Techniques of integration, applications of the integral, sequences and series, Taylor polynomials and series, and some material on differential equations.
- Matrix AlgebraorMath 309 (3)mathMath 309: Matrix Algebra
An introductory course in linear algebra that focuses on Euclidean n-space, matrices and related computations. Topics include: systems of linear equations, row reduction, matrix operations, determinants, linear independence, dimension, rank, change of basis, diagonalization, eigenvalues, eigenvectors, orthogonality, symmetric matrices, least square approximation, quadratic forms. Introduction to abstract vector spaces.
- Elementary to Intermediate Statistics and Data AnalysisororMath 3200 (3)mathMath 3200: Elementary to Intermediate Statistics and Data Analysis
An introduction to probability and statistics. Major topics include elementary probability, special distributions, experimental design, exploratory data analysis, estimation of mean and proportion, hypothesis testing and confidence, regression, and analysis of variance. Emphasis is placed on development of statistical reasoning, basic analytic skills, and critical thinking in empirical research studies. The use of the statistical software R is integrated into lectures and weekly assignments. Required for students pursuing a major or minor in mathematics or wishing to take 400-level or above statistics courses.
or
Engineering Courses
- Technical WritingEngr 310 (3)engrEngr 310: Technical Writing
Persistent concerns of grammar and style. Analysis and discussion of clear sentence and paragraph structure and of organization in complete technical documents. Guidelines for effective layout and graphics. Examples and exercises stressing audience analysis, graphic aids, editing and readability. Videotaped work in oral presentation of technical projects. Writing assignments include descriptions of mechanisms, process instructions, basic proposals, letters and memos, and a long formal report.
Science Courses
Other Courses
- 10 × Free Electives
History of the Major
2024 | Replace CS Elective → CSE 361S (Introduction to Systems Software). Replace option ESE 318 (Engineering Mathematics A) → ESE 2180 (Linear Algebra and Component Analysis). Renumber MATH 3200/3211 → SDS 3200/3211. |
2023 | |
2022 | Replace Psych 300 (Introduction to Psychological Statistics) option → Math 3211 (Statistics for Data Science I). |
2021 | |
2020 | |
2019 | Renumber QBA 120/121 → DAT 120/121. |
2018 | |
2017 |