Computer Science (CSCI)

CSCI 110 —  Survey of Computer Science Course count: 1 

A survey of the science and art of computing intended for students not majoring in mathematics or science. Half of the course is an introduction to computer programming. Emphasis is placed upon language independent topics such as structured programming, good programming style, the use of subprograms, and algorithm construction in general. The other half of the course explores how computers are built, how they operate, and what their fundamental limitations are.

Prerequisite: Students who are computer science, math, or science majors or minors may not enroll in this course. Students who have taken any higher level computer course may not enroll in this course.

GPA units: 1

Common Area: Mathematical Science

Typically Offered: Annually

CSCI 131 —  Techniques of Programming Course count: 1 

A broad introduction to fundamental concepts in computer science, with emphasis on designing and writing correct and elegant computer programs. Concepts are illustrated through examples drawn from a variety of application areas and may include graphics, digital media, scientific computing, or games. Weekly lab meetings provide supervised practice. This course is appropriate for any student interested in creating or understanding software, and students with little or no prior programming experience are welcome. Students in this course develop both real-world programming skills and gain a foundation for applications in mathematics, the sciences, economics, accounting, or any other discipline in which computing plays an important role. This course also prepares students for further study in Computer Science 132, Data Structures, and it is required for both the major and the minor.

GPA units: 1.25

Common Area: Mathematical Science

Typically Offered: Fall, Spring

CSCI 132 —  Data Structures Course count: 1 

An introduction to techniques for storing and manipulating complex data. Students gain experience with sophisticated programs by studying frequently used data structures, including stacks, lists, trees, graphs, and hash tables, and by discussing algorithms for searching, sorting, graph traversal, and hashing. Weekly lab meetings provide supervised practice designing, implementing and using these data structures. As time allows, students also begin an introduction to analysis of algorithms by examining the space and time efficiency of data structures and related algorithms. This course is required for both the major and the minor.

Prerequisite: CSCI 131 or equivalent. A grade of C in CSCI 131 is required to continue in CSCI 132, except by permission (please contact the course instructor or computer science program coordinator).

GPA units: 1.25

Typically Offered: Fall, Spring

CSCI 135 —  Discrete Structures Course count: 1 

An introduction to the discrete mathematical structures that form the basis of computer science. Topics include proof techniques, relations and functions, set theory, Boolean algebra and propositional logic, predicate calculus, graphs, trees, induction and recursion, counting techniques and discrete probability. It is recommended this class be taken concurrently with Computer Science 132.

Students who have taken MATH 243 may not enroll in this class.

GPA units: 1

Common Area: Mathematical Science

Typically Offered: Spring

CSCI 202 —  Advanced Java and Object Oriented Programming Course count: 1 

This course is intended for students interested in improving their programming skills through practice with modern Java concepts and Object Oriented Programming. Topics may include exception handling, standard library collections and templates, inheritance, polymorphism, overloading, interfaces, and iterators, for-each loops. Students will complete guided and independent projects, including group projects.

Prerequisite: CSCI 132 - Data Structures

GPA units: 1

Typically Offered: Alternate Years

CSCI 220 —  Software Development and Operations Course count: 1 

This course is about modern tools, platforms, and practices for software development and operations, commonly known as DevOps. The main focus will be towards Continuous Integration / Continuous Delivery. Students will also gain experience working with tools used commonly for careers in software engineering, development, and operations, such as Amazon Web Services EC2, Agile development practices, source code management using git, virtualization platforms like Docker, and monitoring using DataDog or JMeter/Gatling.

Prerequisite: CSCI 132 - Data Structures

GPA units: 1

Typically Offered: Annually

CSCI 226 —  Computer Systems & Organization Course count: 1 

Covers fundamental topics related to the design and operation of a modern computing system. Relationships are drawn between circuits and system software. Topics include hardware and software organization, virtual machines, physical fundamentals of transistors, digital logic design, memory system organization, architecture and management, CPU design, multiprocessors, data representation, machine language, microprogramming, assembly language, assemblers and linkers, CISC versus RISC, interrupts and asynchronous event handling, networking, and the past and present of computer system design, architecture, and organization.

