Computer Science Major Undergraduate Courses

CSC 141. Computer Science I. 3 Credits. An introduction to programming using Python. Topics covered include basic program design; program flow including decisions, functions, and loops; command line and file input/output; variables and types; and string and sequence processing. 

CSC 142. Computer Science II. 3 Credits. This course introduces the design and implementation of classes and objects, arrays using primitive types and Strings, array of objects, sorting and searching through arrays, recursion, aggregate objects and an introduction to graphical User Interfaces (GUIs). Prerequisite: CSC 141.

CSC 220. Foundations of Computer Science. 3 Credits. Topics include regular and context free grammars and languages, computational logic, finite state machines, and parsing. Prerequisites: MAT 151 and MAT 161.

CSC 231. Computer Systems. 3 Credits. This course introduces the fundamental concepts of modern computer systems. Coverage includes an introduction to CPUs, memory, storage, networking, operating systems, and parallel and distributed programming. Assembly language and C will be introduced and used to explore how computer systems interpret and execute programs. Prerequisites: CSC 142 and MAT 151.

CSC 240. Computer Science III. 3 Credits. This course focuses on more advanced topics in object-oriented programming, including project design, planning, and testing using milestones and checklists. Programming topics include text processing (including StringBuilder and StringTokenizer classes), inheritance, polymorphism, abstract classes, interfaces, generic classes, exception classes, exception throwing and handling, random access files, serialization and an introduction to some basic data structures, such as collection classes and linked lists. Prerequisites: CSC 142.

CSC 241. Data Structures & Algorithms. 3 Credits. Data structures and related algorithms are studied using object-oriented programming, such as Java. Topics include data abstraction, recursion, lists, stacks, queues, linked lists, trees, hashing, searching and sorting algorithms, and the evaluation of algorithm efficiency.
Prerequisites: CSC 240, MAT 151, MAT 161.

CSC 301. Computer Security & Ethics. 3 Credits. An introduction to Computer Security and the ethical underpinnings of security. The basic objectives of creating a secure system, attack methods and defenses are discussed. Prerequisites: three CSC, CST, or CSW courses.

CSC 302. Computer Security. 3 Credits. This course will provide an introduction to critical and diverse topics in computer security, such as cryptography, network security, and operating systems security. Prerequisites: CSC 301 and CSC 335.

CSC 317. Introduction to Digital Image Processing. 3 Credits. This course focuses on fundamental concepts about the visualization of various data in the disciplines of digital image processing, computer graphics, photometric processing, and image analysis. The application of python programming will also prepare students for learning Computer Vision and Machine Learning in the future. This course will focus on mathematical foundations and graphic tools including Matplotlib (a graphic plotting library) and OpenCV (an image processing and analysis library for Computer Vision). Some fundamental definitions about image processing or analysis will be introduced. Prerequisite: CSC 240.

CSC 321. Database Management Systems. 3 Credits. Characteristics of generalized database management systems. Surveys of different database models that are currently used. The design and implementation of a database system. Prerequisites: CSC 142 and CSC 241.

CSC 331. Operating Systems. 3 Credits. This course is a general survey of elements of operating systems with in-depth studies of certain features of specific operating systems. Elements of concurrent programming are studied, such as the mutual exclusion problem, semaphores, and monitors. Additionally, the following topics are covered: process scheduling and deadlock avoidance; memory management issues such as paging and segmentation; organization and protection of file systems.
Prerequisites: CSC 220 and CSC 240 and CSC 241, and {CSC 231 or CSC 242}.

CSC 335. Data Communications and Networking I. 3 Credits. An overview of the various aspects of modern data and telecommunications. Discussion of the hardware and software facets of the transmission of information in the forms of voice, data, text, and image. Topics include communication protocols, transmission technologies, analog/digital transmission, communications media, public data networks, LANs, and ISDN. Prerequisites: CSC 240.

CSC 345. Programming Language Concepts/Paradigms. 3 Credits. An examination of the conceptual underpinning of programming languages and of the paradigms into which they fall. Topics will be drawn from those comprising the field of programming language such as abstraction, bindings, concurrency, design, encapsulation, history, representation, storage, and types. Programming projects will focus on languages within the functional, declarative, and object-oriented paradigms such as Common Lisp, ML, Prolog, and CLOS rather than the familiar imperative paradigm. Prerequisites: CSC 220 and CSC 241.

