Skip to main content

Undergraduate Courses

On this page you will find descriptions of the courses that we offer. See the registrar's schedule of current and upcoming offerings (with times). For future semesters, students may view our projected teaching plan. Students may also look at the current semester's course homepages. Students can also look at our list of concentration areas to choose their CS electives. Advanced undergraduates may also receive permission to take graduate courses. Finally, for an explanation of how UT numbers courses work.

Teaching Plans

Please visit the teaching plans website for a list of courses that the CS Department plans to offer in the current and upcoming semesters. We will add new semesters when their offerings are confirmed. This information is for reference only and is subject to change. Please consult the online Registrar's Course Schedule for official information and details, including class times and locations.

Core Courses for CS Majors

Programming

First part of a two-part sequence in Java programming. Fundamental concepts of structured programming; procedures and data structures with a focus on problem solving strategies and implementation; introduction to concepts of informal specification, informal reasoning about program behavior, debugging, and ad hoc testing. Three lecture hours and one discussion hour a week for one semester. Only one of the following courses may be counted: Computer Science 303E, 305J, 312, 312H. Credit for Computer Science 312 may not be earned after a student has received credit for Computer Science 314 or 314H. Prerequisite: Credit with a grade of at least C- or registration for Mathematics 408C, 408K, or 408N.

Restricted to computer science majors. First part of a two-part sequence in Java programming. Fundamental concepts of structured programming; procedures and data structures with a focus on problem solving strategies and implementation; introduction to concepts of informal specification, informal reasoning about program behavior, debugging, and ad hoc testing. Three lecture hours and one discussion hour a week for one semester. Only one of the following courses may be counted: Computer Science 303E, 305J, 312, 312H. Credit for Computer Science 312H may not be earned after a student has received credit for Computer Science 314 or 314H. Prerequisite: Credit with a grade of at least C- or registration for Mathematics 305G, or a passing score on the College of Natural Sciences mathematics placement examination; and consent of the honors director.

Second part of a two-part sequence in Java programming. Introduction to specifications, simple unity testing, and debugging; building and using canonical data structures; algorithm analysis and reasoning techniques such as assertions and invariants. Three lecture hours and one discussion hour a week for one semester. Only one of the following may be counted: Computer Science 307, 314, 314H, 315, 315H. Prerequisite: Computer Science 312 or 312H with a grade of at least C-

Second part of a two-part sequence in Java programming. Introduction to specifications, simple unity testing, and debugging; building and using canonical data structures; algorithm analysis and reasoning techniques such as assertions and invariants. Three lecture hours and one discussion hour a week for one semester. Only one of the following may be counted: Computer Science 307, 314, 314H, 315, and 315H. Prerequisite: Computer Science 312 or 312H with a grade of at least C-.

Systems

Restricted to computer science majors. An introduction to low-level computer design ranging from the basics of digital design to the hardware/software interface for application programs. Includes basic systems principles of pipelining and caching, and requires writing and understanding programs at multiple levels. Four lecture hours and two laboratory hours a week for one semester. Only one of the following may be counted: Computer Science 310, 310H, 429, 429H. Prerequisite: The following courses with a grade of at least C-: Computer Science 311 (or 313K) or 311H (or 313H); and Computer Science 314 (or 315) or 314H (or 315H).

Restricted to computer science majors. An introduction to low-level computer design ranging from the basics of digital design to the hardware/software interface for application programs. Includes basic systems principles of pipelining and caching, and requires writing and understanding programs at multiple levels. Four lecture hours and two laboratory hours a week for one semester. Only one of the following may be counted: Computer Science 310, 310H, 429, 429H. Prerequisite: The following coursework with a grade of at least C- in each: Computer Science 311, 311H, 313H, or 313K; Computer Science 314, 314H, 315, or 315H.

Restricted to computer science majors. An introduction to low-level software abstractions with an emphasis on the connection of these abstractions to underlying computer hardware. Key abstractions include threads, dynamic memory allocation, protection, and IO. Requires writing of synchronized multithreaded programs. Four lecture hours and two laboratory hours a week for one semester. Only one of the following may be counted: Computer Science 439, 439H, 352, 352H, 372, and 372H. Prerequisite: Computer Science 310, 310H, 429, or 429H with a grade of at least C-.

Restricted to computer science majors. An introduction to low-level software abstractions with an emphasis on the connection of these abstractions to underlying computer hardware. Key abstractions include threads, dynamic memory allocation, protection, and IO. Requires writing of synchronized multi-threaded programs. Four lecture hours and two laboratory hours a week for one semester. Only one of the following may be counted: Computer Science 439, 439H, 352, 352H, 372, and 372H. Prerequisite: Computer Science 310, 310H, 429, or 429H with a grade of at least C-.

Theory

