Computer Science

The Computer Science program provides a firm foundation in the theory and application of computing while allowing for additional concentration in areas of choice, such as information systems, mainframe computing, computer networking, telecommunications, data and knowledge engineering, and software development. This discipline is based on building software tools that make computers useful.

Mission and Vision

The mission of the Computer Science Department is:

  • Pursue research promoting technological advances in computer science aligned with the needs of 21st century society.
  • Leverage best practices to engage undergraduate and graduate students in unique research and learning experiences both in and out of the classroom, and
  • Take a leading role in promoting computer science and computational thinking across communities we serve

The vision of the Department is to create dynamic research and teaching environments that promote a computationally empowered society ready to tackle complex problems in rapidly changing technological landscapes.

Bachelor of Science in Computer Science

The Bachelor of Science in Computer Science provides students with a solid background in the fundamentals of computing and prepares each individual for employment in a wide variety of positions and for graduate study in computer science. The content of the Department’s courses is continually monitored to ensure they are consistent with the fast-changing developments in the discipline.  Appropriate university and departmental computing resources are available to students taking computer sciences courses.

Accreditation

The Computer Science program is accredited by the Computing Accreditation Commission of ABET, Inc., which is the recognized accreditor of college and university programs in applied science, computing, engineering, and engineering technology. ABET accreditation demonstrates a program's commitment to providing its students with a quality education. General information about the College of IS&T's accreditation as well as specific educational objectives for its ABET accredited program in Compute Science can be found here.

Repeatable Grades/Courses

A repeated course may count only once for graduation.  Exceptions are internships, independent studies, physical education activities courses, and special topic courses.

For students repeating any Computer Science courses (CSCI 1xxx-4xxx):

  1. A formal warning shall be conveyed to the student upon receiving a grade below C- in  CSCI courses for a second time.
  2. The student shall not be allowed to enroll in the course after receiving a grade below C- for the third time.

Attendance Policy for Computer Science Courses

  1. A formal warning shall be conveyed to the student upon the second instance (first instance for summer session) of unexcused absence from a class.
  2. The student shall be withdrawn from the class after the third instance (second instance for summer session) of unexcused absence from the class.

Contact

For more information, contact the College of IS&T Academic Advising Office at 402.554.3819.

Website

Minors Offered

Careers Options:

Computer Science majors have gone on to become the following and more. We will prepare you for jobs that do not even exist yet.

  • Software Engineers and Programmers
  • Web and Mobile Application Developers
  • Enterprise Architect
  • Project Managers
  • Network and Cloud Architects
  • Database Developers
  • Game Developers
  • User Experience Designers
  • Data Scientists
  • Artificial Intelligence Engineers

CSCI 1200  COMPUTER SCIENCE PRINCIPLES (3 credits)

This course introduces students to the foundational principles of computer science. It aims to help students learn the essential thought processes used by computer scientists to solve problems, expressing those solutions as computer programs. The exercises and projects make use of mobile devices and other emerging platforms.

Prerequisite(s): High school algebra or equivalent.

Distribution: Natural/Physical Sci General Education lecture

CSCI 1204  COMPUTER SCIENCE PRINCIPLES LABORATORY (1 credit)

This is a laboratory course for students enrolled in CSCI 1200. It consists of programming exercises designed to help students practice computational thinking and apply computational solutions to practical problems. The exercises make use of mobile devices and other emerging platforms.

Prerequisite(s): CSCI 1200, prior or concurrent.

Distribution: Natural/Physical Sci General Education lab course

CSCI 1280  INTRODUCTION TO COMPUTATIONAL SCIENCE (3 credits)

Introduction to Computational Science explores the role of computer science in scientific inquiry. Through the construction and analysis of block-based visual artifacts (e.g., pixel art and geometric patterns), this course aims to help students learn the essential thought processes used by computer scientists to solve problems, expressing those solutions as computer programs. When executed, these computer programs produce visual artifacts that can be displayed and interacted with using a variety of tools/software including LEGO Digital Designer, Minecraft, LDraw, 3D Builder, and Virtual Reality systems such as the HTC Vive.

