CSCI140 Introduction to Programming (3 semester hours)

This course introduces students to C and C++® programming languages, with an emphasis on good programming practices. Topics include object- oriented programming, memory management, and optimization. The course also covers special topics such as arrays, pointers, references, classes, methods, dynamic memory allocation, recursion, linked lists, iterators, and function pointers. Students should be able to write well-decomposed, easy-to-understand code and understand the value that comes with proper variable names, short functionality, and method implementations. This course features weekly coding assignments as well as a final project. (Prerequisite: MATH225)C++® is a registered trademark of the Standard C++ Foundation.

CSCI150 Digital Systems I (3 semester hours)

This course focuses on number systems, binary arithmetic, logic gates, and forming logic circuits. Other core topics include combinational circuits and Boolean algebra. The concept of circuits will be expanded to include logic blocks; multiplexers; and arithmetic blocks such as adder, multiplier, subtractor, and divider with an emphasis on block designs. Additionally, sequential circuit and finite state machine will be discussed in detail. The course concludes with the synthesis of a complete processor. (Prerequisite: MATH225)

CSCI210 Introduction to Networking (3 semester hours)

The course introduces students to the structure and components of computer networks, packet switching, layer architectures, and a number of applications. Students gain the experience and tools needed to use and write protocols. Specific topics include Web/HTTP, voice-over-IP, P2P file sharing, socket programming, TCP/IP, reliable transfer, flow control, congestion control, the network layer (names, addresses, and routing), local area networks, and wireless networks. The course also explores issues related to network security. (Prerequisite: CSCI220)

CSCI220 Operating Systems I (3 semester hours)

This course helps students understand the design and implementation of operating systems in the area of purpose. It focuses on description, contrast, and comparison of different structures for operating systems. Students will analyze theory and implementation of processes, resource control, physical and virtual memory, scheduling, I/O, and files. Students need to be familiar with C language before taking this course. The course introduces a high-level structure of the Linux kernel both in concept and source code, while offering a detailed understanding of its aspects. (Prerequisite: CSCI230)

CSCI230 Machine Architecture and Organization (3 semester hours)

The course will present concepts related to computer architecture and their impact on program design and development. It introduces students to topics such as instruction set design, memory hierarchies, pipelining, storage systems, and parallel architectures. Specific topics in the course include performance evaluation, computer organization, instruction formats, addressing modes, computer arithmetic, single-cycle and multi-cycle data paths, and processor control. Assembly language programming is used as a means of exploring instruction set architectures. (Prerequisite: CSCI240)

CSCI240 Algorithms and Data Structures I (3 semester hours)

This course strengthens and broadens students' awareness of existing trends in the development of object-oriented programming. Students expand their use of a structured design method to provide systematic analysis of performance and systematic proof of correctness. Students gain a deeper understanding of concepts like implementations of abstract data types and present data structures linked to stacks, queues, and hashes. The course will also address advanced concepts related to algorithms that will include divide-and-conquer and dynamic programming. Students will also learn how to analyze different algorithm development as well as various sorting strategies. (Prerequisites: CSCI140 or CSCI150)

CSCI311 Network Security Fundamentals (3 semester hours)

This is an advanced course in networking and requires students to have in-depth knowledge of the 7 layers of the ISO/OSI model. The course starts with an overview of IP addressing and subnetting. A significant amount of time will be spent on routing protocols like BGP, OSPF, and EIGRP, and security issues with each of these protocols is discussed. Other topics covered in this class will include, but are not limited to, traffic engineering, multi-path routing, and segmentation. (Prerequisite: CSCI210)

CSCI315 User Interface and Experience Design (3 semester hours)

Learn the fundamentals of human-computer interaction and user experience design by applying design thinking methods and acquiring the skills necessary to create interactive systems for a variety of audiences and purposes. During this course, students will learn about various types of prototyping methods, as well as how cognition and perception play an important role in affecting the experience of interaction design. (Prerequisite: CSCI345).

CSCI320 Operating Systems II (3 semester hours)

