Computer Science (CSCI)

CSCI-110C  Introduction to Computer Science  4 Credits  
Introductory course in computer science and the study of algorithms appropriate for students in data-intensive disciplines. Topics include how computers work, simple algorithms and their efficiency, problem solving methods, networking, databases, security and the social impact of computing. Students will be introduced to an object-oriented programming language: Python.
Terms Typically Offered: Fall.
CSCI-205  Cybersecurity  3 Credits  
This course will provide a basic introduction to of all aspects of cybersecurity including business, policy and procedures, communications security, network security, security management, legal issues, political issues, and technical issues. This serves as the introduction to the cyber security track in the computer science program."

Prerequisite: CSCI-110C

Terms Typically Offered: Fall, even years.
CSCI-208  Java Programming  4 Credits  
This course is designed to familiarize the student with programming as an activity and coding in the Java language in particular. It will also serve as an introduction to object-oriented programming in general. Topics covered will include: data types and operators; flow control statements; classes, objects, and methods; inheritance; packages and interfaces; exception handling; and input/output.

Prerequisite: CSCI-110C

Terms Typically Offered: Spring.
CSCI-216  Introduction to Web Programming  3 Credits  
Explores front-end web development technologies and techniques with a focus on HTML, CSS, JavaScript and supporting libraries and frameworks. Students should be familiar with basic programming and database concepts prior to taking this course. Topics include database design, scalability, security, and user experience. Through hands-on projects, you'll learn to write and use APIs, create interactive UIs, and leverage cloud services. By course's end, students will emerge with knowledge and experience in principles, languages, and tools that empower them to design and deploy applications on the Internet.

Prerequisite: CSCI-110C

Terms Typically Offered: Spring, even years.
CSCI-217  Database Systems 1  3 Credits  
This course covers the fundamental concepts of database systems. Topics include data models (ER, relational, and others); query languages (relational algebra, SQL, and others); implementation techniques of database management systems (index structures, concurrency control, recovery, and query processing); management of semistructured and complex data; distributed and noSQL databases.

Prerequisite: CSCI-110C

Terms Typically Offered: Spring, odd years.
CSCI-218  Python Programming  4 Credits  
Introduction to programming basics (what it is and how it works), binary computation, problem-solving methods and algorithm development. Includes procedural and data abstractions, program design, debugging, testing, and documentation. Covers data types, control structures, functions, parameter passing, library functions, arrays, inheritance and object oriented design. Lecture Lab Combination. Laboratory exercises in Python.

Prerequisite: CSCI-110C

Terms Typically Offered: Fall.
CSCI-270  Special Topic in Computer Science  3 Credits  
Terms Typically Offered: On Demand.
CSCI-302  Algorithm Design and Applications  3 Credits  
This is an intermediate algorithms course with an emphasis on teaching techniques for the design and analysis of efficient algorithms, emphasizing methods of application. Topics include divide-and-conquer, randomization, dynamic programming, greedy algorithms, incremental improvement, complexity, and cryptography.

Prerequisite: MATH-375

Terms Typically Offered: Spring, odd years.
CSCI-305  Programming Languages  3 Credits  
This course covers the basic concepts and design tradeoffs of programming languages. Examine different languages and compare their properties as well as the cost-benefits of different implementations. The first half of the course focuses on functions, types, scope, storage management, exceptions, and continuations. The second half covers object-oriented features and concurrency.

Prerequisite: CSCI-208 or CSCI-218

Terms Typically Offered: Spring, even years.
CSCI-309  Network Security and Digital Crime  3 Credits  
This course provides an introduction to the methodology and procedures associated with digital forensic analysis in a network environment. Students will develop an understanding of the fundamentals associated with the topologies, protocols, and applications required to conduct forensic analysis in a network environment. Students will learn about the importance of network forensic principles, legal considerations, digital evidence controls, and documentation of forensic procedures. This course will incorporate demonstrations and laboratory exercises to reinforce practical applications of course instruction and will require an independent research paper related to the course topic.

Prerequisite: CSCI-205

Terms Typically Offered: On Demand.
CSCI-317  Data Structures  4 Credits  
This course investigates abstract data types (ADTs), recursion, algorithms for searching and sorting, and basic algorithm analysis. ADTs to be covered include lists, stacks, queues, priority queues, trees, sets, and dictionaries. The emphasis is on the trade-offs associated with implementing alternative data structures for these ADTs.

Prerequisite: MATH-181C, CSCI-208

Terms Typically Offered: Fall, even years.
CSCI-320  Digital Forensics and Investigation  3 Credits  
This course is an overview of the principles and practices of digital investigation. Fundamentals and the importance of digital forensics is emphasized. Students learn different techniques and procedures that enable them to perform a digital investigation with a primary focus on the analysis of physical storage media and volume analysis. It covers the major phases of digital investigation such as preservation, analysis and acquisition of artifacts that reside in hard disks and random-access memory. Upon completion of the course, students will be able to apply open-source forensics tools to perform digital investigations and understand the underlying theory behind these tools.

Prerequisite: CSCI-110C

Terms Typically Offered: On Demand.
CSCI-325  Introduction to Networks  4 Credits  
An introduction to the design and analysis of computer communication networks. Topics include application layer protocols, Internet protocols, network interfaces, local and wide area networks, wireless networks, bridging and routing, and current topics. Lecture and lab combination. The lab is structured around exercises that highlight topics such as addressing, subnetting, bridging, ARP, routing (RIP, OSPF), TCP, ICMP, NAT, DHCP, DNS, etc. Students are required to review introductory networking material for each lab.