Prerequisite: CSCI 132 with a grade of C or higher or permission of Computer Science Coordinator. Enrollment limited to CSCI Majors and Minors.

GPA units: 1

Typically Offered: Fall, Spring

CSCI 235 —  Analysis of Algorithms Course count: 1 

Provides an introduction to the design and analysis of fundamental algorithms and their complexity. Presents several algorithm design strategies that build on the data structures and programming techniques introduced in Computer Science 132. The general techniques covered include: Divide-and-conquer algorithms, dynamic programming, greediness and probabilistic algorithms. Topics include: sorting, searching, graph algorithms, O-notation, and introduction to the classes P and NP, and NP-completeness.

Prerequisite: CSCI 132 with a C or better and one semester of Calculus or permission of the instructor. Enrollment limited to CSCI Majors and Minors.

GPA units: 1

Typically Offered: Fall, Spring

CSCI 299-F02 —  Software Engineering Course count: 1 

In this project-based course, students work in teams to complete a semester-long project following software engineering best practices. The resulting minimal viable product may be a web application or other interactive software, and will involve planning, database integration and testing, and presentations. Students consider the life cycle of large software projects, beginning with the elicitation and definition of users' requirements and continuing through software design, documentation, coding, testing and maintenance. Topics include: modularity, coupling, cohesion, transformational and transactional structures and testing strategies. Working in teams, students gain practical experience developing software to solve concrete problems.

Prerequisite: CSCI 132

GPA units: 1

CSCI 307 —  Data Mining Course count: 1 

Data Mining refers to the process of extracting useful models of data. Sometimes, a model can be a summary of the data, or it can be the set of most extreme features of the data. Computer scientists often approach data mining in one of two ways, as an algorithmic problem or by using data along with a machine learning engine. This course provides an introduction to Data Mining and will examine data techniques for the discovery, interpretation and visualization of patterns in large collections of data. Topics covered in this course include data mining methods such as classification, rule-based learning, decision trees, association rules, and data visualization. The work discussed originates in the fields of artificial intelligence, machine learning, statistical data analysis, data visualization, databases, and information retrieval.

Prerequisite: CSCI 132

GPA units: 1

Typically Offered: Alternate Years

CSCI 324 —  Programming Languages: Design and Implementation Course count: 1 

Principles for designing and implementing programming languages are presented as well as styles and features that encourage and discourage the writing of good software. Topics include language syntax and semantics, comparison of language features and their implementation, methods of processing a program, establishing the run-time environment of the program and the major programming language paradigms (the imperative/procedural, functional/applicative, declarative/logic and object-oriented paradigms).

Prerequisite: CSCI 226. Enrollment limited to CSCI Majors and Minors.

GPA units: 1

Typically Offered: Spring

CSCI 325 —  Computer Security Course count: 1 

This course presents the fundamental concepts and principles of computer security. Topics include cryptographic tools, user authentication, access control, malicious software, denial-of-service attacks, intrusion detection, and intrusion prevention systems. Software security and operating system security are studied in detail. Additional areas of study may include security management, risk assessment, human resources security and the many legal, social, and ethical aspects of computer security.

Prerequisite: CSCI 132. Enrollment is limited to CSCI majors and minors only.

GPA units: 1

Typically Offered: Alternate Years

CSCI 327 —  Databases Course count: 1 

An introduction to database concepts and database management systems, including the storage, processing, evaluation, display, and security of data. This course focuses on the study of logical and physical database design; fundamental data management and query techniques using SQL, a ubiquitous data query language; and methodologies for database development including relational approaches and object-oriented approaches. Practical skills are emphasized to allow students to create, manage, use, and analyze concrete databases and the corresponding information systems using state-of-the-art industry-standard software products, such as Oracle, Microsoft SQL Server, MySQL or PostgreSQL.

Prerequisite: CSCI 132.

