CSCI 1041 - Digital Literacy in a Global Society

This course gives students tools to be active participants in today’s global culture of digital literacy. Students will learn current technology for acquiring, analyzing, and sharing information; analytical skills to understand, organize, and analyze numeric and graphic data; and communication skills to convey information in a context appropriate to the receiving audience. Readings will initiate discussions of technology issues such as: cybersecurity, addiction to social media, ethics and privacy, and intellectual property issues in a global society. The course is presented in a global context with local details drawn from a variety of countries and cultures.

Credit: 3


CSCI 1061 - Mobile Technologies for the 21st Century

Learn to use mobile technologies and non-proprietary apps for your academic and personal productivity and for broadening your information and technology literacy. In a project-based class, you work on realistic projects that focus your critical thinking and computational skills. The course work draws from the unique opportunities offered by mobile technologies to communicate, work collaboratively, and share knowledge. For example, you may use mobile technologies to survey subjects, use charts and spreadsheets to evaluate survey findings, and finally publish your findings in course websites. Readings and discussion will analyze the social impact of an always-on, always-connected world.

Credit: 3


CSCI 1611 - A Gentle Introduction to Programming

Prerequisite: Math 1105 or equivalent placement.

This is a gentle introduction to computer programming with the introductory programming language Python. Programs tell computers, step by step, how to do the amazing things they do, and they can stimulate and help evaluate models of our world. Students will learn problem solving and critical thinking in the framework of computational thought, and they will discuss the impact of technology on society. Topics cover fundamental programming concepts including: variables and data types, conditional and iterative control structures, string handling, functions, and testing. Programs will be compared to Java language versions for students interested in continuing computer science studies.

Credit: 3


CSCI 1911 - Foundations of Programming

Prerequisite: Math 1105 or equivalent placement.

An introduction to computer science and computer information systems in preparation to study computer programming and problem solving. Students are introduced to the foundations of algorithms required for intermediate- level problem solving, and programming language elements and environments required to create, compile, and execute high-level language problems.

Credit: 3


CSCI 2301 - Discrete Math for Computer Science

Prerequisite: Math 1130 or equivalent placement; CSCI 1911 or equivalent placement.

An introduction to the theory and applications of discrete mathematics including set theory, functions, zero- and first- order logic, induction, proofs (including direct, by cases, contraposition, contradiction, counterexample), logical inferences, truth tables, sequences, summations, formal counting techniques, number theory, growth of functions and their asymptotic bounds, logarithms, and simple recurrence relations. Sample computer-programming topics include design; pseudocode; sorting, searching and other common algorithms; recursion; tracing; debugging; testing; trees; strings; encryption; and bitwise operations. This course provides foundation material for other courses that require mathematical problem-solving skills.

Credit: 3


CSCI 2761 - HTML, CSS, and Web Design

An introduction to web page and web site design. Students will learn the mechanics and aesthetics of a good web design and the best current practices within the evolving HTML and CSS standards. Additional topics include incorporating social media, search engine optimization (SEO), structuring an e-commerce friendly web presence, and using current blogging platforms such as Wordpress or Drupal.

Credit: 3


CSCI 2911 - Computer Science I

Prerequisite: CSCI 1611 or 1911 or advisor approval; and MATH 1130 or concurrent.

The fundamentals of algorithmic problem solving, plus structured and object-oriented programming. Topics include problem analysis and decomposition; stepwise refinement; pseudocode and charting techniques; basic control structures and data types; modularization and parameter passing; object-oriented design and classes; introduction to GUIs, files, and arrays; testing; program tracing; and debugging. Extensive programming assignments.

Credit: 3


CSCI 2912 - Computer Science II

Prerequisite: CSCI 2911; CSCI 2301 or concurrent.