This course presents advanced topics for operating systems. Students learn how to analyze different techniques for managing resources within the operating systems and compare different factors related to reliability and scalability. This course focuses more on file security and integrity. Students become proficient in programming systems software and gain a thorough understanding of the various types of vulnerabilities (design and/or implementation weaknesses), their underlying causes, and potential mitigation strategies. They will also know how to apply fundamental security design principles during system design, development, and implementation to minimize vulnerabilities. Students develop an understanding of how a vulnerability in a given context may be applied to alternative contexts. (Prerequisite: CSCI220)

CSCI325 Design for the Web (3 semester hours)

This course introduces students to applications used for the design and development of desktop and mobile web applications. In addition to applications, students are introduced to design tools, web frameworks, cloud services and storages as well as how to balance between the effective front-end design and backend processing and implementation. The HTML, CSS, and JavaScript® development of client-side web applications, sending and receiving REST requests, designing models, HTML5 and CSS3® features such as CSS® animation are all covered in detail using these frameworks. (Prerequisite: CSCI315)JavaScript® is a registered trademark of Oracle America, Inc.CSS3® and CSS® are registered trademarks of Certified Security Solutions, Inc.

CSCI335 Web Applications Programming (3 semester hours)

This course introduces students to the client-side and server-side mechanisms for developing dynamic web applications with persistent data storage. Modern scripting languages and the DOM are used for client-side programming. Server-side programming using new web programming languages and frameworks. Considerations for security. This course focuses on broad knowledge of many tools/technologies rather than in-depth knowledge of a single tool/technology. (Prerequisite: CSCI325)

CSCI336 Topics in Computer Vision (3 semester hours)

The goal of this course is to introduce students to various computer vision techniques, beginning with the fundamentals and progressing to more advanced learning and attention concepts. Image classification and annotation, object recognition and image search, various object detection techniques, motion estimation, object tracking in video, human action recognition, and image stylization, editing, and new image generation are some of the topics that will be covered. Students will learn how to use visual entropy and similar techniques to understand the key differences and overlaps between human-based and computer-based visual systems. (Prerequisite: CSCI381)

CSCI340 Program Design and Development (3 semester hours)

This course teaches students to design and develop programs. The course assumes that students have previously acquired programming skills in C, C++, and Python®. Students learn advanced programming concepts that will enable them to produce reliable and maintainable code and be able to compare learned concepts to other languages. The course focuses on programming structures, constructs and writing tests as well as understanding inheritance, polymorphism, and interfaces. Moreover, students will master generic programming, appreciate the value of reflection, and write multi- threaded applications. By the end of the course, students will be able to differentiate between good and bad programming practices. (Prerequisite: CSCI240)Python® is a registered trademark of the Python Software Foundation.

CSCI345 Algorithms and Data Structures II (3 semester hours)

The course will present advanced concepts related to hashes, trees, graphs, linear programming, and multithreading. Students study techniques for designing algorithms and for analyzing the time and space efficiency of algorithms. The course will introduce students to computational models and computational complexity like NP-Completeness, as well as how to develop key algorithms for advanced types of trees, analyze NP-Completeness, apply advanced concepts related to graphs, analyze topics related to multithreaded algorithms, and compare different algorithm strategies. The algorithm design techniques include divide-and-conquer, greedy algorithms, dynamic programming, randomized algorithms, and parallel algorithms. (Prerequisite: CSCI240)

CSCI350 Digital Systems II (3 semester hours)

This course advances the student's understanding of PDLs, FPGA design flows, and ability to perform HDL-based design and implementation on FPGAs. Students learn to design, synthesize, simulate, and implement logic on an actual device, as well as understand and work with FPGA architectures, digital arithmetic, pipelining, and parallelism. Students will become knowledgeable to make a substantial modification to a simple microcontroller-based system and identify the cyber concerns associated with it. The course provides hands-on training on the use of a hardware-description language. In addition, students will be able to detect failures in security design principles, and how they can lead to system vulnerabilities that can be exploited as part of an offensive cyber operation. (Prerequisite: CSCI150)

CSCI360 Introduction to Database Systems (3 semester hours)