CSC 365. Data Analytics. 3 Credits. This course begins with concepts such as variables, strings, decisions, functions, loops, file input/output, lists, arrays, object-oriented programming such as constructor, inheritance, and polymorphism. It then focuses on more advanced topics such as plotting graphs and using Python packages, machine learning, and statistics. Students will develop the skills necessary to use communication as a problem solving tool in the course. Special emphasis is placed on the student's performance. Prerequisites: CSC141 and CSC142.

CSC 381. Data Science. 3 Credits. This course will introduce data science and related programming concepts. The course includes basic statistics, an intro to machine learning, and an intro to data visualization. Students will learn how to read different types of data files and use statistical tools and machine learning tools to analyze them. Also, they will use basic data visualization techniques to present the result to help in decision-making. A programming language, such as, Python will be used in the class to help students develop understanding of the above concepts. Prerequisites: CSC 231 or CSC 240 or CSC 241 or junior standing.

CSC 382. Applied Machine Learning. 3 Credits. This course introduces machine learning techniques. Students will understand machine learning algorithms as they work with different algorithms and learn to build them from scratch. They will also gain theoretical and practical skills by applying machine learning to real-world problems. Prerequisites: CSC382 requires prerequisites of CSC381 or STA 428 or junior standing.

CSC 400. Internship. 3-6 Credits. The student works in the area of computer science that is his or her specialty. Prerequisites: CSC 141 and CSC 142 and CSC 240 and CSC 241 and MAT 151 and MAT 161. Permission of the Department required to add.

CSC 402. Software Engineering. 3 Credits. This course explores a variety of processes for developing software, including the PSP from the Software Engineering Institute, the SEI's CMMI, and agile processes, including eXtreme Programming and Scrum. A special emphasis is on how software processes can be designed to help software engineers to develop more secure code. Ethical, professional and workplace issues are also covered, as well as strategies for testing software in PSP and agile environments. Teamwork is an important element in this course, and the team work on developing a documented software process for their company. This is the required Capstone course for the program/major. Prerequisites: CSC 241.

CSC 404. Software Testing. 3 Credits. This course consists of two components: software engineering and software testing. Software testing is a critical phase in the software development life cycle for the quality assurance of software. This course will take a practitioner's approach. Students will use hands-on labs to learn Node.js when we cover the principles of software testing. Testing theory topics may include: Math for testing engineers (discrete math, graph theory), Testing Categories (unit testing, integration testing, system testing, load testing, functional testing, and retrospective testing), Testing Approaches (white-box testing, black-box testing), and Testing Methodologies (boundary value testing, domain testing, equivalence class testing, decision-table-based testing, path testing, and data flow testing). Prerequisites: CSC 240 and CSC 241.

CSC 416. Design/Construction Compilers. 3 Credits. Covers the basic topics in compiler design including lexical analysis, syntax analysis, error handling, symbol tables, intermediate code generation, and some optimization. Programming assignments will build various pieces of a compiler for a small language.
Prerequisites: CSC 220 and CSC 240 and CSC 241, and {CSC 231 or CSC 242}.

CSC 417. User Interfaces. 3 Credits. This course deals with database-driven graphical user interface applications. The Model-View-Controller software paradigm is used as a guiding principle for the applications developed. The course features applications using Java-based components as well as web-based components with a modern server-side scripting language such as PHP. Most of the course work is based on developing a complex, large scale web database system with the goal of implementing this system within a web application framework. Prerequisites: CSC 241.

CSC 418. Modern Web Applications Using Server-Side Technologies. 3 Credits. This course provides training in the area of building web applications using Node.js (with Express, and MongoDB) for the back-end and EJS for the front-end user interface. JavaScript has been a client-side script programming language until later in 2009 when Google combined its V8 search engine with Node.JS. Since then, JavaScript has become a full-stack scripting language from the client-side to the server-side. Starting from building a web site without programming, students will be guided with hands-on labs and develop a website using Node.JS and EJS for the front-end. Prerequisites: CSC 240.