An intermediate problem-solving and programming course using the Java programming language. Topics include composite and abstract data structures; GUI beyond the basics; inheritance and polymorphism; aggregate classes; abstract classes and methods; interfaces; exceptions; recursion; and good software engineering practices such as: modular programming techniques, defensive programming, code archeology, documentation, code design based on customer specification, refinement, and testing. Structured and object-oriented programming methods are reinforced through extensive programming assignments. This course builds on CSCI 2911 and provides foundation material for CSCI 2913.

Credit: 3


CSCI 2913 - Data Structures

Prerequisite: CSCI 2912; CSCI 2301.

Third course of the core problem-solving and programming sequence for computer science majors. Students advance problem-solving and programming skills by learning to separate solutions for computation problems into two fundamental parts: algorithm and data structure. Extensive programming assignments to create, implement, use, and modify programs that manipulate standard data structures. Topics include: abstract data types, big-O complexity, linked lists, stacks, queues, trees, binary search trees, heaps, heapsort, hashing, and recursion.

Credit: 3


CSCI 2916 - Computer Science I Lab

Prerequisite: CSCI 2911 or concurrent.

Lab component to accompany CSCI 2911. This course will provide directed lab exercises for students to improve their understanding of the content of CSCI 2911 and their skills in creating and debugging computer programs.

Credit: 1


CSCI 3001 - Assembly Language and Systems Programming

Prerequisite: CSCI 2911; CSCI 2301.

Students learn about the internal organization of modern computers and assembly-level programming on contemporary processors. Topics include: integration of assembly language with high-level programming languages such as C and C++, runtime stack, pointers, efficient coding strategies, and assembly language as the foundation for higher-level programming languages. Course material is reinforced by programming assignments.

Credit: 3


CSCI 3101 - Algorithms

Prerequisite: CSCI 2913; CSCI 2301.

This course covers the analysis and design of algorithms. Good algorithm design is crucial for software performance. Topics include: efficiency analysis; big-O, omega, and theta notation for asymptotic upper, lower, and tight bounds on algorithm time complexity; recurrence equations; proof by induction and contradiction; brute-force, greedy, and divide-and-conquer algorithms; sorting algorithms including heapsort, mergesort, quicksort; graphs, trees, heaps; binary search; breadth and depth-first search; Dijkstra’s shortest-path algorithm; minimum spanning trees, Prim’s algorithm; maximum network flow dynamic programming; tractable and intractable problems; NP-complete problems and the P and NP classes; and uncomputable functions. In-depth programming assignments.

Credit: 3


CSCI 3106 - Programming Challenges

Prerequisite: CSCI 2911.

Students solve and implement advanced programming problems covering a wide range of algorithmic topics. The course is structured around preparation to participate in an annual programming contest conducted by the Association for Computing Machinery (ACM). CSCI 3106 complements CSCI 3101, Algorithms, by providing students with less theoretical, more hands-on problem solving and programming. Topics include: data structures, strings, sorting, arithmetic and algebra, combinatorics, number theory, backtracking, graph algorithms, dynamic programming, grids, and geometry.

Repeatable for up to 9 credits

Credit: 3


CSCI 3211 - Systems Analysis

Prerequisite: CSCI 2912; CSCI 3201 or 3301.

An overview of the systems development life cycle with emphasis on techniques and tools of system specifications. The course covers the strategies and techniques of modern systems development.

Credit: 3


CSCI 3242 - Modeling and Simulation

Prerequisite: CS 2911; CSCI 2301; MATH 1123; MATH 1140 or 1150; and consent of instructor.

This course introduces concepts of analytic modeling and computer simulation. It encompasses mathematical techniques, algorithms, and applications available to assist and improve decision making and understanding of various types of systems. Sample topics include discrete event simulation, mathematical and computational modeling, virtual reality, and GUI simulations. Models will progress sequentially through steps such as problem statement, formalization, implementation and simulation, visualization, and comparisons to analysis, experiment and observation. Students work on projects drawn from a variety of areas such as management, behavioral and natural sciences; applied mathematics; engineering; gaming; computer networking; and scheduling.