This course helps students to understand the basic principles required to construct a functioning database free of data anomalies. A strong mathematical background may be required to manage advanced concepts of multi-valued dependency and representation theory, as well as an ability to conceptualize, design, and implement a database. The course focuses on relational database structures, with emphasis on entity relationship diagrams for data modeling, transaction properties, and functions. Students will study SQL for data description and data manipulation, as well as the use of modern APIs to access the database. (Prerequisite: CSCI345)

CSCI370 Software Reverse Engineering (3 semester hours)

The discipline of reverse engineering provides the ability to deduce the design of a software component and aid in the analysis of software via decomposition. The course provides a practical foundation for all areas of software security research, including forensics, penetration testing, vulnerability research, exploit development, and malware analysis. Students will be able to use tools to safely perform static and dynamic analysis of software in order to fully understand the software's functionality. Specifically, the course focuses on reverse engineering techniques and software specification recovery, reverse engineering for malware analysis, and communications. The course also provides guidelines for dealing with obfuscated code. (Prerequisites: CSCI311 and CSCI320)

CSCI381 Machine Learning (3 semester hours)

This course provides an overview of types of problems that can be used with machine learning, as well as different variations of machine-learned methods such as supervised/unsupervised, batch/online, etc. The course discusses the main challenges of machine learning, notably the issue of data quality, as well as overfitting and underfitting data. (Prerequisite: CSCI360).

CSCI386 Advanced Topics in Machine Learning (3 semester hours)

This course focused on more advanced topics on machine learning including clustering, dimensionality reduction, and emerging applications of machine learning such as recommender systems, search in unstructured data, and time series analysis. (Prerequisite: CSCI381)

CSCI390 Cellular and Mobile Technologies (3 semester hours)

This course focuses on wireless communications and networks. It covers radio propagation and propagation path-loss models; digital communication and transmission; cellular communication and WWAN architecture; antennas, diversity, and link analysis; SS and CDMA systems; and security in wireless systems. WWANs, GSM, CDMA, WAP, WLAN, WPAN, 3G/4G/5G are important concepts covered in this course. (Prerequisite: CSCI370)

CSCI415 Information Visualization (3 semester hours)

Data production in research, engineering, business, and ordinary human activity is expanding at an alarming rate, as is the amount and complexity of information produced. The aim of this course is to introduce students to methods and techniques for visual representation that will help better understand complex data. The use of effective visualizations not only provides a visual interpretation of data, but they also aid in the comprehension, communication, and decision-making processes. Students will learn how the human visual system processes and perceives images, good visualization design practices, methods for visualizing data from a variety of fields, and programming interactive web-based visualizations using the D3 programming language. (Prerequisite: CSCI335)

CSCI425 Information Systems Development (3 semester hours)

This course introduces students to the fundamentals of data-driven web applications and techniques for developing customized web solutions. To create fully functional project architectures for interactive exploratory data analysis, Python-based frameworks and visualization libraries are used. Students learn how to process data into a web application while keeping both front-end visual appeal and back-end functionality in mind. Understanding the web and its components is covered in detail, as is working with supervised machine learning techniques and frameworks, designing effective interactions and data visualizations, and working with relational and non-relational databases. After completion, project setups are deployed to cloud infrastructure, taking advantage of the dynamic nature of data-intensive applications. (Prerequisite: CSCI335)

CSCI431 Embedded Systems (3 semester hours)

This course studies the fundamental concepts in the design and organization of modern computer systems. Topics include computer organization, instruction-set design, processor design, memory system design, timing issues, interrupts, and various performance-enhancing parallel techniques such as prefetching, pipelining, branch prediction, superscalar execution, and massive-parallel processing. The course also studies existing architectures using CISC, RISC, and VLIW designs. (Prerequisite: CSCI390)

CSCI440 Principles of Programming Languages (3 semester hours)

This course presents multiple programming languages to students and the different solution each offers. Topics include binding, binding times, data types and implementation, operations, data control, storage management, parameter passing, and operating environment. (Prerequisite: CSCI340)