CSC 461. Android App Development. 3 Credits. This is an introductory course on Android app development. Students will learn the entire app development cycle from an idea, to a storyboard, to a functional shell, to a working prototype, to an alpha app. They will learn basics of UI selection, interfacing with device hardware, persistence, requesting permissions from the user, connecting to a web API, and google play store presence. Additional topics can be explored by request of the students. Prerequisites: CSC 241.

CSC 466. Distributed and Parallel Computing. 3 Credits. This course introduces students to modern distributed platforms by examining several important technologies in the areas of parallel and distributed computing and how these technologies help in solving computational and data-intensive problems. Students will apply specific trade-offs for parallel application and algorithms development, performance, and management on different distributed platforms. Prerequisites: CSC 231 and CSC 241.

CSC 467. Big Data Engineering. 3 Credits. This course will investigate engineering approaches in solving challenges in data-intensive and big data computing problems. Course topics include distributed tools and parallel algorithms that help with acquiring, cleaning, and mining very large amount of data, including streaming data. Prerequisites: CSC 241.

CSC 468. Introduction to Cloud Computing. 3 Credits. This course provides an introductory overview to the technologies that enable cloud computing. Topics covered include basic concepts about cloud computing and advanced technical concepts regarding virtualization, containerization, and orchestration. Prerequisites: CSC 231.

CSC 471. Modern Malware Analysis. 3 Credits. This course will introduce students to modern malware analysis techniques through lectures and hands-on interactive analysis of real-world samples, including exploring various recent attacks. These examples and studies will help the students develop a foundation and a well-rounded view of cybersecurity research. Participants in the course will also read and discuss research papers, as well as conducting an independent project in a topic related to cyber risk and malware analysis. After taking this course students will be equipped with the skills to analyze advanced contemporary malware using both static and dynamic analysis.
Prerequisites: {CSC 231 or CSC 242} and CSC 302.

CSC 472. Software Security. 3 Credits. This course is primarily aimed at people interested in software security, reverse engineering, and low-level software. In this course, students will explore the foundations of software security. They will consider important software vulnerabilities and attacks that exploit them--such as buffer overflows, SQL injection, and session hijacking--and they will consider defenses that prevent or mitigate these attacks, including advanced testing and program analysis techniques.
Prerequisites: {CSC 231 or CSC 242}, and CSC 302.

CSC 476. Game Development. 3 Credits. This project-based course is concerned with game development and scripting using a modern game engine, such as Unity, with a modern programming language, such as C#. Topics include coding standards, design principles, debugging, game loops, physics engines, lighting, meshes, colliders, databases for persisting data, game lobbies, networked multiplayer games, and building for multiple resolutions and platforms. Individual and team-based assignments will utilize version control. Prerequisites: CSC 241.

CSC 478. Cloud Engineering. 3 Credits. This course provides students with more in-depth understanding of advanced cloud computing technical concepts. Through the perspective of infrastructure-as-code and project-based learning activities, students will study how cloud computing orchestration works to enable the deployment of large-scale complex services in business and academic environments. Prerequisites: CSC468. 

CSC 481. Artificial Intelligence. 3 Credits. Artificial Intelligence (AI) is concerned with the replication or simulation on a machine of the complex behaviors associated with intelligence. Topics will be drawn from any of those comprising the field of AI such as agent architectures, automatic truth maintenance, constraint satisfaction, expert systems, fuzzy logic, games, genetic algorithms, knowledge representation, machine learning, neural networks and connectionism, natural language processing, planning, reasoning, robotics, search, theorem proving, and vision. Projects requiring coding will focus on an AI language such as Common Lisp or Prolog.
Prerequisites: CSC 220 and CSC 241.

CSC 490. Independent Project in Computer Science. 3 Credits. The student designs and implements a software system. Project problems are drawn from local industry and university departments. A computer science faculty member supervises each project. Permission of the Department required to add.

CSC 495. Topics in Computer Science. 3 Credits. Topic announced at time of offering. 

CSC 496. Topics in Complex Large-Scale Systems. 3 Credits. Topics in large scale systems. Topics announced at the time of offering.

CSC 497. Topics in Computer Security. 3 Credits. Topic in computer security announced at time of offering.

CSC 499. Independent Study in Computer Science. 3 Credits. In conjunction with the instructor, the student selects study topics via literature search. Permission of the Department required to add.