Course Descriptions
CS 125 - Introduction to Computer and Data Sciences (FR)
Computer science, broadly, studies how to solve problems using computers. Data science is a related field that focuses on acquiring, cleaning, and exploring data, via visualization and statistical analysis, to aid decision making. This course introduces the fundamental skill of computer science, programming, using data science examples and applications in the Python programming language. May not be taken for credit after successfully completing CS 126 or CS 127. No prerequisites. Offered each term.
CS 126 - Introduction to Computer Science Using the Web (FR)
Introduction to object based programming using JavaScript to create dynamic web pages. Includes a brief introduction to HTML and CSS, with emphasis on the division of structure and presentation. Topics: internet architecture and history, selection, iteration, functions, operators, objects, methods, properties, arrays, strings, event handlers, and form processing. May not be taken for credit after successfully completing CS 125 or CS 127. No prerequisites. Offered annually.
CS 127 - Computer Science I (FR)
Computer Science studies how to solve problems using computers. This course introduces cpmputer science as a field of study and programming as a core compnent thereof. Covers programming concepts and techniques; variables, data types, loops, conditionals, functions, objects, classes, testing, and program design. Teaches the Python programming language. May not be taken for credit after successfully completing CS 125 or CS 126. No prerequisites. Offered each term.
CS 128 - Computer Science II
Introduction to object-oriented programming, data structures and algorithmic problem solving. All concepts will be practiced through programming in Python. Students will learn the conceptual foundation for a given data structure, use it to solve a real-life problem, then analyze the time complexity in comparison to other solutions. In this course, data structures are treated as "black boxes" for the purposes of implementation. Has a lab component. Prerequisite: CS 125/DASC 125, CS 126, or CS 127. Offered each term.
CS 135 - Applications of Sets, Logic, and Recursion (FR) (Cross-listed as MATH 135)
Introduction to functional programming and discrete mathematics. Sets, functions, and relations. Basic logic, including formal derivations in propositional and predicate logic. Recursion and mathematical induction. Programming material: Data types and structures, list-processing, functional and recursive programming. No prerequisite. Offered each spring.
CS 136 - Computational Discrete Mathematics (Crosse-listed as MATH 136)
Additional concepts in discrete mathematics. Recurrence relations, counting, and combinatorics. Discrete probability. Algorithmic graph theory. Programming with advanced data structures. No prerequisite. Offered each fall.
CS 222 - Ethics, Values and Issues in Cybertechnology (AV,W) (Cross-listed as PHIL 222)
An overview of the ethical issues which shape modern technology, including such topics as free expression and content control, intellectual property, privacy and information access, crime and security, and concepts, methodology, and codes of cyberethics. Will not count toward the major or minor. No prerequisites. Offered annually.
CS 229 - Data Structures
A more detailed look at the memory and system components of a computer, with a focus on their roles in storing and accessing data. Students will learn the C++ programming language, use it to implement data structures at a low level of abstraction, and revisit problems from CS 128. Has a lab component. Prerequisite: CS 128. Offered each fall.
CS 253 - Software Development (W)
Explores the application of computer science through the software development process. Focuses on software engineering and the production of complete programs, from planning and user interface design through coding, testing, deployment, and maintenance. Additionally, the course covers several aspects of technical writing, encompassing documentation, specifications, and communication with clients. Prerequisites: CS 128 with a C- or above. Offered each fall.
CS 256 - Computer Organization and Architecture
Introduction to computer organization and system architecture. Topics: Boolean algebra, combinational and sequential logic design, fundamental structure of major computer hardware systems (CPU/ALU, memory, cache, registers, I/O), instruction sets, computer arithmetic, pipelining, and memory hierarchy. A two-hour weekly hardware lab is required. Prerequisites: CS 229 as a co-requisite (must have taken or be taking CS 229 to take CS 256). Offered each spring.
CS 314 - Database Systems
Introduction to the relational and semi-structured database models. Theoretical concepts include relational algebra and calculus, logical and physical database design, normalization, database security and integrity, data definition and data manipulation languages. Programming topics: database creation, modification, and querying using XQuery, MySQL and PHP. Prerequisite: CS 128 with a C- or above and Math 135. Offered in alternate years.
CS 330 - Computer Networking
Introduction to computer networking, from single, physical links to the structure of the global internet. Focuses on the internet and related technologies, its nuts and bolts, and the principles that govern how and why it works. Several advanced topics are covered, often drawn from the rapidly advancing forefront of network applications. Prerequisites: CS 229 with a C- or above and CS/Math 136. Offered in alternate years.
CS 338 - Artificial Intelligence
Artificial intelligence is, broadly, the study of computational solutions to difficult real-world problems - problems whose solutions might be considered to involve "intelligence." Applications range from self-driving cars to intelligent personal agents to challenging routing/scheduling problems. Topics include Bayesian inference, constraint satisfaction, game playing, logic, machine learning, Markov decision processes, and heuristic search. Prerequisites: CS 128 with a C- or above, MATH/CS 135, and MATH/CS 136. Offered in alternate years.
CS 354 - Algorithm Design and Analysis
Explores efficient programming through the study of algorithms and data structures. Algorithm complexity analysis. Common patterns and trade-offs; e.g., recursion, divide and conquer, greedy algorithms, parallelization, etc. Advanced data structures and abstract data models; e.g., linked structures, array-based structures, hash tables, trees, graphs, sets, etc. Prerequisites: CS 229 with a C- or above and CS/MATH 136. Offered in alternate years.
CS 355 - Programming Languages
Comparative analysis of programming languages. Taxonomy and history of programming languages, parsing, garbage collection/resource management. Type systems, semantics, and advanced object oriented and functional programming. Prerequisite: CS 229 with a C- or above and CS/MATH 135. Offered every year.
CS 357 - Models of Computing (W)
Theoretical foundations of computing. Automata, grammars, decidability and complexity. Computability and logic: undecidability and incompleteness. Automata theoretic approaches to decision problems in logic. Prerequisite: CS 128 with a C- or above and CS/MATH 135. Offered in alternate years.
CS 360 - Topics in Logic (Cross-listed as PHIL 360)
Investigation of topics in formal logic. Covers soundness, completeness, and undecidability of classical predicate logic. Additional topics might include incompleteness, non-classical logics (e.g., modal, intuitionistic, many valued), computer implementations, and logic programming. Students will complete a final project relative to the rubric (Computer Science, Philosophy) chosen at registration. Prerequisite: CS 128 and CS/MATH 135. Offered as needed.
CS 370 - Special Topics
In-depth examination of selected areas within computer science not currently offered in the curriculum. May be repeated for credit if course content is not duplicated. Prerequisite: CS 128 with a C- or above and wither CS/MATH 135 or CS/MATH 136. Offered as needed.
CS 377 - Applied Data Analysis (Cross-listed as DASC 377)
This course further develops the programming, mathematical, and statistical skills required for the application of data science tools to data analysis, data visualization, and decision making. This course includes a methodology/writing component in which students develop a draft research proposal for a capstone project. Prerequisites: CS/DASC 125, CS 126, or CS 127; CS/MATH 136 or DASC 225; BIOL 323, ECON 227, MATH 141, MATH 325, or PSYC 227. Offered in alternate years.
CS 387 - Deep Learning
Deep learning (machine learning using large neural networks) has proven to be effective at a a number of difficult tasks, with active research ongoing. Student will study mathematical foundations, implementation of neural network optimization in Python, and a number of applications of deep learning including machine vision and natural language processing. Prerequisites: CS/DASC 377 or both CS 128 with a C- or above and CS/MATH 136. Offered in alternative years.
CS 440 - Compiler Construction
Study of the techniques for translating high-level programming languages into executable machine code or byte code: lexical analysis, syntactic analysis, contextual analysis, and code generation. Comparison between compilation and interpretation as approaches to programming language implementation. Optional topics include: garbage collection, polymorphic type checking, optimization, implementation of virtual machines. Prerequisites: CS 256. Offered as needed.
CS 456 - Operating Systems
Introduction to fundamental issues and techniques of operating system design. Topics: processes and threads, process scheduling, deadlock, memory management, I/O systems, file management. Optional topics: multimedia and distributed operating systems, security, and parallel operating systems. Prerequisites: CS 229 with a C- or above. Offered in alternate years.
CS 498 - Directed Study
Individual directed study on a topic of interest to the student. Student must devise a plan of study in cooperation with instructor; may be used as preparation for CS 499. At most one of CS 498 or CS 499 can count toward the CS major, but not both. This course does not count toward the CS minor. Open only to CS majors with a GPA of 3.00 or higher in CS. Prerequisites: Two upper-level courses in CS. Requires permission of department chair and instructor. Offered by arrangement.
CS 499 - Research/Thesis
Opportunity to pursue directed or independent study of a specialized topic. Work is expected to culminate in a committee-reviewed thesis. Students enrolled in this course must present their work at a student research conference or a professional meeting, or it must be accepted for publication in a committee approved journal. At most one of the CS 498 or CS 499 can count toward the CS major, but not both. This course does not count toward the CS minor. Open only to CS majors with a GPA of 3.00 or higher in CS. Please see university-wide regulations if seeking research honors. Prerequisites: Three upper-level courses in CS and either CS 498 or other prior research experience with a faculty advisor. Requires permission of the department chair and thesis advisor. Offered by arrangement.