Prerequisite: CSCI-100C, MATH-180C

Terms Typically Offered: Spring, odd years.
CSCI-330  Introduction to Operating Systems  3 Credits  
This course will introduce modern operating systems. The course will begin with an overview of the structure of modern operating systems. And then will analyze in detail each of the major components of an operating system (from processes to threads), and explore more advanced topics in the field, including memory management and file input/output. Covers the classical internal algorithms and structures of operating systems, including CPU scheduling, memory management, and device management. Considers the unifying concept of the operating system as a collection of cooperating sequential processes. Covers topics including file systems, virtual memory, disk request scheduling, concurrent processes, deadlocks, security, and integrity. The focus is on UNIX-based operating systems, though learning will also cover alternative operating systems, including Windows. Lecture, 3 hours. A complementary lab course allows students to practice and implement topics from lecture.

Prerequisite: CSCI-208

Terms Typically Offered: Fall, odd years.
CSCI-401  Database Systems 1  3 Credits  
This course covers the fundamental concepts of database systems. Topics include data models (ER, relational, and others); query languages (relational algebra, SQL, and others); implementation techniques of database management systems (index structures, concurrency control, recovery, and query processing); management of semistructured and complex data; distributed and noSQL databases.

Prerequisite: CSCI-317 and CSCI-302

Terms Typically Offered: Fall, even years.
CSCI-411  Software Engineering 1  3 Credits  
Learn how to apply an engineering approach to computer software design and development by focusing on topics like life cycle models, software requirements, specification, conceptual model design, detailed design, validation and verification, design quality assurance, software design/development environments, and project management.

Prerequisite: CSCI-302, CSCI-317, and CSCI-415

Terms Typically Offered: Spring, even years.
CSCI-415  Computer Architecture  3 Credits  
Modern computer technology requires an understanding of both hardware and software, since the interaction between the two offers a framework for mastering the fundamentals of computing. The purpose of this course is to cultivate an understanding of modern computing technology through an in-depth study of the interface between hardware and software. An overview of computer architecture, which stresses the underlying design principles and the impact of these principles on computer performance will be surveyed. General topics include design methodology, processor design, control design, memory organization, system organization, and parallel processing. Lecture, 3 hours. A complementary lab course allows students to practice and implement topics from lecture.

Prerequisite: CSCI-208, CSCI-330

Terms Typically Offered: Fall, odd years.
CSCI-425  Computing Theory  3 Credits  
The goal of this course is to understand the fundamental limits on what can be efficiently computed in our universe and other possible universes. These limits reveal deep and mysterious properties about information, knowledge, and processing, as well as practical issues about what can and cannot be computed. The course introduces the foundations of automata theory, computability theory, and complexity theory. Shows relationship between automata and formal languages. Addresses the issue of which problems can be solved by computational means (decidability vs undecidability), and introduces concepts related to computational complexity of problems. Lecture, 3 hours.

Prerequisite: CSCI-302, CSCI-317, MATH-285

Terms Typically Offered: Spring, even years.
CSCI-430  Cryptology  3 Credits  
The objective of this course is to provide a foundation of cryptography in an applied manner so that students can grasp its importance in relation to the rest of information security. The course covers principles of number theory and cryptographic algorithms and cryptanalysis. Topics include: steganography, block and stream ciphers, secret key encryption (DES, AES, RC-n), primes, random numbers, factoring, and discrete logarithms; Public key encryption (RSA, Diffie-Hellman, Elliptic curve cryptography); Key management, hash functions, digital signatures, certificates and authentication protocols. Cryptanalytic methods (known, chosen plaintext etc.) for secret and public key schemes (linear and differential cryptanalysis, Pollard's rho method, number field sieve, etc.) Recommended to take Math-330.

Prerequisite: CSCI-317

Terms Typically Offered: On Demand.
CSCI-450  UG Research Internship Program  1-4 Credits  
This course may be taken for a maximum of four (4) units in one semester. A maximum of six (6) combined unit credits for CSCI-450 or CSCI-485 apply to graduation. This course is designed with the purpose of providing students the opportunity to conduct research off-campus at universities or companies in the community. This course promotes early entry into the workplace for the student through part-time employment. This course requires actual work experience be sought in an appropriate business firm providing an opportunity to integrate classroom teaching in practical application under the direct supervision of the assigned instructor. Students are responsible for completing a project report and presenting their research results in CSCI-499C. Registration is limited to juniors or seniors.
Terms Typically Offered: On Demand.
CSCI-470  Special Topic in Computer Science  3 Credits  
Terms Typically Offered: On Demand.
CSCI-485  Undergraduate Computer Science Research  1-4 Credits  
This course provides the student with an empirically-based research experience in the computer sciences. Emphasis will be placed on project management, software development, and research documentation skills. This course is a variable credit course. Two units are recommended for all computer science majors. It is expected that a research report be completed at the conclusion of the research project and an oral presentation of the results be given in CSCI-499C. This course may be repeated for credit. Junior or senior standing. Lab fee.
Terms Typically Offered: Fall.
CSCI-499C  Computer Science Capstone  3 Credits  
This course includes analysis and evaluation of current research in computer sciences and the integration of faith and learning in the computer sciences. A senior project and an oral presentation of this project is required. In-class presentations by faculty and guests are a part of the course. This course fulfills the Core Curriculum Capstone requirement for Computer Science majors.

Prerequisite: CSCI-450 or CSCI-485

Terms Typically Offered: Spring.