GPA units: 1

Typically Offered: Alternate Years, Spring

CSCI 328 —  Ethical Issues in Computer Science Course count: 1 

Examines the ethical issues that arise as a result of increasing use of computers, and the responsibilities of those who work with computers, either as computer science professionals or end users. The course stresses the ways in which computers challenge traditional ethical and philosophical concepts, and raise old issues in a new way. Students will be expected to read and understand the ideas in the readings, explain the ideas, analyze issues and see them from diverse perspectives, and formulate and critique arguments. Readings include technical issues in computer science and may focus on a particular area such as software design as well as more traditional topics such as philosophical theories (e.g. ethical relativism, utilitarianism, deontological theories, rights and virtue ethics), privacy, intellectual property rights and proprietary software, security, accountability, liability, the digital divide, hacking, and viruses. There are several course goals: (1) to give a fuller, richer, deeper understanding of the social impact of computers and the ethical issues in human activities affected by computers, (2) to prepare the student for living in a computerized world and perhaps working as a professional in the computing field, and (3) to improve presentation, debating and writing skills.

Prerequisite: CSCI 132. Enrollment limited to CSCI Majors and Minors.

GPA units: 1

Typically Offered: Fall

CSCI 343 —  Computer Graphics Course count: 1 

A survey of topics in computer graphics with an emphasis on fundamental techniques and the theory underlying those techniques. Topics include the fundamentals of two and three dimensional graphics such as clipping, windowing, and coordinate transformations (e.g., positioning of objects and camera), raster graphics techniques such as line drawing and filling algorithms, hidden surface removal, shading, color, curves and surfaces and animation. Students learn how to program graphics displays using a computer graphics package.

Prerequisite: CSCI 132 and one semester of calculus or permission of the instructor. Enrollment limited to CSCI Majors and Minors.

GPA units: 1

Typically Offered: Alternate Years

CSCI 345 —  Theory Of Computation Course count: 1 

This course considers the theoretical foundations of computer science through different computational models. Topics covered in this course include deterministic and non-deterministic finite automata, regular expressions, context-free grammars, pushdown automata, Turing machines, decidability, undecidability, and computational complexity including the P vs. NP problem.

Prerequisite: CSCI 132 and CSCI 135 or permission of the instructor. Enrollment limited to CSCI Majors and Minors.

GPA units: 1

Typically Offered: Alternate Years

CSCI 346 —  Operating Systems Course count: 1 

Provides an introduction to the general model of operating systems principles and current implementation techniques. The principles and mechanisms that underlie operating systems services will be covered. Students will learn techniques for managing hardware resources and sharing them among many competing processes and threads. They will study the internal structures needed for process and thread management, synchronization, inter-process communication, memory management (including shared memory), file system management, distributed systems principles, device control, and security.

Prerequisite: CSCI 226. Enrollment limited to CSCI Majors and Minors.

GPA units: 1

Typically Offered: Alternate Years

CSCI 347 —  Artificial Intelligence Course count: 1 

This course provides an introduction to the field of artificial intelligence. Topics include solving problems using search (e.g., depth-first search, iterative deepening, and A*), constraint satisfaction problems, propositional logic and first-order logic, inference in propositional logic and first-order logic, and machine learning techniques (e.g., decision trees and neural networks).

Prerequisite: CSCI 235 or permission of the instructor.

GPA units: 1

CSCI 356 —  Computer Networking Course count: 1 

This course focuses on principles of computer networking. Students will gain an understanding of the low-level protocols that drive the Internet, including protocols for data forwarding, routing, congestion, flow control, reliability, naming, and discovery, along with their application to distributed systems. Topics are introduced from a theoretical perspective, but students will also gain practical experience designing, implementing, and measuring distributed systems, such as web servers, email and messaging systems, video and data distribution, and cloud computing.

Prerequisite: CSCI 226

GPA units: 1

Typically Offered: Alternate Years

CSCI 363 —  Computational Vision Course count: 1 