Prerequisite(s): MATH 1120 or MATH 1130 or MATH 1220 or equivalent with C- or better, or permission of the instructor

Distribution: Natural/Physical Science General Education course and Natural/Physical Sci General Education lecture

CSCI 1620  INTRODUCTION TO COMPUTER SCIENCE II (3 credits)

This course introduces students to advanced programming techniques and algorithm analysis. The topics covered will enable students develop large scale software with efficient algorithms that are maintainable. This course has a required laboratory component; students must register for the laboratory section attached to their lecture section.

Prerequisite(s): CIST 1400 (with a grade of C or better)

CSCI 2030  MATHEMATICAL FOUNDATIONS OF COMPUTER SCIENCE (3 credits)

This course introduces discrete mathematics concepts that are foundational for the study of computer science such as functions, relations, and sets, basic logic, methods of proof, mathematical induction, computational complexity, recursion, counting, recurrences, and relations.

Prerequisite(s): (CIST 1400 with grade of C or better) AND (MATH 1930 or MATH 1950 with grade of C- or better)

CSCI 2040  INTRODUCTION TO MATHEMATICAL PROOFS (1 credit)

This course will provide an introduction to mathematical proofs and the art of reading, writing, and debugging proof attempts including mathematical notations, proof and counterexample generation methods and strategies. It will develop the rigor and precision needed to establish and refute mathematical conjectures and reason about the correctness of programs.

Prerequisite(s): CSCI 2030 as corequisite.

CSCI 2240  INTRODUCTION TO C PROGRAMMING (3 credits)

Programming in 'C' in a UNIX operating system environment; algorithm and program development and file manipulation using 'C'; UNIX-like utility development.

Prerequisite(s): CSCI 1620 with grade of C or better

CSCI 2410  INTRODUCTION TO DATA ANALYTICS USING PYTHON (3 credits)

This course is an introduction to the basic concepts and principles of data analytics using the Python programming language. The first part of the course covers major Python language topics including procedures and functions, iteration, recursion, arrays and matrices, strings, operational model of procedure and function calls, algorithms, exceptions, object-oriented programming, and file input/output. The coverage of Python language features are aimed mainly at the data analytics studies of this course. The second part of the course emphasizes applying Python and its rich functional libraries and special software packages to data munging, analysis, mining, and visualization, and machine learning techniques including statistical analysis, parameter estimation, regression, classification, predictive modeling construction, etc.

Prerequisite(s): (CSCI 1620 with grade of C or better) AND (CIST 2500 or equivalent statistics course with grade of C- or better). Not open to non-degree graduate students.

CSCI 2510  INTRODUCTION TO GAME PROGRAMMING (3 credits)

The course will cover programming and development techniques used in a game programming environment. The course is designed for students who have an interest in game programming to be eased into the concepts in a familiar environment.

Prerequisite(s): CSCI 2240 with C- or better. Not open to non-degree graduate students.

CSCI 2620  2D GRAPHICS: IMAGE PROCESSING (3 credits)

This class introduces the 2D graphics area of image processing, which takes an image, creates an internal model of the image, modifies it using a computer program, and produces a new image. Specific techniques covered in this course include color spaces, image transformations, edge detection, file formats, object tracking, and background removal.

Prerequisite(s): CSCI 1620 with grade of C or better

CSCI 2830  OBJECT-ORIENTED SOFTWARE ENGINEERING FUNDAMENTALS (3 credits)

This course introduces students to the central principles and practices of object-oriented design and programming. Common strategies and practices for the systematic development of larger object-oriented systems are also covered.

Prerequisite(s): CSCI 1620 (in Python)

CSCI 2840  C++ & OBJECT-ORIENTED PROGRAMMING (3 credits)