Restricted to computer science majors. A focus on discrete mathematical tools of fundamental importance to the working computer scientist. An emphasis is placed on using logical notation to express rigorous mathematical arguments. Subjects include proof by induction, introduction to graph theory, recurrences, sets, functions, and an introduction to program correctness. Three lecture hours a week for one semester. Only one of the following may be counted: Computer Science 311, 311H, 313H, 313K, 336, 336H. Prerequisite: The following coursework with a grade of at least C- in each: Computer Science 312 or 312H; and Mathematics 408C, 408K, or 408N, or registration for Mathematics 408C.

Restricted to honors computer science majors. A focus on discrete mathematical tools of fundamental importance to the working computer scientist. An emphasis is placed on using logical notation to express rigorous mathematical arguments. Subjects include proof by induction, graph theory, number theory, combinatorics, recurrences, sets, functions, an introduction to program correctness, and discrete probability. Three lecture hours a week for one semester. Only one of the following may be counted: Computer Science 311, 311H, 313H, 313K, 336, 336H. Prerequisite: Mathematics 408K or 408N with a grade of at least C-; or registration or credit with at least C- in Mathematics 408C.

An investigation of algorithmic paradigms: divide and conquer, dynamic programming, greedy algorithms, graph algorithms, randomized algorithms, undecidability, NP-completeness, and approximation algorithms. Three lecture hours and one discussion hour a week for one semester. Only one of the following may be counted: Computer Science 331, 331H, 357, 357H, 378 (Topic: Algorithms and Complexity). Prerequisite: The following coursework with a grade of at least C-: Computer Science 429 (or 310) or 429H (or 310H); Mathematics 362K or Statistics and Data Sciences 321 (or Statistics and Scientific Computation 321); and credit with a grade of at least C- or registration for: Mathematics 340L, 341, or Statistics and Data Sciences 329C (or Statistics and Scientific Computation 329C).

An investigation of algorithmic paradigms: divide and conquer, dynamic programming, greedy algorithms, graph algorithms, randomized algorithms, undecidability; NP-completeness, approximation algorithm, sorting lower bound, selected topics from amortized analysis, network flow, and linear programming. Three lecture hours and one hour of discussion a week for one semester. Only one of the following may be counted: Computer Science 331, 331H, 357, 357H, 378 (Topic: Algorithms and Complexity). Prerequisite: The following coursework with a grade of at least C-: Computer Science 429 (or 310) or 429H (or 310H); Mathematics 362K or Statistics and Data Sciences 321 (or Statistics and Scientific Computation 321); and credit with a grade of at least C- or registration for: Mathematics 340L, 341, or Statistics and Data Sciences 329C (or Statistics and Scientific Computation 329C).

The old curriculum had eleven CS courses that students were required to take, leaving little time for electives. The new curriculum has only six. This gives students the opportunity to dive into concentration areas, or to study computer science more broadly by sampling from various subareas.

CS Electives

Explores the algorithms needed to solve a given problem, reason about corner cases, and write correct implementations under time pressure. Focuses on skills useful for international programming competitions, whiteboard job interviews, and programming tasks that require quickly solving challenging problems with creative use of algorithms. One lecture hour a week for one semester. Computer Science 104 and 109(Topic: Competitive Programming) may not both be counted. Prerequisite: Computer Science 311 or 311Hwith a grade of at least C-, and registration or credit in Computer Science 314 or 314H with a grade of at least C-.

Explores the syntax and concepts needed to program in C++. One lecture hour a week for one semester. Prerequisite: Computer Science 307, 313E, 314, 314H, or Electrical Engineering 422C (or 322C), with a grade of at least C-.

An introduction to programming in a particular computer language. Includes designing and implementing programs. One lecture hour a week for one semester. May be repeated for credit when the topics vary. Prerequisite: Computer Science 307, 313E, 314, 314H, or Electrical Engineering 422C (or 322C), with a grade of at least C-, and consent of instructor.

Introduction to the use of a particular software system. Students build applications that exploit the system being studied. One lecture hour a week for one semester. May be repeated for credit when the topics vary. Offered on the pass/fail basis only. Prerequisite: Computer Science 307, 313E, 314, 314H, or Electrical Engineering 422C, with a grade of at least C-.

For each semester hour of credit earned, one lecture hour a week for one semester. May be repeated for credit when the topics vary. Prerequisite: Varies with the topic.

For each semester hour of credit earned, one lecture hour a week for one semester. Only one of the following may be counted unless the topics vary: Computer Science 178, 378, 178H, 378H. Some sections offered on the pass/fail basis only. May be repeated for credit when the topics vary. Prerequisite: The following coursework with a grade of at least C- in each: Computer Science 311, 311H, 313K, or 313H; 307, 314, 314H, 315, or 315H; and 310, 310H, 429, or 429H.

Basic concepts of formal methods with emphasis on using and applying mathematical logic plus finite state systems theory to program verification and debugging. Three lecture hours a week for one semester. Computer Science 340D and 378 (Topic: Debugging and Verifying Programs) may not both be counted. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

An introduction to the formal study of automata and of related formal languages with applications in computer science. Three lecture hours a week for one semester. Only one of the following may be counted: Computer Science 341, 341H, Linguistics 340. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