Credit: 3


CSCI 3301 - Database Technologies

Prerequisite: CSCI 2911. Recommended: CSCI 3201 or MIS 2000.

An introduction to the design, development, and implementation of database management systems (DBMS). Topics include conceptual data modeling, logical and physical design, the relational model, normalization, SQL and high level language programming, transaction processing and concurrency control, database architecture, data warehouses, and database administration. Upon successful completion of this course the student will be able to design and implement database solutions for future academic or industry projects.

Credit: 3


CSCI 3302 - Machine Learning and Knowledge Discovery

Prerequisite: CSCI 2913; CSCI 2301; MATH 1123; MATH 3305.

Machine learning is the science of data mining and knowledge discovery using algorithms that enable computers to develop knowledge from empirical data. In the past decade, machine learning methodologies have successfully enabled computers to recognize speech and hand-written characters, to convert spoken words to text, to effectively search for information, and to recommend products, books, or movies we may like. Topics include linear and logistic regression, clustering, Bayesian methods, support vector machines, kernel methods, decision trees, and learning theory.

Credit: 3


CSCI 3401 - Data Communications

Prerequisite: CSCI 2912; CSCI 2301; Recommended: Math 1123.

An examination of the principles of data communications for computers and computer terminals, including data transmission performance, communications software, protocols, switching, and simple networks.

Credit: 3


CSCI 3501 - Computer Organization

Prerequisite: CSCI 3001; CSCI 2301.

A computer is regarded as a hierarchy of levels, each one performing a well-defined function. This course provides detailed coverage of the digital logic, micro-architecture, and instruction-set architecture levels. Students are required to implement a simulator for a microprogrammed computer architecture using a contemporary high-level object-oriented programming language.

Credit: 3


CSCI 3601 - Operating Systems

Prerequisite: CSCI 3501.

An introduction to the fundamental processes of operating systems, covering system structure, process creation and management, memory allocation and management, scheduling, I/O, and device drivers.

Credit: 3


CSCI 3611 - Unix Systems Administration

Prerequisite: CSCI 2301; CSCI 2911.

This course covers the Unix operating system and system administration responsibilities. Topics include: system startup and shutdown, managing startup services, hard drive partitioning and file system concepts, file management, user administration, networking and applications installation and administration, shells and scripts, regular expressions, performance monitoring and tuning, logs, basic system security, and kernel reconfiguration. Extensive hands-on assignments.

Credit: 3


CSCI 3621 - Networking

Prerequisite: CSCI 3401; CSCI 3601.

This course describes how voice, data, image, and video information is communicated through networking, how it is accomplished, protocol and network configuration, and LAN system software.

Credit: 3


CSCI 3632 - Internet Programming

Prerequisite: CSCI 2912; Recommended: 3301.

This course focuses on strategies for providing secure, reliable, and useful web-based applications. Topics include: the development of dynamic web sites; client-side programming; server-side programming; back-end databases; RESTful web services; secure transaction processing; other features of commercial quality web sites; and selected current topics such as Google Maps, Facebook, and Twitter APIs. Extensive programming assignments.

Credit: 3


CSCI 3640 - Computer Security and Information Assurance

Prerequisite: CSCI 2911; CSCI 2301.

The assessment of potential security threats to computer systems. Topics include: controlling site and system access; protecting and maintaining data integrity; environmental/ facility considerations such as power and climatological factors; assessing intrusion detection consideration; theft, espionage, sabotage, and incompetence; backups and alternative systems.

Credit: 3


CSCI 3651 - Game Programming

Prerequisite: CSCI 2911 and 2912.