C++ and Object Oriented Programming (OOP) is taught in the UNIX environment. Topics include C++ as a 'Better C,' OOP with C++, classes and data abstraction, operator overloading, inheritance, virtual functions and polymorphism, C++ stream I/O.

Prerequisite(s): CSCI 2240; High-level programming language like Pascal, Java, or C++; solid understanding of pointers & scope; ability to design & implement solutions to modest problems (with C- or better).

CSCI 2850  PROGRAMMING ON THE INTERNET (3 credits)

This course is intended as a continuation of the exploration of topics covered in CIST 1300. The course will provide students with a broad overview and understanding of the following topics: understanding how a web server works, configuring web servers, using databases for data storage and retrieval, understanding model-view-controller design, and using JavaScript for client-side programming.

Prerequisite(s): (CIST 1300 with grade of C- or better) AND (CIST 1400 with grade of C or better)

CSCI 2960  SHORT TOPICS FOR PROGRAMMERS (1 credit)

This course provides a hands-on introduction to contemporary programming languages and tools for software development not covered in other courses. Each offering focuses on one such technology. The course emphasizes informal and practical learning, and points students to relevant coursework for more systematic coverage of underlying principles.

Prerequisite(s): CSCI 1620 or instructor permission

CSCI 2980  TOPICS IN COMPUTER SCIENCE (3 credits)

A variable topic course in computer science at the sophomore level. Topics not covered in the computer science degree program, but suitable for sophomore-level students.

Prerequisite(s): CSCI 1620. Permission of instructor. Additional prerequisites may be required for particular topic offerings with C- or better.

CSCI 3100  APPLIED COMBINATORICS (3 credits)

Basic counting methods, generating functions, recurrence relations, principle of inclusion-exclusion. Polya's formula. Elements of graph theory, trees and searching network algorithms. (Cross-listed with CSCI 8105, MATH 3100, MATH 8105).

Prerequisite(s): MATH 2030, MATH 2040, MATH 2230, or CSCI 2030 all with a C- or better. Mathematical logic; Set theory; Relations; Functions; Congruences; Inductive and recursive definitions; Discrete probability; sets, graphs, trees, & matrices

CSCI 3320  DATA STRUCTURES (3 credits)

This is a core that will cover a number of data structures such as tree, hashing, priority queues and graphs as well as different algorithm design methods by examining common problem-solving techniques. (Cross-listed with CSCI 8325)

Prerequisite(s): CSCI 1620 and CSCI 2030 or MATH 2030. Programming Languages: Java or C++ Topics: Arrays, Pointers, Introductory Lists, Storage Allocation (with C- or better).

CSCI 3450  NATURAL LANGUAGE PROCESSING (3 credits)

The course will provide overview of the topics in natural language processing such as word and sentence tokenization, syntactic parsing, semantic role labeling, text classification. We will discuss fundamental algorithms and mathematical models for processing natural language, and how these can be used to solve practical problems. We will touch on such applications of natural language processing technology as information extraction and sentiment analysis. (Cross-listed with CYBR 3450).

Prerequisite(s): Prereq: CSCI 2030 with C- or better; Co-req: CSCI 3320 with C- or better; Students should be comfortable w/ scripting (Python is the language extensively used in natural language processing tools including NLTK). Not open to non-degree graduate students.

CSCI 3470  FUNDAMENTALS AND ALGORITHMS OF MACHINE LEARNING (3 credits)

This course discusses the fundamentals and algorithms of machine learning and contains both theory and application. Machine learning, as a subset of artificial intelligence, is the scientific study of models that computer systems use to perform a specific task without explicit instructions. Topics in this course will include supervised learning such as Decision Tree, Perceptron, Support Vector Machine, Naive Bayes, and Regression, unsupervised learning such as clustering, dimensionality reduction, kernel methods, learning theory such as bias/variance trade-offs, Generalization and Overfitting and large margins. Other crucial topics will include discussions such as Stacking, Semi-Supervised Learning and Interactive Learning. This course will also discuss a few applications in problem domains such as in computer vision.