An introduction to the formal study of automata and of related formal languages with applications in computer science. Three lecture hours a week for one semester. Only one of the following may be counted: Computer Science 341, 341H, Linguistics 340. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-, and consent of the honors director.

Biological information processing; architectures and algorithms for supervised learning, self-organization, reinforcement learning, and neuro-evolution; hardware implementations and simulators; applications in engineering, artificial intelligence, and cognitive science. Three lecture hours a week for one semester. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

An examination of the brain as a computational system composed of different layers of abstraction. Focus on scientific writing, with weekly reviews of relevant scientific papers. Three lecture hours a week for one semester Computer Science 342C and 378 (Topic: Computational Brain) may not both be counted. Prerequisite: The following coursework with a grade of at least C- in each: Computer Science 429 (or 310) or 429H (or 310H); and Mathematics 362K or Statistics and Data Sciences 321 (or Statistics and Scientific Computation 321).

A survey of current artificial intelligence issues, including search, production systems, knowledge representation, knowledge-based systems, planning, natural language processing, and machine learning. Artificial intelligence programming projects are required. Three lecture hours a week for one semester. Only one of the following may be counted: Computer Science 343, 343H, 378H (Topic: Artificial Intelligence: Honors). Prerequisite: The following coursework with a grade of at least C- in each: Computer Science 429 (or 310) or 429H (or 310H); and Mathematics 362K or Statistics and Data Sciences 321 (or Statistics and Scientific Computation 321).

An introduction to the field of artificial intelligence (AI), starting from foundations in search and knowledge representation, and then sampling from major AI topics such as knowledge-based systems, planning, machine learning, probabilistic reasoning, intelligent agents (including for games), natural language processing, robotics, computer vision, and philosophical foundations. Programming projects are required. Three lecture hours a week for one semester. Only one of the following may be counted: Computer Science 343, 343H, 378H (Topic: Artificial Intelligence: Honors). Prerequisite: The following coursework with a grade of at least C- in each: Computer Science 429 (or 310) or 429H (or 310H); and Mathematics 362K or Statistics and Data Sciences 321 (or Statistics and Scientific Computation 321)

An introduction to autonomous agents, with an emphasis on multiagent systems. Students use a robotics simulator. Emphasis on computer science research activities, including speaking, writing, programming, and working in groups. Three lecture hours a week for one semester. Computer Science 344M and 378(Topic: Autonomous Multiagent Systems) may not both be counted. Prerequisite: The following coursework with a grade of at least C- in each: Computer Science 429 (or 310) or 429H (or 310H); and Mathematics 362K or Statistics and Data Sciences 321 (or Statistics and Scientific Computation 321).

A survey of methods and techniques important for intelligent robotics. Students work in teams, applying these methods to get intelligent behavior from physical robots. Three lecture hours a week for one semester. Computer Science 344R and 378 (Topic: Robotics) may not both be counted. Prerequisite: The following coursework with a grade of at least C- in each: Computer Science 429 (or 310) or 429H (or 310H); and Mathematics 362K or Statistics and Data Sciences 321 (or Statistics and Scientific Computation 321).

Survey of significant concepts underlying modern programming languages, including syntax, functions, expressions, types, polymorphism, assignment, procedures, pointers, encapsulation, classes, and inheritance, with some discussion of implementation issues. Prominent programming paradigms, such as sequential, concurrent, object-oriented, functional, and logic programming. Illustrative examples drawn from a variety of current languages. Three lecture hours a week for one semester. Computer Science 345 and 345H may not both be counted. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

A survey of significant concepts underlying modern programming languages, including syntax, functions, expressions, types, polymorphism, assignment, procedures, pointers, encapsulation, classes, and inheritance, with some discussion of implementation issues. Prominent programming paradigms, such as sequential, concurrent, object-oriented, functional, and logic programming. Illustrative examples drawn from a variety of current languages. Three lecture hours a week for one semester. Computer Science 345 and 345H may not both be counted. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

A theoretical introduction to cryptography. Subjects include private key cryptosystems, public key cryptosystems, digital signatures, secret sharing schemes, and the necessary mathematical background. Three lecture hours a week for one semester. Prerequisite: The following coursework with a grade of at least C-: Computer Science 429 (or 310) or 429H (310H); 331 (or 357), 331H (or 357H), 341, or 341H; and credit with a grade of at least C- or registration for: Mathematics 340L, 341, or Statistics and Data Sciences 329C (or Statistics and Scientific Computation 329C).

Concepts of database design and database system implementation. Data models, query processing, database design theory, crash recovery, concurrent control, and distributed databases. Three lecture hours a week for one semester. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

An examination of social, professional, and ethical issues involved in the use of computer technology. Subjects may include software engineering ethics, computer safety and reliability, constitutional issues, intellectual property, computer crime, societal impact, emerging technologies, and philosophical issues. Three lecture hours a week for one semester. Computer Science 349 and 378 (Topic: Contemporary Issues in Computer Science) may not both be counted. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