CSCI445 Formal Languages and Automata Theory (3 semester hours)

This course deals with the mathematical abstraction model of computation and its connection to formal languages. It is designed to introduce students to the theoretical development of computer science and provide conceptual tools used by practitioners in computer engineering. Students will understand how automata are used to describe computing machines and computation, as well as the concept that some things are computable while others are not. Students will comprehend the relationship between automata and computer languages, as well as describe the language hierarchy from regular expression to context free. (Prerequisite: CSCI340)

CSCI452 Cybersecurity/Cyber Defense (3 semester hours)

This course introduces students to the ethical, theoretical, and practical issues surrounding security in computer systems and networks. Some of the topics in this course include identification of the following: reconnaissance operations, anomaly/intrusion detection, command and control operations, data exfiltration activities, and malicious code based on signatures. Students will master network security techniques and components, as well as cryptography and its uses in cybersecurity together with malicious activity detection. Understanding how defense complements offense is essential in a well-rounded cyber operations program. Students develop a sound understanding of the technologies and methods used to defend systems and networks. They will be able to describe, evaluate, and operate a defensive network architecture employing multiple layers of protection using technologies appropriate to meet mission security goals. (Prerequisite: CSCI440)

CSCI471 Software Engineering (3 semester hours)

This course presents how to apply a systematic approach to the development of software systems. Topics explored include software development life cycles, requirements elicitation, and architectural design and design decomposition, implementation, and testing. The course reviews the modern techniques available for performing actions in these areas. (Prerequisite: CSCI360)

CSCI475 Development of Secure Software Systems (3 semester hours)

This course ensures that students know how to write robust, secure software. These methods should lead to software that maintains the confidentiality, integrity and availability of the software and data. Specific topics include system security architectures and concepts as well as secure programming principles and practices. Students will be able to demonstrate that they understand the techniques specifying program behavior, as well as the classes of well-known defects and how they manifest themselves in various languages. Students learn to understand how poor coding affects security, how to identify common coding errors, demonstrate the capability of authoring programs that are free from defects, and document code with clear and succinct explanations. (Prerequisite: CSCI452)

CSCI480 Introduction to Artificial Life (3 semester hours)

This course presents artificial life through the lens of simulated and/or synthesized life and life-like processes. It begins by discussing the history of artificial life, or Alife. This course provides students with the opportunity to study the life-like processes that arise from biological and chemical phenomena, mathematical and computational models, and physical models of a variety of statistical and dynamical systems. (Prerequisite: CSCI486)

CSCI484 Introduction to Artificial Intelligence (3 semester hours)

This course provides students with in-depth knowledge and skills in computer science, including the history of AI and the processes involved in training machines to learn. It covers various search methods and why they are important to AI as well as specific AI applications Topics covered enable students to continue their study of artificial intelligence. Through readings, assignments, and laboratories in which they learn to conduct analyses to meet specified objectives, students gain hands-on experience. (Prerequisite: CSCI381)

CSCI486 Deep and Reinforcement Learning (3 semester hours)

The primary focus of this course is on neural networks and deep learning networks such as CNN, RNN, LSTM, and industry-accepted libraries required to train these models, such as TensorFlow and Keras. It also covers different variations of training and transporting these models using attention and transformers. (Prerequisite: CSCI484)

CSCI498 Senior Project Design (3 semester hours)

This seminar is a senior-level course designed to allow the student to review, analyze, and integrate the work completed toward a degree in computer science. The student will design an approved project that demonstrates mastery of their program of study in a meaningful culmination of their learning. The project should also demonstrate their level of mastery of the stated outcomes of their degree requirements. Prerequisite: Student must have senior standing in the Computer Science program and department chair approval to register.

CSCI499 Senior Project Implementation (3 semester hours)

After completing the design of their approved project in CSCI498, students will implement that design into a working prototype and write a senior thesis. The senior thesis will be completed and an oral defense presented. Selected senior papers will be retained in our library. The student is further encouraged to submit work to peer-reviewed journals, conference proceedings, and/or senior design competitions. (Prerequisite: CSCI498)