Prerequisite(s): CSCI 2410 or instructor permission. Not open to non-degree graduate students.

CSCI 3510  ADVANCED GAME PROGRAMMING (3 credits)

This course is intended for those with an interest in video game programming. This course introduces the advanced concepts of game programming including 3D programming, game networking, and development of a multiplayer, networked game by learning and using the XNA environment.

Prerequisite(s): CSCI 2510 and CSCI 3320 with C- or better, or Instructor permission. Not open to non-degree graduate students.

CSCI 3550  COMMUNICATION NETWORKS (3 credits)

This course is designed to bring students up to the state of the art in networking technologies with a focus on Internet. It will cover the principles of networking with an emphasis on protocols, implementations and design issues. (Cross-listed with CSCI 8555).

Prerequisite(s): (CSCI 3320 or CSCI 8325 with grade of C- or better) AND (CSCI 2240 or CYBR 2250 with grade of C- or better)

CSCI 3660  THEORY OF COMPUTATION (3 credits)

The course is intended to introduce the students to the theory of computation in a fashion that emphasizes breadth and away from detailed analysis found in a normal undergraduate automata course. The topics covered in the course include methods of proofs, finite automata, non-determinism, regular expressions, context-free grammars, pushdown automata, no-context free languages, Church-Turing Thesis, decidability, reducibility, and space and time complexity.

Prerequisite(s): CSCI 3320

CSCI 3710  INTRODUCTION TO DIGITAL DESIGN AND COMPUTER ORGANIZATION (3 credits)

The course is intended to introduce the students to the topics found in introductory digital design and computer organization classes.

Prerequisite(s): CSCI 3320 (could be taken concurrently)

CSCI 3830  ADVANCED JAVA PROGRAMMING (3 credits)

This course teaches students web application development using advanced concepts in the Java programming language. It introduces students to distributed computing models such as the client-server model and how it is implemented in web applications using modern Java technology stacks.

Prerequisite(s): ((CSCI 2830 with C- or better) OR Java programming proficiency) AND (CSCI 3320 with C- or better (can be taken as a co-requisite)) AND (basic knowledge of HTML and SQL)

CSCI 3850  FOUNDATIONS OF WEB SEARCH TECHNOLOGIES (3 credits)

This course provides students a basic understanding of how search and information flow works on the web. Main topics include: document representation, inverted indexing, ranking of web search results, vector-space model, web graph, PageRank, search-based advertising, information cascades, and web crawling.

Prerequisite(s): CSCI 2030 and CSCI 2850 with C- or better, or instructor Approval. Not open to non-degree graduate students.

CSCI 4000  ASSESSMENT (0 credits)

This course provides various resources to students about to graduate, and provides a mechanism that guarantees these students complete the final assessments required to maintain the currency and quality of the program. It is intended for undergraduate computer science majors in their last semester prior to graduation. It is required for all students entering after the spring 2004 semester. All degree requirements should be completed by the end of the semester during which this course is taken. Students taking this course will be expected to file an application for graduation during the semester.

Prerequisite(s): All degree requirements should be completed by the end of the semester during which this course is taken. Students taking this course will be expected to file an application for graduation during the semester. Not open to non-degree graduate students.

CSCI 4010  INTRODUCTION TO THE THEORY OF RECURSIVE FUNCTIONS (3 credits)

This is a proof-oriented course presenting the foundations of Recursion Theory. We present the definition and properties of the class of primitive recursive functions, study the formal models of computation, and investigate partially computable functions, universal programs. We prove Rice's Theorem, the Recursion Theorem, develop the arithmetic hierarchy, demonstrate Post's theorem. Introduction to the formal theories of computability and complexity is also given. (Cross-listed with MATH 4010, MATH 8016, CSCI 8016).

Prerequisite(s): MATH 2230 or MATH 2030 with a C- or better or CSCI 3660 with a C- or better or instructor's permission.

CSCI 4100  INTRODUCTION TO ALGORITHMS (3 credits)

