Undergraduate Course Specifications
Foundation Courses
CS 1110: Introduction to Programming
Foundation
(3 credits / Prerequisites: None)
A first course in programming, software development, and computer science. Introduces computing fundamentals and an appreciation for computational thinking. No previous programming experience required. Note: CS 1110, 1111, 1112, 1113, and 1120 provide different approaches to teaching the same core material; students may only receive credit for one of these courses.
CS 1111: Introduction to Programming
Foundation
(3 credits / Prerequisites: None)
A first course in programming, software development, and computer science. Introduces computing fundamentals and an appreciation for computational thinking. Prerequisite: Students should have some experience with programming. Note: CS 1110, 1111, 1112, 1113, and 1120 provide different approaches to teaching the same core material; students may only receive credit for one of these courses.
CS 1112: Introduction to Programming
Foundation
(3 credits / Prerequisites: None)
A first course in programming, software development, and computer science. Introduces computing fundamentals and an appreciation for computational thinking. Prerequisite: Students must have no previous programming experience. Note: CS 1110, 1111, 1112, 1113, and 1120 provide different approaches to teaching the same core material; students may only receive credit for one of these courses.
CS 1113: Introduction to Programming
Foundation
(3 credits / Prerequisites: None)
A first course in programming, software development, and computer science. Introduces computing fundamentals and an appreciation for computational thinking. Special domain topics and materials will differ by section and semester. Note: CS 1110, 1111, 1112, 1113, and 1120 provide different approaches to teaching the same core material; students may only receive credit for one of these courses.
CS 1120: Introduction to Computing: Explorations in Language, Logic, and Machines
Foundation
(3 credits / Prerequisites: None)
This course is an introduction to the most important ideas in computing. It focuses on the big ideas in computer science including the major themes of recursive definitions, universality, and abstraction. It covers how to describe information processes by defining procedures using the Scheme and Python programming languages, how to analyze the costs required to carry out a procedure, and the fundamental limits of what can be computed.
CS 2100: Data Structures and Algorithms 1
Foundation
(4 credits / Prerequisites: CS 1110, 1111, 1112, 1113, or 1120 with a grade of C- or higher; or the CS 1110 placement test.)
A second course in computing with an emphasis on foundational data structures and program analysis. The course provides a introduction to object oriented programming and the Java programming language, concurrency, and inheritance / polymorphism. Additionally, foundational data structures and related algorithms / analysis are studied. These include lists, stacks, queues, trees, hash tables, and priority queues.
CS 2120: Discrete Mathematics and Theory 1
Foundation
(3 credits / Prerequisites: CS 1110, 1111, 1112, 1113, or 1120 with a grade of C- or higher; or the CS 1110 placement test.)
Introduces discrete mathematics and proof techniques involving first order predicate logic and induction. Application areas include sets, tuples, functions, relations, and combinatorial problems.
CS 2130: Computer Systems and Organization 1
Foundation
(4 credits / Prerequisites: CS 1110, 1111, 1112, 1113, or 1120 with a grade of C- or higher; or the CS 1110 placement test AND either familiarity with Java, C++, or another C-like language, or concurrent enrollment in CS 2100)
This course covers topics on the computer architecture abstraction hierarchy ranging from a step above silicon to a step below modern programming languages. Students in this course will learn to write low-level code in C and Assembly, how data is stored in memory, the basics of hardware design from gates and registers through general-purpose computers, and legal, ethical, and security issues related to these topics.
CS 3100: Data Structures and Algorithms 2
Foundation
(3 credits / Prerequisites: CS 2150 or (CS 2100 & CS 2120); APMA 1090 or MATH 1210 or MATH 1310 or equivalent)
Builds upon previous analysis of algorithms and the effects of data structures on them. Algorithms selected from areas such as searching, shortest paths, greedy algorithms, backtracking, divide-and-conquer, dynamic programming, and machine learning. Analysis techniques include asymptotic worst case, expected time, amortized analysis, and reductions.
CS 3120: Discrete Mathematics and Theory 2
Foundation
(3 credits / Prerequisites: CS 4102 or CS 3100 with a grade of C- or better)
The goal of this course is to understand the fundamental limits on what can be efficiently computed. These limits reveal properties about information, communication, and computing, as well as practical issues about how to solve problems. Introduces computation theory including grammars, automata, and Turing machines.
CS 3130: Computer Systems and Organization 2
Foundation
(4 credits / Prerequisites: CS 2100 and CS 2130 with a grade of C- or better)
A second course in computer systems, this course will explore a more realistic model of processors and how they and the operating system work together to provide various functionality we depend on as application programmers. Course topics include permission models, system architecture, concurrency, virtual memory, cryptographic primitives, and TCP/IP networking.
CS 3140: Software Development Essentials
Foundation
(3 credits / Prerequisites: CS 2100 with a C- or better.)
A first course in software engineering and software construction, this course focuses on bringing the programming concepts learned in a first course in data structures and algorithms together to begin to teach students how to build more complex systems. The course covers introductory topics in testing, software design principles, design patterns, functional programming, and data storage and manipulation.
CS 3240: Software Engineering
Foundation
(3 credits / Prerequisites: CS 2150 or CS 3140 with a grade of C- or better)
Analyzes modern software engineering practice for multi-person projects; methods for requirements specification, design, implementation, verification, and maintenance of large software systems; advanced software development techniques and large project management approaches; project planning, scheduling, resource management, accounting, configuration control, and documentation. Formerly known as Advanced Software Development Techniques.
Elective Courses
CS 3205: HCI in Software Development
Elective
(3 credits / Prerequisites: CS 2110 or CS 2100 with a grade of C- or better)
Human-computer interaction and user-centered design in the context of software engineering. Examines the fundamental principles of human-computer interaction. Includes evaluating a system’s usability based on well-defined criteria; user and task analysis, as well as conceptual models and metaphors; the use of prototyping for evaluating design alternatives; and physical design of software user-interfaces, including windows, menus, and commands.
CS 3250: Software Testing
Elective
(3 credits / Prerequisites: CS 2150 or (CS 2100 and CS 2120) with a grade of C- or better)
An introduction to testing for assuring software quality. Covers concepts and techniques for testing software, including testing at the unit, module, subsystem, and system levels; automatic and manual techniques for generating and validating test data; the testing process; static vs. dynamic analysis; functional testing; inspections; testing in specific application domains; and reliability assessment.
CS 3501: Special Topics in Computer Science
Elective
(1 - 3 credits / Prerequisites: Instructor permission; additional specific requirements vary with topics.)
Content varies, depending on instructor interests and the needs of the Department. Taught strictly at the undergraduate level.
CS 3710: Introduction to Cybersecurity
Elective
(3 credits / Prerequisites: CS 2150 or (CS 2100 or CS 2100 place-out test and CS 2130) with a grade of C- or better)
Introduces students to the fields of cybersecurity. Both non-technical issues, such as ethics and policy, and technical issues are covered. Students see and experiment with a wide range of areas within cybersecurity, including: binary exploitation, encryption, digital forensics, networks, and modern threats.
CS 4240: Principles of Software Design
Elective
(3 credits / Prerequisites: CS 2150 or CS 3140 with a grade of C- or better)
Focuses on techniques for software design in the development of large and complex software systems. Topics will include software architecture, modeling (including UML), object-oriented design patterns, and processes for carrying out analysis and design. More advanced or recent developments may be included at the instructor’s discretion. The course will balance an emphasis on design principles with an understanding of how to apply techniques and methods to create successful software systems.
CS 4260: Internet Scale Applications
Elective
(3 credits / Prerequisites: CS 3240 with a grade of C- or better)
A survey of methods for building large-scale internet websites and mobile apps, with a focus on how theory meets practice. Topics covered include performance engineering, scaling, security, and large team software engineering. Results in students building a working scalable online application.
CS 4434: Dependable Computing Systems
Elective
(3 credits / Prerequisites: CS 3330 or CS 2501 topic "COA 2" or ECE 3430 or ECE 4435 or ECE 3502 topic "ECR II" or CS 3130 and CS 3140; APMA 3100, APMA 3110, MATH 3100, or equivalent. Must complete CS courses with a grade of C- or better.)
Focuses on techniques for designing & analyzing dependable computer-based systems. Topics include basic dependability concepts & attributes, fault models & effects, combinatorial & state-space modeling, hardware redundancy, error detecting & correcting codes, time redundancy, software fault tolerance, checkpointing & recovery, reliable networked systems, error detection techniques, & experimental dependability evaluation techniques.
CS 4444: Introduction to Parallel Computing
Elective
(3 credits / Prerequisites: CS 2150 and CS 3330 or CS 2501 topic "COA 2" or ECE 3430 or ECE 4435 or ECE 3502 topic "ECR II" or CS 3100 and CS 3130. Must complete CS courses with a grade of C- or better.)
Introduces the student to the basics of high-performance parallel computing and the national cyber-infrastructure. The course is targeted for both computer science students and students from other disciplines who want to learn how to significantly increase the performance of applications.
CS 4457: Computer Networks
Elective
(3 credits / Prerequisites: CS 3330 or CS 2501 topic "COA 2" or ECE 3430 or ECE 4435 or ECE 3502 topic "ECR II" or CS 3130. Must complete CS courses with a grade of C- or better.)
A first course in communication networks for upper-level undergraduate students. Topics include the design of modern communication networks; point-to-point and broadcast network solutions; advanced issues such as Gigabit networks; ATM networks; and real-time communications. Cross-listed as ECE 4457.
CS 4458: Internet Engineering
Elective
(3 credits / Prerequisites: CS 4457 with a grade of C- or better.)
An advanced course on computer networks on the technologies and protocols of the Internet. Topics include the design principles of the Internet protocols, including TCP/IP, the Domain Name System, routing protocols, and network management protocols. A set of laboratory exercises covers aspects of traffic engineering in a wide-area network.
CS 4501: Special Topics in Computer Science
Elective
(1 - 3 credits / Prerequisites: Instructor permission; additional specific requirements vary with topics.)
Content varies annually, depending on instructor interests and the needs of the department. Similar to CS 5501 and CS 7501, but taught strictly at the undergraduate level.
CS 4610: Programming Languages
Elective
(3 credits / Prerequisites: CS 2150 or (CS 2120 and 3140) with a grade of C- or better)
Presents the fundamental concepts of programming language design and implementation. Emphasizes language paradigms and implementation issues. Develops working programs in languages representing different language paradigms. Many programs oriented toward language implementation issues.
CS 4620: Compilers
Elective
(3 credits / Prerequisites: CS 2150 or (CS 2120 and 3140) with a grade of C- or better)
Provides an introduction to the field of compilers, which translate programs written in high-level languages to a form that can be executed. The course covers the theories and mechanisms of compilation tools. Students will learn the core ideas behind compilation and how to use software tools such as lex/flex, yacc/bison to build a compiler for a non-trivial programming language.
CS 4630: Defense Against the Dark Arts
Elective
(3 credits / Prerequisites: CS 3710 with a grade of C- or better)
Viruses, worms, and other malicious software are an ever-increasing threat to computer systems. There is an escalating battle between computer security specialists and the designers of malicious software. This course provides an essential understanding of the techniques used by both sides of the computer security battle.
CS 4640: Programming Languages for Web Applications
Elective
(3 credits / Prerequisites: CS 2150 or CS 3140 with a grade of C- or better)
Presents programming languages and implementations used in developing web applications. Both client and server side languages are presented as well as database languages. In addition, frameworks that enable interactive web pages are discussed as well as formatting languages. Language features and efficiencies including scoping, parameter passing, object orientation, just in time compilation and dynamic binary translation are included.
CS 4710: Artificial Intelligence
Elective
(3 credits / Prerequisites: CS 2150 or CS 3100 with a grade of C- or better)
Introduces artificial intelligence. Covers fundamental concepts and techniques and surveys selected application areas. Core material includes state space search, logic, and resolution theorem proving. Application areas may include expert systems, natural language understanding, planning, machine learning, or machine perception. Provides exposure to AI implementation methods, emphasizing programming in Common LISP.
CS 4720: Mobile Application Development
Elective
(3 credits / Prerequisites: CS 2150 or CS 3140 with a grade of C- or better)
Mobile computing devices have become ubiquitous in our communities. In this course, we focus on the creation of mobile solutions for various modern platforms, including major mobile operating systems. Topics include mobile device architecture, programming languages, software engineering, user interface design, and app distribution.
CS 4730: Computer Game Design
Elective
(3 credits / Prerequisites: CS 2150 or CS 3140 with a grade of C- or better)
This course will introduce students to the concepts and tools used in the development of modern 2-D and 3-D real-time interactive computer video games. Topics covered in this include graphics, parallel processing, human-computer interaction, networking, artificial intelligence, and software engineering.
CS 4740: Cloud Computing
Elective
(3 credits / Prerequisites: CS 2150 or CS 3140 with a grade of C- or better)
Investigates the architectural foundations of the various cloud platforms, as well as examining both current cloud computing platforms and modern cloud research. Student assignments utilize the major cloud platforms.
CS 4750: Database Systems
Elective
(3 credits / Prerequisites: CS 2150 or (CS 2120 and 3140) with a grade of C- or better)
Introduces the fundamental concepts for design and development of database systems. Emphasizes relational data model and conceptual schema design using ER model, practical issues in commercial database systems, database design using functional dependencies, and other data models. Develops a working relational database for a realistic application.
CS 4753: Electronic Commerce Technologies
Elective
(3 credits / Prerequisites: CS 2150 or CS 3140 with a grade of C- or better)
History of Internet and electronic commerce on the web; case studies of success and failure; cryptographic techniques for privacy, security, and authentication; digital money; transaction processing; wired and wireless access technologies; Java; streaming multimedia; XML; Bluetooth. Defining, protecting, growing, and raising capital for an e-business.
CS 4760: Network Security
Elective
(3 credits / Prerequisites: CS 3710 with a grade of C- or better)
This course covers the principles of secure network communications and the application of network security. Topics include: attack types, attack surfaces, attack phases, network security devices.(a)symmetric key encryption, cryptographic hash function, authentication/identification techniques, key distribution, and data integrity assurance. Also, currently used security mechanisms and protocols will be discussed.
CS 4774: Machine Learning
Elective
(3 credits / Prerequisites: CS 2150 or CS 3100 with a grade of C- or better; APMA 3100, APMA 3110, MATH 3100, or equivalent and Math 3350 or APMA 3080 or equivalent)
An introduction to machine learning: the study of algorithms that improve their performance through experience. Covers both machine learning theory and algorithms. Introduces algorithms, theory, and applications related to both supervised and unsupervised learning, including regression, classification, and optimization and major algorithm families for each.
CS 4780: Information Retrieval
Elective
(3 credits / Prerequisites: CS 2150 or CS 3100 with a grade of C- or better; APMA 3100, APMA 3110, MATH 3100, or equivalent)
An introduction to modern information retrieval technologies. Topics include indexing, query processing, document ranking, query recommendation, personalization, and other current topics in information retrieval. Students develop a custom search engine as part of this course.
CS 4810: Introduction to Computer Graphics
Elective
(3 credits / Prerequisites: CS 2150 or (CS 3100 and 3130) with a grade of C- or better)
Introduces the fundamentals of three-dimensional computer graphics: rendering, modeling, and animation. Students learn how to represent three-dimensional objects (modeling) and the movement of those objects over time (animation). Students learn and implement the standard rendering pipeline, defined as the stages of turning a three-dimensional model into a shaded, lit, texture-mapped two-dimensional image.
CS 4970: Capstone Practicum I
Elective
(3 credits / Prerequisites: CS 2150 or CS 2501 topic DSA2 with a grade of C- or higher, and BSCS major)
This course is one option in the CS fourth-year thesis track. Under the practicum track, students will take two 3-credit courses, CS 4970 and CS 4971. These courses would form a year-long group-based and project-based practicum class. There would be an actual customer, which could be either internal (the course instructor, other CS professors, etc.) or external (local companies, local non-profits, etc.).
CS 4993: Independent Study
Elective
(1 - 3 credits / Prerequisites: Instructor permission.)
In-depth study of a computer science or computer engineering problem by an individual student in close consultation with departmental faculty. The study is often either a thorough analysis of an abstract computer science problem or the design, implementation, and analysis of a computer system (software or hardware).
Service Courses
CS 1010: Introduction to Information Technology
Service
(3 credits / Prerequisites: None)
How computers create, preserve, manipulate and communicate information and the concepts and tools used to that end. Units include how computers work, web technologies, creating web pages, algorithms and logic, basic programming, and solving problems with spreadsheets. Students will learn to recognize computational problems and develop basic skill sets to solve future problems in their discipline of study. No prior programming experience required. Cannot be taken for credit by students in SEAS.