An introduction to the many types of computer game programming. This course reviews the computer-science theory and programming behind classic games such as Tetris and Space Invaders; genre creators such as SimCity and Civilization; as well as modern techniques behind sophisticated games such as Quake, Grand Theft Auto and Red Dead Redemption. Students get hands-on experience creating 2D games in JavaScript/HTML5 and 3D games in systems such as the Unreal Engine. Course also briefly covers interactive narrative text adventures, mobile games and game Artificial Intelligence.

Credit: 3


CSCI 3721 - C#

Prerequisite: CSCI 2911 and 2912.

This course provides the fundamental skills that are required to design and develop object-oriented applications for the web and Microsoft Windows using C#, the Microsoft Visual Studio .Net development environment, and Microsoft Foundation Classes. Business and scientific problems are solved through object-oriented analysis and design using features inherent to C# and .Net.

Credit: 3


CSCI 3731 - Problem Solving and Programming Using C++

Prerequisite: CSCI 2911 and 2912.

An advanced problem-solving and programming course with emphasis on the systems programming features pro- vided by the C++ programming language. Objects, memory management, and systems programming are stressed. Extensive programming assignments are required.

Credit: 3


CSCI 3771 - Python

Prerequisite: CSCI 2911 and 2912.

An introduction to programming in the popular Python programming language. Topics include data types, simple statements, control structures, strings, functions, recursion, the Python interpreter, system command lines and files, module imports, object types, dynamic typing, scope, classes, operator overloading, exceptions, testing, and debugging. The course will enable students to program fluently in Python and move on to advanced topics such as programming collective intelligence and natural language processing. Mastery of Python also provides a foundation for learning the web programming framework Django.

Credit: 3


CSCI 3776 - Ruby on Rails

Prerequisite: CSCI 2912.

This course covers the fun, popular, and powerful web programming framework Ruby on Rails, which enables programmers to rapidly develop sophisticated websites with databases. Topics include: Ruby programming language, embedded Ruby, Model-View-Controller (MVC) software architectural pattern, Rails directory structure, database object-relational mapping (ORM) using active records, database migrations, maintaining user state with database sessions, asynchronous JavaScript and XML (Ajax) development techniques for interactive web applications, testing, and debugging. Extensive programming assignments to create websites with relational databases.

Credit: 3


CSCI 3911 - Software Engineering

Prerequisite: CSCI 2912; CSCI 3211.

The course teaches software engineering techniques and system analysis methodologies based on the Software Engineering Body of Knowledge (SWEBOK) using Software as a Service (SaaS), Agile development methodologies, and Cloud based applications. This course covers Design Patterns, code version repositories, and open source project software engineering methodologies, critical for every programmer. It also covers systems analysis and business analysis skills of talking to a customer, creating prototypes, and alternative development methodologies.

Credit: 3


CSCI 3990 - Internship

Prerequisite: At least a 2.7 GPA for undergraduate level; CSCI 2911, 2912.

Internships provide students with applied, experiential learning opportunities so that they can make connections between academic study and the practical application of that study in a professional work environment. Academic internships are supervised by a faculty member and an on-site professional supervisor. All academic internships must be approved in advance by the department or program. Unless stipulated otherwise by the department or program, credit hours are defined by the university's credit hour policy (for example, a 3-credit internship will require a minimum of 120 hours on­site). Internships may be repeated for a total of 9 credit hours.

Repeatable for up to 9 Credits.

Credit: 1 to 3


CSCI 4620 - Computer System Forensics

Prerequisite: CSCI 3401; CSCI 3640; CSCI 3001 or 3501.

This course is an in-depth study of computer system forensics including methodologies used for analysis of computer security breaches. Forensics is the use of science and technology to investigate and establish facts in criminal or civil courts of law. The student will be introduced to digital forensics and practiced by local, state, and federal law enforcement. Assignments will reinforce the theory presented in the lecture and will provide students with hands-on experience using well-known, publicly available, digital forensic tools. Students will work on one of two separate networks dedicated to cyber security teaching and research.

Credit: 3


CSCI 4640 - Advanced Topics in Cybersecurity