Relationships between programming and hardware design, high performance and low power microarchitectures, memory system design, technology and workload constraints on design, special techniques for coding, addressing, and control, and evaluation of design alternatives will be explored. Three lecture hours a week for one semester. Only one of the following may be counted: Computer Science 350C, 352, or 352H. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

Advanced coverage of core operating systems (virtual memory, file systems, scheduling), and intermediate and advanced operating systems concepts: multiprocessing, multi-core computing, linking, kernel design, virtual machines, and security. Three lecture hours a week for one semester. Only one of the following may be counted: Computer Science 350F, 372, or 372H. Prerequisite: Computer Science 439 (or 352 or 372) or 439H (or 352H or 372H) with a grade of at least C-.

A survey of the theoretical bases of computation: computational complexity (including the classes P and NP) and formal models of the semantics of programming languages. Three lecture hours a week for one semester. Prerequisite: The following coursework with a grade of at least C-: Computer Science 429 (or 310) or 429H (or 310H); and Computer Science 331 (or 357), 331H (or 357H), 341, or 341H.

Introduction to techniques for human-machine communication through imagery. Subjects include display hardware, transformations, interactive techniques, geometric modeling, two- and three-dimensional display algorithms, graphics software systems architecture, and hidden-line and surface elimination. Projects are assigned and in-depth exploration is encouraged. Three lecture hours a week for one semester. Prerequisite: The following courses with a grade of at least C-: Computer Science 429 (or 310) or 429H (or 310H); Computer Science 105C, 371G or 371P; Mathematics 408D, 408M, or 427L; and Mathematics 340L, 341, or Statistics and Data Sciences 329C.

An examination of major technological components of computer games and their integration, modeling and animation, physics simulation, networking for games, interface and interaction techniques, and special effects. Three lecture hours a week for one semester. Computer Science 354R and 378 (Topic: Game Technology) may not both be counted. Prerequisite: The following coursework with a grade of at least C-: Computer Science 105C, 371G or 371P; and Computer Science 429 (or 310) or 429H (or 310H).

Same as Music 354S and Theatre and Dance 354T (Topic 17). Participation in an interdisciplinary team to gain a thorough understanding of the two-dimensional game development process, through modeling of the environment and practices that are used in game studios. Three lecture hours a week for one semester. Only one of the following may be counted: Computer Science 354S, 378 (Topic: Game Development Capstone: 2D Games), Music 354S, 376J (Topic: Game Development Capstone: 2D Games), Theatre and Dance 354T (Topic 17). Prerequisite: For computer science majors, Computer Science 429 or 429H with a grade of at least C- and consent of instructor; for others, consent of instructor.

Same as Music 354T and Theatre and Dance 354T (Topic 18). Participation in interdisciplinary teams to gain a thorough understanding of the three-dimensional game development process, through modeling of the environment and practices that are used in game studios. Three lecture hours a week for one semester. Only one of the following may be counted: Computer Science 354T, Music 354T, 376J (Topic: Game Development Capstone: 3D Games), Theatre and Dance 354T (Topic 18). Prerequisite: For computer science majors, Computer Science 429 or 429H with a grade of at least C- and consent of instructor; for others, consent of instructor.

Introduction to computer networks, including common terminology, basic design issues, and types of networks and protocols. Three lecture hours a week for one semester. Prerequisite: Computer Science 439 (or 372) or 439H (or 372H) with a grade of at least C-.

An introduction to basic knowledge in wireless networks ranging from the physical layer to the application layer, and across different types of wireless networks such as WiFi, cellular, and multihop networks. Three lecture hours a week for one semester. Computer Science 356R and 378 (Topic: Introduction to Wireless Networks) may not both be counted. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

Introduction to the theory of quantum computing and information. Explore the rules of quantum mechanics (qubits, unitary transformations, measurements, density matrices); quantum gates and circuits; entanglement; the Bell inequality; protocols for teleportation, quantum key distribution, and other tasks; basic quantum algorithms such as Shor’s and Grover’s; basic quantum complexity theory; basic quantum error correction; decoherence and the measurement problem; and the challenges of building scalable quantum computers. Previous exposure to quantum mechanics is not required. Prerequisites Computer Science 331 or 331H with a grade of a least C-.

Examine the latest in virtualization technologies such as virtual machines, containers and serverless computing. Three lecture hours a week for one semester. Computer Science 360V and 378 (Topic: Virtualization) may not both be counted. Prerequisite: Computer Science 439 or 439H with a grade of at least C-.

An introduction to computer security, both in the abstract and in the context of real systems, including recognizing potential threats to confidentiality, integrity and availability, and developing familiarity with current security-related issues in computer science. Three lecture hours a week for one semester. Computer Science 361 and 378 (Topic: Introduction to Security) may not both be counted. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

