CS 111 Physical Computing
Physical computing involves creating and using programmable objects that interact
with the physical world and the people around them. In this class, we will approach
computing from this perspective, learning about the fundamentals of programming and
electronics as we create. No programming or electronics experience is necessary. This
course does not count towards the computer science major or minor. Offered as needed.
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.
No prerequisites. Offered each fall.
CS 126 Introduction to Computer Science Using the Web (FR)
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. No prerequisites. Offered each term.
CS 127 Computer Science I (FR)
Introduction to computer science as a field of study and object-oriented programming
as a core component thereof. Focuses primarily on programming concepts and techniques:
variables, data types, loops, conditionals, functions, objects, classes, testing,
and program design. Also covers UNIX fundamentals and other practical aspects of programming.
No prerequisites. Offered each term.
CS 128 Computer Science II
Introduction to data structures and algorithmic problem solving. Encapsulation and
information hiding, recursion, algorithm techniques, and time complexity. Advanced
object oriented programming with inheritance, static and dynamic memory allocation.
Linked lists, stacks, queues, and sequential and binary search. Prerequisite: CS 125/DASC
125, CS 126, or CS 127. Offered each term.
CS 135 Applications of Sets, Logic, and Recursion (FR)
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
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 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: 128. 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: 128. 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: 128 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: 128 and 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: 128, 135, and 136. Offered in alternate
CS 354 Algorithm Design and Analysis
Explores efficient programming through the study of algorithms and data structures.
Algorithm complexity analysis. Common patterns and tradeoffs; 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: 128 and Math 136. Offered every year.
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: 128 and 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: 128 and Math 135, or CS/Math/Phil 360.
Offered every year.
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, Mathematics, Philosophy) chosen at registration. Prerequisite: 128 and Math
135. Offered as needed.
CS 397 Internship
This non-credit course is offered by arrangement with the department head. Application
must be made at the beginning of the semester prior to the internship. Prerequisites:
128. Offered each term.
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:
253 and 355. 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: 253 and 256. 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.