The course provides students a basic understanding of algorithm analyses. Main topics include: growth of functions, asymptotic notation, recurrences, divide and conquer, sorting and its lower bounds, dynamic programming, greedy algorithms, and graph traversal.

Prerequisite(s): CSCI 3320 with C- or better.

CSCI 4150  GRAPH THEORY & APPLICATIONS (3 credits)

Introduction to graph theory. Representations of graphs and graph isomorphism. Trees as a special case of graphs. Connectivity, covering, matching and coloring in graphs. Directed graphs and planar graphs. Applications of graph theory in several fields such as networks, social sciences, VLSI, chemistry and parallel processing. (Cross-listed with CSCI 8156, MATH 4150, MATH 8156).

Prerequisite(s): CSCI 2030 with a C- or better, or MATH 2030 with a C- or better, or MATH 2230 with a C- or better, or permission of instructor.

CSCI 4200  NUMERICAL METHODS (3 credits)

This course involves solving nonlinear algebraic equations and systems of equations, interpolation and polynomial approximation, numerical differentiation and integration, numerical solutions to ordinary differential equations, analysis of algorithms and errors, and computational efficiency. (Cross-listed with CSCI 8206, MATH 4200, MATH 8206).

Prerequisite(s): MATH 1970 and MATH 2050 and MATH 2350 with a C- or better or permission of instructor.

CSCI 4220  PRINCIPLES OF PROGRAMMING LANGUAGES (3 credits)

This course covers the foundational concepts and principles underlying the design and implementation of programming languages. Language constructs including assignment, equality, references, aggregations, scope, encapsulation, and parameter passing are discussed. A central theme is how a particular language construct relates to the concept of equational reasoning (referential transparency). Formal notations for describing syntax and semantics are presented.

Prerequisite(s): CSCI 3320 and CSCI 3660 with C- or better.

CSCI 4250  HUMAN COMPUTER INTERACTION (3 credits)

Human computer interaction is concerned with the joint performance of tasks by humans and machines; human capabilities to use machines (including learnability of interfaces); algorithms and programming of the interface; engineering concerns that arise in designing and building interfaces; the process of specification, design, and implementation of interfaces; and design trade-offs. (Cross-listed with CSCI 8256).

Prerequisite(s): Either CSCI 3320 or ITIN 3330 with a grade of C- or better.

CSCI 4260  USER EXPERIENCE DESIGN (3 credits)

User experience (UX) design is concerned with the application of user-centered design principles to the creation of computer interfaces ranging from traditional desktop and web-based applications, mobile and embedded interfaces, and ubiquitous computing. This course provides in-depth, hands-on experience with real world application of the iterative user-centered process including contextual inquiry, task analysis, design ideation, rapid prototyping, interface evaluation, and reporting usability findings. (Cross-listed with CSCI 8266, ITIN 4260, ITIN 8266).

Prerequisite(s): Required: C- or better in CIST 2500 and junior standing, or by permission of instructor. Recommended: C- or better in CSCI 4250 or ITIN 3330.

CSCI 4300  DETERMINISTIC OPERATIONS RESEARCH MODELS (3 credits)

This is a survey course of deterministic operations research models and algorithms. Topics include linear programming, network programming, and integer programming. (Cross-listed with CSCI 8306, MATH 4300, MATH 8306).

Prerequisite(s): MATH 2050 with a C- or better or permission of instructor.

CSCI 4310  PROBABILISTIC OPERATIONS RESEARCH MODELS (3 credits)

This is a survey course of probabilistic operations, research models and algorithms. Topics include Markov chains, queueing theory, inventory models, forecasting, and simulation. (Cross-listed with CSCI 8316, MATH 4310, MATH 8316).

Prerequisite(s): MATH 2050 and either MATH 4740 or MATH 8746 or STAT 3800 or STAT 8805 all with a C- or better or permission of instructor.

CSCI 4320  COMPUTATIONAL OPERATIONS RESEARCH (3 credits)