Information Assurance is dedicated to keeping information safe from harm. This encompasses computer security, but also communications security, operations security, and physical security. That's a lot to study in one course. For example, NSA has an Information Assurance Directorate tasked with: "detecting, reporting, and responding to cyber threats; making encryption codes to securely pass information between systems; and embedding IA measures directly into the emerging Global Information Grid. It includes building secure audio and video communications equipment, making tamper protection products, and providing trusted microelectronics solutions. It entails testing the security of customers' systems, providing OPSEC assistance, and evaluating commercial software and hardware against nationally set standards, to better meet our nation's IA needs." Our approach will be to cover selected topics from this very broad area of study with the goal of preparing the student to think critically about security from a wholistic perspective, rather than a purely technical perspective. Prerequisite: Upper-division standing; additional prerequisites vary with the topic.

An examination of common computer security threats; fundamental techniques for implementing secure software systems and networks; practical experience in attacking and defending networked systems. Three lecture hours a week for one semester. Computer Science 361S and 378 (Topic: Network Security and Privacy) may not both be counted. Prerequisite: Computer Science 439 (or 352 or 372) or 439H (or 352H or 372H) with a grade of at least C-.

Introduction to the topic of data mining: data preprocessing regression, classification, clustering, dimensionality reduction, association analysis, and anomaly detection. Three lecture hours a week for one semester. Computer Science 363D and 378 (Topic: Introduction to Data Mining) may not both be counted. Prerequisite: The following coursework with a grade of at least C-: Computer Science 429 (or 310) or 429H (or 310H); Mathematics 362K or Statistics and Data Sciences 321 (or Statistics and Scientific Computation 321); and Mathematics 340L, 341, or Statistics and Data Sciences 329C (or Statistics and Scientific Computation 329C).

Explore advanced aspects of data mining including regression, classification, and clustering; probabilistic models; latent variable models; Bayesian inference; and confidence estimation. Three lecture hours a week for one semester. Prerequisite: Upper-division standing and Computer Science 363D with a grade of at least C-.

Supervised study of selected problems in computer science, by individual arrangement with supervising instructor. The equivalent of three lecture hours a week for one semester. Computer Science 370 and 370F may not both be counted. No more than three semester hours may be counted toward a degree in computer science. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-, and consent of the undergraduate adviser.

Supervised study of selected problems in computer science, by individual arrangement with supervising instructor. The equivalent of three lecture hours a week for one semester. Computer Science 370 and 370F may not both be counted. No more than three semester hours may be counted toward a degree in computer science. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-, and consent of the undergraduate adviser.

Investigation of models, principles, and fundamental protocols, including event ordering and global predicate detection, atomic commit, state-machine replication, rollback recovery, primary backup, consensus for synchronous and asynchronous systems, and byzantine fault-tolerance. Three lecture hours a week for one semester. Prerequisite: Computer Science 439 (or 372) or 439H (or 372H) with a grade of at least C-.

Three lecture hours a week for one semester. Computer Science 371G and 378 (Topic: Generic Programming and the STL) may not both be counted. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

Overview of mobile computing with an emphasis on developing applications for the iOS operating system. Computer Science 371L and 378 (Topic: iOS Mobile Computing) may not both be counted. Prerequisite: Credit with a grade of at least C- or registration in Computer Science 439 or 439H.

Overview of mobile computing. Emphasis on mobile application development. Use of mobile capabilities: sensors, location, telephony, and multimedia. Three lecture hours a week for one semester Computer Science 371M and 378 (Topic: Mobile Computing) may not both be counted. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-; and credit with a grade of at least C- or registration for Computer Science 439 (or 352 or 372) or 439H (or 352H or 372H).

Programming using class derivation, inheritance, and dynamic polymorphism. Application of a simple object-oriented design methodology to several software development problems. Three lecture hours a week for one semester. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

Introduction to traditional and recent methodologies for indexing, processing, querying, and classifying unstructured and semi-structured textual data, including hypertext and World Wide Web documents. Three lecture hours a week for one semester. Computer Sciences 371R and 378 (Topic: Intelligent Information Retrieval and Web Search) may not both be counted. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

Object-oriented formulations of software systems as executable specifications, object-oriented analysis, design of software architectures, translation of high-level specification systems. Three lecture hours a week for one semester. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

Introduction to current knowledge, techniques, and theories in large software system design and development. Three lecture hours a week for one semester. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

UML metamodels and constraints, model-driven engineering, UML-to-source-code mappings, object-oriented refactorings, design patterns, object-oriented frameworks and plug-ins, architectural styles, layered designs, map-reduce parallel software architectures, and service-oriented computing. Three lecture hours a week for one semester. Computer Science 373S and 378 (Topic: Software Design) may not both be counted. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

Course for teams of students starting companies. Focuses on skill development and mentoring in startup formation, technology development, market validation, marketing, sales, operations, human resource s, program management, and finance. Emphasis on written and oral presentation of startup activities. Online application required to seek instructor permission, see program website for more information. Preference will be given to seniors with well-rounded startup business teams. Three lecture hours a week for one semester. Prerequisite: Upper-division standing.

An examination of formal description of languages, lexical analysis, syntax analysis, syntax-directed translation, run-time system management, code generation, code optimization, compiler-building tools. Three lecture hours a week for one semester. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