Prerequisite: CSCI 3401; CSCI 3640; CSCI 3001 or 3501.

A lecture and project-based course on advanced topics in cybersecurity. Students learn and apply the principles, skills, and art of building and defending a secure network. Topics address current issues in areas such as: ethical hacking, network defense, countermeasures, writing secure code, network penetration testing, and basic forensics. Students work in teams using contemporary tools to analyze, hack, and defend network systems.

Credit: 3


CSCI 4701 - Introduction to the Theory of Computation

Prerequisite: CSCI 2301; CSCI 2911.

Students will learn about formal models of computation and how these are used as the basis for the design of all computer systems and programming languages. Students will gain practical hands-on knowledge of computation theory as it applies to programming language translation (compilers and interpreters). To help comprehend virus protection programs and computer security, the creation of self-replicating programs (the basis of most viruses) will be explored. Students will learn how computational problems are classified as solvable, unsolvable, tractable, and intractable. The material covered ties together the theory of computer base computation and the application of this theory to problem solving and programming.

Credit: 3


CSCI 4702 - Mobile Programming

Prerequisite: CSCI 2911, 2912.

A course on the programming of applications for mobile computing including devices such as mobile phones, pads, and tablets. Students will learn best practices in programming for mobile devices including iPhones, iPads, or Android smart phones. At the end of the course students will be proficient in developing mobile applications and using device emulators for coding and testing. This course will at times include joint projects with students in the mobile design course, MULT 4702.

Credit: 3


CSCI 4705 - Artificial Intelligence

Prerequisite: CSCI 2911, 2912, and 2913.

Artificial intelligence (AI) is the study of the design of intelligent agents that are capable of reasoning, planning, and acting in a dynamic environment. This field encompasses logic, probability, and continuous mathematics; perception; learning; and everything from microelectronic devices to robotic planetary explorers. In this course, we will focus on the design of logic based intelligent agents by introducing topics such as knowledge representation, probabilistic reasoning, natural language processing, and logic programming. We will solve classic AI problems such as uncertainty, planning, diagnosis, and search and will apply the solutions to solve problems not only in computer science but also in areas as diverse as biology, linguistics, philosophy, and art.

Credit: 3


CSCI 4706 - Deep Learning

Prerequisite: CSCI 3302, CSCI 3771, MATH 1123, MATH 2216, MATH 3305, or consent of instructor.

An introduction to deep learning, a branch of machine learning concerned with the development and application of modern neural networks. Deep learning algorithms extract layered high-level representations of data in a way that maximizes performance on a given task. Deep learning is behind many recent advances in AI, including Siri’s speech recognition, Facebook’s tag suggestions, and self-driving cars. The main topics in this course include: basic neural networks, convolutional neural networks (CNNs), recurrent neural networks (RNNs), long short-term memory (LSTM), reinforcement learning, and applications to problem domains like computer vision.

Credit: 3


CSCI 4911 - Software Project I

Prerequisite: CSCI 2913; CSCI 3301; CSCI 3401; CSCI 37XX; CSCI 3911 or consent of the instructor.

A lecture and project-oriented course dealing with the application of the principles, skills, and art of the design and construction of software systems in a realistic environment. Topics include: modern software development strategies; integrating program subsystems into efficient and aesthetic systems; systems standardization; information engineering; and testing.

Credit: 3


CSCI 4931 - Systems Administration

Prerequisite: CSCI 3601, 3621.

A lecture and project-oriented capstone course dealing with the principles, construction, monitoring, maintenance, testing, and art of system administration for open and closed client and server systems. Topics include: project management, security, system accounting, system maintenance, services, diagnostic methods, security, and disaster recovery.

Credit: 3


CSCI 4997 - Directed Readings in Computer Science

Prerequisite: Consent of instructor.

Directed individualized readings. May be repeated if content or topic is different.

Credit: 1 to 3