Survey of computational methods used in the solution of operations research problems. Some topics may include scripting to guide optimization software, constraint programming, heuristics and metaheuristics for optimization, basic machine learning algorithms, and simulation. (Cross-listed with MATH 4320, MATH 8326, CSCI 8326).

Prerequisite(s): MATH 3200 or CSCI 1620, and MATH 4300 each with a grade of C- or better or permission of instructor.

CSCI 4350  COMPUTER ARCHITECTURE (3 credits)

The course deals with: Computer evolution, top view of processor design, cache memory and organization, hierarchical memory design and management, performance metrics, RISC versus CISC architecture, and pipeline computer design and architecture. The course also covers analytic design alternatives as needed.

Prerequisite(s): CSCI 3710, CSCI 3320 or CSCI 8325 with C- or better.

CSCI 4380  DIGITAL FORENSICS (3 credits)

Digital forensics involves the preservation, identification, extraction, analysis and documentation of digital evidence stored on a variety of electronic devices. The aim of this course is to introduce students to acceptable approaches for collecting, analyzing and reporting data from a forensics investigation. Topics include: an introduction to digital forensics, data acquisition, first response, memory forensics, operating system forensics, and network forensics. Students will be required to perform several forensics analyses in a controlled lab environment, including acquiring forensically sound hard drive images, memory images and analyzing these using industry standard tools, such as Forensic Toolkit (FTK). The Digital Forensics class is designed for Cybersecurity, Computer Science and other qualified students to learn what actions are both appropriate and required for preserving, collecting and analyzing digital evidence in cases of intrusion, data theft or other cybercrimes. (Cross-listed with CYBR 4380).

Prerequisite(s): CYBR 3600 or CIST 3600; CSCI 3550 or ISQA 3400; CYBR 2600 or CYBR 3350 or CYBR 3370.

CSCI 4430  QUANTUM COMPUTING AND CRYPTOGRAPHY (3 credits)

The course builds an understanding of exciting concepts behind quantum computing and quantum cryptography. In doing so it will introduce the principles of qubits, superposition, entanglement, teleportation, measurement, quantum error correction, quantum algorithms such as quantum Fourier transformation, Shor's algorithm and Grover's algorithm, quantum key exchange, quantum encryption, and secure quantum channels that are built using these principles. It will also discuss advantages of quantum computing and cryptography over classical computing and cryptography and limitations thereof. The students will come out with a working understanding of the field of quantum computing and quantum cryptography. During the course, students will also implement several of the quantum algorithms. (Cross-listed with CYBR 8436, CYBR 4430).

Prerequisite(s): Co-requisites: CYBR 3570 or CSCI 4560; or Instructor permission.

CSCI 4440  INTRODUCTION TO PARALLEL COMPUTING (3 credits)

This course is an introduction to parallel computing, that is using multiple processors to execute algorithms. Topics discussed include: classification of parallel computers; shared-memory versus message passing; forms of parallelism; measures of performance; designing parallel algorithms; parallel programming and parallel languages; synchronization constructs; and operating systems for parallel computers. (Cross-listed with CSCI 8446)

Prerequisite(s): CSCI 4500, which may be taken concurrently, with C- or better.

CSCI 4450  INTRODUCTION TO ARTIFICIAL INTELLIGENCE (3 credits)

An introduction to artificial intelligence. The course will cover topics such as machine problem solving, uninformed and informed searching, propositional logic, first order logic, approximate reasoning using Bayesian networks, temporal reasoning, planning under uncertainty and machine learning. (Cross-listed with CSCI 8456).

Prerequisite(s): CSCI 3320 with C- or better.

CSCI 4470  PATTERN RECOGNITION (3 credits)

Structures and problems of pattern recognition. Mathematics model of statistical pattern recognition, multivariate probability, Bay's decision theory, maximum likelihood estimation, whitening transformations. Parametric and non-parametric techniques, linear discriminant function, gradient-descent procedure, clustering and unsupervised learning, and feature selection algorithms. (Cross-listed with CSCI 8476).