Explores computer vision, a discipline that develops methods that enable machines to interpret or analyze images and videos. Includes the study of image formation, feature detection, segmentation, multiple-view geometry, recognition and learning, and motion and tracking. Three lecture hours a week for one semester. Computer Science 376 and 378 (Topic: Computer Vision) may not both be counted. Prerequisite: The following coursework with a grade of at least C-: Computer Science 429 (or 310) or 429H (or 310H); Mathematics 340L, 341, or Statistics and Data Sciences 329C (or Statistics and Scientific Computation 329C); and Mathematics 362K or Statistics and Data Sciences 321 (or Statistics and Scientific Computation 321).

Models of parallel computation, fundamental concepts for representation of parallel computation structures, study of representative parallel programming systems, and programming of parallel algorithms and computations. Three lecture hours a week for one semester. Prerequisite: Computer Science 439 (or 372) or 439H (or 372H) with a grade of at least C-.

Investigation on the performance-critical features of modern computer architectures and how applications can take advantage of them to obtain high performance. Three lecture hours a week for one semester. Computer Science 377P and 378 (Topic: Programming for Performance) may not both be counted. Prerequisite: Computer Science 429 (or 310) or 429H (or 310H) with a grade of at least C-.

This course is focused on developing a building wide intelligence (BWI) for the new computer science building. The idea is to have a pervasive intelligence throughout the building, in the form of robots, kiosks, display screens, and cameras. These robots will perform a variety of tasks, such as leading people to their destinations or locating a person in the building. Prerequisite: Upper-division standing; additional prerequisites vary with the topic.

An exlporation of real-life ethical dilemmas that arise in everyday business and social situations to challenge decision-making processes, and seek to describe ideal behavior for the future. Prerequisite: Upper-division standing; additional prerequisites vary with the topic.

A study of the concepts embodied in map-reduce, and will investigate how map-reduce is used to address various problems in processing and analyzing large data sets. Prerequisite: Upper-division standing; additional prerequisites vary with the topic.

An examination of cloud computing models, tools, and techniques. Students will develop several cloud-native applications to gain hands-on experience with popular cloud computing platforms. Prerequisite: Upper-division standing; additional prerequisites vary with the topic.

One or three lecture hours a week for one semester. Only one of the following may be counted unless the topics vary: Computer Science 178, 378, 178H, 378H. May be repeated for credit when the topics vary. Prerequisite: Upper-division standing; additional prerequisites vary with the topic.

A practical, hands-on opportunity to learn real world security principles with security tools to assess, defend, and investigate hosts and networks. Exploration of the fundamentals of secure coding through analysis of vulnerable applications. Prerequisite: Upper-division standing; additional prerequisites vary with the topic.

Cyberphysical systems (CPS) are “engineered systems that are built from and depend upon the synergy of computational and physical components. Emerging CPS will be coordinated, distributed, and connected, and must be robust and responsive. The CPS of tomorrow will need to far exceed the systems of today in capability, adaptability, resiliency, safety, security, and usability. Examples of the many CPS application areas include the smart electric grid, smart transportation, smart buildings, smart medical technologies, next-generation air traffic management, and advanced manufacturing. CPS will transform the way people interact with engineered systems, just as the Internet transformed the way people interact with information. However, these goals cannot be achieved without rigorous systems engineering” [National Science Foundation]. This course covers some basic topics in the design and implementation of various cyberphysical systems. Prerequisite: Upper-division standing; additional prerequisites vary with the topic.

An introduction to mobile computing with a strong emphasis on application development for the Android operating system. Students will complete a major project with the goal of releasing an app on the Android Market place. Topics will include Android Development Environment, user interfaces, audio, persistence, SQLite databases, location, sensors, and graphics. Prerequisite: Upper-division standing; additional prerequisites vary with the topic.

In this course, you will work toward building a news-related iPhone app in one semester, with the goal of having an app accepted in the Apple App Store. You will be challenged on the programming. We will be looking for ambitious ideas that stretch your knowledge and abilities. You will also learn in a meaningful way how to communicate ideas, learn how to work in a team environment and learn about the journalism industry, its ethics and tenets. Prerequisite: Upper-division standing; additional prerequisites vary with the topic.

The study of concepts, tools, and techniques in designing and building modern web applications, and their deployment to public clouds. Hands-on experience with tools and frameworks related to modern web application development and public cloud computing platforms. Prerequisite: Upper-division standing; additional prerequisites vary with the topic.

An exploration of design and implementation issues for modern operating systems. Subjects include key design issues in implementing an operating system, such as memory management, inter-core synchronization, scheduling, protection, inter-process communication, device drivers, and file systems, paying particular attention to system designs that differ from the traditional monolithic arrangements of Unix/Linux and Windows. Prerequisite: Upper-division standing; additional prerequisites vary with the topic.

A study of the main applications of NLP techniques today, both in academia and in industry, as well as linguistics to put problems in context and understand their challenges. A range of models in structured prediction and deep learning including classifiers, sequence models, statistical parsers, neural network encoders, and encoder-decoder models. Prerequisite: Upper-division standing; additional prerequisites vary with the topic.