An introduction to the algorithms underlying machine and biological visual systems. Examines the processes involved in converting a 2-dimensional image to a 3-D representation of the physical world. Computational models of visual processing will be compared to physiological and psychophysical results from human and other biological visual systems. Topics covered include: edge detection, stereopsis, motion computation, shape from shading, color and object recognition.

Prerequisite: CSCI 132 and one semester of Calculus

GPA units: 1

Typically Offered: Alternate Years

CSCI 364 —  Compiler Construction Course count: 1 

The theories, tools and techniques for translator creation are the focus of this course. Topics include: regular expressions, grammars, finite state machines, lexical analysis, parsing, linguistic approaches to problem solving, intermediate code trees, register allocation, code generation, a variety of optimization schemes and techniques as well as Linux-style support for translation such as lex/flex and yacc/bison. An essential and distinguishing feature of the course is the project requirement. Students are required to build a working compiler that is a large software engineering project of significant complexity. This course carries the project course designation.

Prerequisite: CSCI 324 or permission of the instructor. Enrollment limited to CSCI Majors and Minors.

GPA units: 1

Typically Offered: Alternate Years

CSCI 399-F01 —  Machine Learning Course count: 1 

The course provides a comprehensive study of machine learning techniques, including supervised and unsupervised learning. Topics include supervised learning techniques for classification and regression such as decision trees, k-nearest neighbors, linear models, and neural networks; also includes unsupervised learning techniques such as principal component analysis, clustering etc. The course will also cover the essentials of applied linear algebra and calculus as necessary, and an introduction to Python programming and associated libraries and tools.

Prerequisite: CSCI 132

GPA units: 1

CSCI 399-S01 —  Advanced Algorithms Course count: 1 

This course builds on students knowledge of Data Structures and Analysis of Algorithms and introduces advanced algorithms. This course focuses on giving the students multiple skills: analyze and understand advanced algorithms, design new algorithms, apply known algorithms to solve problems, and implement algorithms using programming language for a large project.For this, we will see multiple sections, Algorithms with Numbers, advanced data structures, linear programming, approximation algorithms, randomized Algorithms, and miscellaneous topics such as matching and voting algorithms.

Prerequisite: CSCI 235

GPA units: 1

CSCI 400 —  Directed Reading Course count: 1 

An independent reading project for upper division students. Normally this will be on a topic that is not covered by the regular course offerings. Permission of the instructor and the Department Chair is required for this course.

GPA units: 1

Typically Offered: Fall, Spring

CSCI 410 —  Directed Project Course count: 1 

A project course for upper division students under the direction of a faculty member. Normally the project will provide an introduction to research on a topic that is not covered by the regular course offerings. Course requirements are to be arranged in consultation with the instructor. Permission of the instructor and the department chair is required for this course.

GPA units: 1

Typically Offered: Fall, Spring

CSCI 495 —  Computer Science Honors Thesis Course count: 1 

This is a large project extending over the course of the fourth year. It can consist of original research or be of an expository nature and is written under the guidance of one or more members of the department. A student will earn at least one unit of credit in the spring semester of the fourth year for successful completion of an honors thesis, unless the thesis work is done as part of the student's participation in a department seminar. In that case, no extra credit is given above the credit for the seminar itself. For a particularly extensive project, and with the permission of the department chair, a student may earn one unit in each semester of the fourth year for the completion of the thesis.

GPA units: 0

Typically Offered: Annually

CSCI 496 —  Computer Science Honors Thesis Course count: 1 

This is a large project extending over the course of the fourth year. It can consist of original research or be of an expository nature and is written under the guidance of one or more members of the department. A student will earn at least one unit of credit in the spring semester of the fourth year for successful completion of an honors thesis, unless the thesis work is done as part of the student's participation in a department seminar. In that case, no extra credit is given above the credit for the seminar itself. For a particularly extensive project, and with the permission of the department chair, a student may earn one unit in each semester of the fourth year for the completion of the thesis.

GPA units: 2

Typically Offered: Annually