Prerequisite(s): CSCI 1620 with C- or better, and MATH 2050. Recommended: MATH 4740/8746 or STAT 3800/8805.

CSCI 4480  ALGORITHMS FOR ROBOTICS (3 credits)

This course provides an introduction to software techniques and algorithms for autonomously controlling robots using software programs called controllers. Students will be taught how to program and use software controllers on simulated as well as physical robots. (Cross-listed with CSCI 8486).

Prerequisite(s): CSCI 3320 with C- or better. CSCI 4450/8456 is a recommended but not essential pre-requisite.

CSCI 4500  OPERATING SYSTEMS (3 credits)

Operating system principles. The operating system as a resource manager; I/O programming, interrupt programming and machine architecture as it relates to resource management; memory management techniques for uni-multiprogrammed systems; process description and implementation; processor management (scheduling); I/O device, controller, and channel management; file systems. Operating system implementation for large and small machines. (Cross-listed with CSCI 8506).

Prerequisite(s): CSCI 3710, CSCI 3320/8325, MATH 1950, and CSCI 4350/8356 with C- or better.

CSCI 4560  NUMBER THEORY & CRYPTOGRAPHY (3 credits)

An overview of one of the many beautiful areas of mathematics and its modern application to secure communication. The course is ideal for any student who wants a taste of mathematics outside of, or in addition to, the calculus sequence. Topics to be covered include: prime numbers, congruences, perfect numbers, primitive roots, quadratic reciprocity, sums of squares, and Diophantine equations. Applications include error-correcting codes, symmetric and public key cryptography, secret sharing, and zero knowledge proofs. (Cross-listed with CSCI 8566, MATH 4560, MATH 8566).

Prerequisite(s): MATH 2230 with a C- or better or MATH 2030 with a C- or better or CSCI 2030 with a C- or better or permission of instructor

CSCI 4620  COMPUTER GRAPHICS (3 credits)

An introduction to the acquisition, manipulation and display of graphical information using digital techniques. Topics include discussion of the various hardware devices used for input and output, the classical algorithms and data structures used in manipulation of graphical objects, the user interface to the graphics system, and applicable standards. (Cross-listed with CSCI 8626).

Prerequisite(s): ISQA 3300 or CSCI 3320

CSCI 4650  INTRODUCTION TO CLOUD COMPUTING (3 credits)

This course is an introduction to cloud computing. The students will learn about core concepts of cloud computing such as cloud models (IaaS, PaaS, SaaS, etc.), deployment models (public, private, hybrid), cloud infrastructures (compute, networking, storage), cloud services (VMs, serverless, object storage, cache, CDN, etc.), and big-data driven systems. This course will revisit essential topics in CS-related courses such as data structure, operating systems, and distributed systems and show how they are utilized and applied in diverse cloud computing technologies and systems including Hadoop, Spark, and distributed databases. After taking this course, students will have basic knowledge of cloud computing and hand-on experiences with diverse projects (including cloud system demos) that utilize diverse and heterogeneous cloud resources. (Cross-listed with CSCI 8656).

Prerequisite(s): CSCI 3550 and CSCI 4500

CSCI 4660  AUTOMATA, COMPUTABILITY, AND FORMAL LANGUAGES (3 credits)

This course presents a sampling of several important areas of theoretical computer science. Definition of formal models of computation, and important properties of such models, including finite automata and Turing machines. Definition and important properties of formal grammars and their languages. Introduction to the formal theories of computability and complexity. (Cross-listed with CSCI 8666, MATH 4660, MATH 8666).

Prerequisite(s): MATH 2030. Recommended: CSCI 3320/CSCI 8325.

CSCI 4700  COMPILER CONSTRUCTION (3 credits)

Assemblers, interpreters and compilers. Compilation of simple expressions and statements. Analysis of regular expressions. Organization of a compiler, including compile-time and run-time symbol tables, lexical scan, syntax scan, object code generation and error diagnostics. (Cross-listed with CSCI 8706).