Topics include program verification, goal-­oriented programming, the basics of a modern architecture and hierarchical memories, anatomy of high­-performance matrix­-matrix multiplication, deriving high-­performance implementations for matrix operations, parallelization for multi­core architectures, and parallelizatoin for distributed memory architectures. Prerequisite: Upper-division standing; additional prerequisites vary with the topic.

A study of developing tools and techniques to design and analyze efficient randomized algorithms. Prerequisite: Upper-division standing; additional prerequisites vary with the topic.

Symbolic Programming involves the manipulation of symbolic data such as programs, equations, rules, and natural language. Prerequisite: Upper-division standing; additional prerequisites vary with the topic.

Undergraduate Topics in Computer Science. Three lecture hours a week for one semester. May be repeated for credit when the topics vary. Only one of the following may be counted unless the topics vary: Computer Science 178, 378, 178H, 378H. Prerequisite: Upper-division standing; additional prerequisites vary with the topic.

This course will cover the basic aspects of the theory of algorithms, including divide-and-conquer, dynamic programming and greedy, several graph algorithms, randomized algorithms, and approximation algorithms, together with an introduction to undecidability, and to NP-completeness. Prerequisite: Upper-division standing; additional prerequisites vary with the topic.

Introduction to techniques for human-machine communication through imagery. Subjects include display hardware, transformations, interactive techniques, geometric modeling, two- and three-dimensional display algorithms, graphics software systems architecture, and hidden-line and surface elimination. Projects are assigned and in-depth exploration is encouraged. Three lecture hours a week for one semester. Prerequisite: The following courses with a grade of at least C-: Computer Science 429 (or 310) or 429H (or 310H); Computer Science 105C, 371G or 371P; Mathematics 408D, 408M, or 427L; and Mathematics 340L, 341, or Statistics and Data Sciences 329C.

The objective of this course is to provide students with strong background on concurrency fundamentals along with experience with a diversity of both classical and modern approaches to managing and exploiting concurrency, including shared memory synchronization, parallel architectures such as GPUs, as well as distributed parallel frameworks such as MPI and mapreduce. Prerequisite: Upper-division standing; additional prerequisites vary with the topic.

Directed reading, research, and/or projects in areas of computer science, under supervision of a faculty member, leading to an honors thesis. The thesis must be approved by a committee of three readers. The equivalent of three lecture hours a week for one semester, by arrangement with a faculty member. Prerequisite: The following coursework with a grade of at least C- in each: Computer Science 311, 311H, 313H, or 313K; Computer Science 314, 314H, 315, or 315H; Computer Science 310, 310H, 429, or 429H; Mathematics 408C, 408K, or 408N; nine additional semester hours of upper-division coursework in computer science; and consent of the student's research supervisor and the departmental honors adviser.

CS Classes for Non-Majors

Explores the syntax and concepts needed to program in C++. One lecture hour a week for one semester. Prerequisite: Computer Science 307, 313E, 314, 314H, or Electrical Engineering 422C (or 322C), with a grade of at least C-.

An introduction to programming in a particular computer language. Includes designing and implementing programs. One lecture hour a week for one semester. May be repeated for credit when the topics vary. Prerequisite: Computer Science 307, 313E, 314, 314H, or Electrical Engineering 422C (or 322C), with a grade of at least C-, and consent of instructor.

Introduction to the use of a particular software system. Students build applications that exploit the system being studied. One lecture hour a week for one semester. May be repeated for credit when the topics vary. Offered on the pass/fail basis only. Prerequisite: Computer Science 307, 313E, 314, 314H, or Electrical Engineering 422C, with a grade of at least C-.

For each semester hour of credit earned, one lecture hour a week for one semester. May be repeated for credit when the topics vary. Prerequisite: Varies with the topic.

An introduction to the fundamental concepts of computing: how computers work, what they can do, and how they can be used effectively. Some programming is required. Three lecture hours or two lecture hours and one discussion hour a week for one semester. Credit for Computer Science 302 may not be earned after a student has received credit for Computer Science 303E, 305J, 307, 312, 312H, 314, or 314H. May not be counted toward a degree in computer science.

Problem solving and fundamental algorithms for various applications in science, business, and on the World Wide Web, and introductory programming in a modern object-oriented programming language. The equivalent of three lecture hours a week for one semester. Only one of the following may be counted: Computer Science 303E, 305J, 312, 312H. Credit for Computer Science 303E may not be earned after a student has received credit for Computer Science 307, 314, or 314H. May not be counted toward a degree in computer science.

Object-oriented design of software in a modern high-level language, using software library packages. Introduction to elementary data structures and complexity of algorithms. Three lecture hours a week for one semester. May not be counted toward a degree in computer science. Prerequisite: Computer Science 303E, 305J, 312, or 312H with a grade of at least C-.

Fundamentals of software issues related to scientific computing. Subjects include floating-point computations, numerical computation errors, interpolation, integration, solution of linear systems of equations, optimization, and initial value problems of ordinary differential equations. Implementation of algorithms are investigated using Python for all scientific computations. Examples are drawn from a variety of science and mathematics areas.Three lecture hours a week for one semester. May not be counted toward a degree in computer science. Computer Science 323E and 323H may not both be counted. Prerequisite: Computer Science 313E, 314, or 314H with a grade of at least C-.

Fundamentals of software issues related to scientific computing. Subjects include floating-point computations, numerical computation errors, interpolation, integration, solution of linear systems of equations, optimization, and initial value problems of ordinary differential equations. Implementation of algorithms are investigated using MATLAB for matrix and vector computations. Examples are drawn from a variety of science and mathematics areas. Three lecture hours a week for one semester. May not be counted toward a degree in computer science. Computer Science 323E and 323H may not both be counted. Prerequisite: Computer Science 303E, 305J, 307, 312, 312H, 315, or 315H with a grade of at least C-; credit with a grade of at least C- or registration for Mathematics 340L, 341, or Statistics and Scientific Computation 329C; and consent of the honors director.

Basics of two- and three-dimensional computer graphics systems, modeling and rendering, and selected graphics software APIs. Other topics may include interactive graphics, animation, graphical user interfaces, and the graphical presentation of information. Three lecture hours a week for one semester. May not be counted toward a degree in computer science. Prerequisite: One of the following with a grade of at least C-: Computer Science 303E, 305J, 307, 312, 312H, 314, 314H, 315, 315H, Electrical Engineering 422C.

Introduction to the principles and basic concepts of the Internet, networking applications and protocols, and simple client/server applications. Other topics may include network technologies and topologies, packet and circuit switching, LANS and WANS, Internet security, and network management. Three lecture hours a week for one semester. May not be counted toward a degree in computer science. Prerequisite: One of the following with a grade of at least C-: Computer Science 303E, 305J, 307, 312, 312H, 314, 314H, 315, 315H, Electrical Engineering 422C

A practical introduction to database management systems, with discussion of database administration and management. Survey of logical modeling, database design with a focus on relational databases, SQL query language, and current applications. Subjects may include data integrity, performance, concurrency, transaction processing, recovery, security, and Web applications. Three lecture hours a week for one semester. May not be counted toward a degree in computer science. Prerequisite: One of the following with a grade of at least C-: Computer Science 303E, 305J, 307, 312, 312H, 314, 314H, 315, 315H, Electrical Engineering 422C.

Three lecture hours a week for one semester. May not be counted toward a degree in computer science. May be repeated for credit when the topics vary. Prerequisite: Computer Science 313E, 314, or 314H with a grade of at least C-.

Topics include privacy, intellectual property, social media, the digital divide, the risks of complex software, cybersecurity, ethical issues in new technology development, and the future of artificial intelligence in everyday life and in the workplace. Carries the writing and the ethics and leadership flags. May not be counted toward a degree in computer science. Prerequisite: Computer Science 313E with a grade of at least C-. Course number may be repeated for credit when the topics vary.

An exploration of machine learning algorithms to find patterns in large datasets. Topics include classification, clustering, anomaly detection, and association analysis. Three lecture hours a week for one semester. May not be counted toward a degree in computer science. May be repeated for credit when the topics vary. Prerequisite: Computer Science 313E, 314, or 314H with a grade of at least C-.

An introduction to key design principles and techniques for interactively visualizing data. The major goals of this course are to understand how visual representations can help in the analysis and understanding of complex data, how to design effective visualizations, and how to create your own interactive visualizations using modern frameworks. Three lecture hours a week for one semester. May not be counted toward a degree in computer science. May be repeated for credit when the topics vary. Prerequisite: Computer Science 313E, 314, or 314H with a grade of at least C-.

An examination of the fundamentals of digital game creation including learning html5, CSS, and JavaScript using the Phaser game engine, general principals of game design and software engineering processes, and development of 2D games. Three lecture hours a week for one semester. May not be counted toward a degree in computer science. May be repeated for credit when the topics vary. Prerequisite: Computer Science 313E, 314, or 314H with a grade of at least C-.

A project-based course covering mobile development. Topics include Swift language, the Model-View Controller pattern, software design, object-oriented coding practices, agile development, and data input. Three lecture hours a week for one semester. May not be counted toward a degree in computer science. May be repeated for credit when the topics vary. Prerequisite: Computer Science 313E, 314, or 314H with a grade of at least C-.

Students live, work and study in a digital universe--web surfing, IMing and Google with ease. But how many students really understand the sophisticated technologies that make this possible. This course is designed to peek beneath the surface to see how modern digital media actually operate. May not be counted toward a degree in computer science. Prerequisite: Computer Science 313E with a grade of at least C-. Course number may be repeated for credit when the topics vary.

May not be counted toward a degree in computer science. Prerequisite: Computer Science 313E with a grade of at least C-. Course number may be repeated for credit when the topics vary.