Prerequisite(s): CSCI 3320 and CSCI 4220 with C- or better. Recommended: CSCI 4500.

CSCI 4760  TOPICS IN MODELING (3 credits)

Selection of such topics as formulation and analysis of various models involving Markov chains, Markov processes (including birth and death processes), queues, cellular automata, difference and differential equations, chaotic systems and fractal geometries. (Cross-listed with CSCI 8766).

Prerequisite(s): MATH 2350 and MATH 4740 or MATH 8746.

CSCI 4830  INTRODUCTION SOFTWARE ENGINEERING (3 credits)

Basic concepts and major issues of software engineering, current tools and techniques providing a basis for analyzing, designing, developing, maintaining and evaluating the system. Technical, administrative and operating issues. Privacy, security and legal issues. (Cross-listed with CSCI 8836).

Prerequisite(s): CSCI 3320 with C- or better.

CSCI 4850  DATABASE MANAGEMENT SYSTEMS (3 credits)

Basic concepts of data base management systems (DBMSs). The relational, hierarchical and network models and DBMSs which use them. Introduction to data base design. (Cross-listed with CSCI 8856).

Prerequisite(s): CSCI 3320 or equivalent with C- or better.

CSCI 4890  DATA WAREHOUSING AND DATA MINING (3 credits)

This course provides students with a theoretical foundation and practical methods for designing and constructing data warehouse and implementing data mining. After covering the essential concepts, issues, techniques to build an effective data warehouse, this course emphasizes the various techniques of data mining, such as association, classification, clustering and prediction for on-line analyses within the framework of data warehouse architectures. This course gives students an opportunity to undertake a real-life data analysis project. (Cross-listed with ISQA 4890).

Prerequisite(s): ISQA 3310 or CSCI 4850

CSCI 4900  INTERNET SYSTEMS DEVELOPMENT (3 credits)

This course focuses on contemporary techniques and technologies in the design, development, and integration of web-enabled information systems. This is a rapidly moving, hands-on course that mirrors real-world development of internet-based applications.

Prerequisite(s): CSCI 1620, CSCI 2850, (recommended) CSCI 3830, CSCI 4830 with C- or better.

CSCI 4950  INTERNSHIP IN COMPUTER SCIENCE (1-3 credits)

The purpose of this course is to provide students with opportunities to apply their academic studies in non-academic environments such as those found in business, industry and other non-academic organizations. The student interns will sharpen their academic focus and develop better understanding of non-academic application areas. The course is intended primarily for juniors and seniors in computer science.

Prerequisite(s): Permission of the computer science program chair.

CSCI 4970  CAPSTONE PROJECT (3 credits)

The Capstone Project completes a Computer Science student's undergraduate experience. Students will work on a team-based real-world project, practicing software engineering skills and applying fundamental computer science principles acquired throughout their undergraduate study.

Prerequisite(s): CSCI 4830 with C- or better; Senior standing in Computer Science. Not open to non-degree graduate students.

CSCI 4980  TOPICS IN COMPUTER SCIENCE (3 credits)

This is a variable topic course in computer science at the senior/graduate level. Topics not normally covered in the computer science degree program, but suitable for senior/graduate-level students can be offered. (Cross-listed with CSCI 8986).

Prerequisite(s): Permission of instructor. Additional prerequisites may be required for particular topic offerings.

CSCI 4990  INDEPENDENT STUDIES (1-3 credits)

A variable credit course for the junior or senior who will benefit from independent reading assignments and research type problems. Independent study makes available courses of study not available in scheduled course offerings. The student wishing to take an independent study course should find a faculty member willing to supervise the course and then submit, for approval, a written proposal (including amount of credit) to the Computer Science Undergraduate Program Committee at least three weeks prior to registration.

Prerequisite(s): Written permission required. Independent study proposals must be approved by the Undergraduate Program Committee.