Computer Science (COMP-SCI)

Courses

COMP-SCI 100 Computer Fundamentals and Applications Credits: 3

The course covers essential computer concepts and skills. The emphasis is on using the computer as a tool to enhance productivity. Topics include basic computer concepts such as what to look for when buying a computer and how to avoid hackers and viruses when operating one. Students will also learn how to create word processing, spreadsheet, database, and presentation documents using the Microsoft Office suite of applications. The course prepares students to succeed in both college and business by enabling them to write reports, analyze and chart data, prepare presentations and organize large data sets.

Prerequisites: MATH 110 (or higher) or ALEKS score of 51 (or higher); or MyMathTest College Algebra Score of 70 or higher, or ACT Math sub-score of 28 or higher; or SAT Math sub-score of 660 or higher.

COMP-SCI 101 Problem Solving and Programming I Credits: 3

Problem solving, algorithms, and program design. Use of structured programming, lists, control structures, recursion, objects and files in Python. Introduction to graphical interface programming. Coding, testing and debugging using a modern development environment.

Prerequisites: MATH 110 or MATH 120 (or higher) or ALEKS score of 51 (or higher); or MyMathTest College Algebra Score of 70 or higher, ACT Math sub-score of 28 or higher; or SAT Math sub-score of 660 or higher.

Co-requisites: COMP-SCI 101L.

COMP-SCI 101L Problem Solving & Programming I Lab Credit: 1

Programming exercises and demonstrations to reinforce concepts learned in COMP-SCI 101 and provide additional practice in Python programming.

Prerequisites: MATH 110 or MATH 120 (or higher) or ALEKS score of 51 (or higher); or MyMathTest College Algebra Score of 70 or higher, ACT Math sub-score of 28 or higher; or SAT Math sub-score of 660 or higher.

Co-requisites: COMP-SCI 101.

COMP-SCI 191 Discrete Structures I Credits: 3

Mathematical logic, sets, relations, functions, mathematical induction, algebraic structures with emphasis on computing applications.

Prerequisites: MATH 110 or MATH 120 (or higher) or ALEKS score of 51 (or higher); or MyMathTest College Algebra Score of 70 or higher, or ACT Math sub-score of 28 or higher; or SAT Math sub-score of 660 or higher.

COMP-SCI 201L Problem Solving and Programming II - Lab Credit: 1

Programming exercises and demonstrations to reinforce concepts learned in COMP-SCI 201R and provide additional practice in C++ programming.

Prerequisites: COMP-SCI 101.

Co-requisites: COMP-SCI 191 and COMP-SCI 201R.

COMP-SCI 201R Problem Solving and Programming II Credits: 3

Problem solving and programming using classes and objects. Algorithm efficiency, abstract data types, searching and sorting, templates, pointers, linked lists, stacks and queues implemented in C++.

Prerequisites: COMP-SCI 101.

Co-requisites: COMP-SCI 191 and COMP-SCI 201L.

COMP-SCI 281R Introduction to Computer Architecture and Organization Credits: 3

Digital Logic and Data Representation, process architecture and instruction sequencing, memory hierarchy and bus-interfaces and functional organization.

Prerequisites: COMP-SCI 101, COMP-SCI 191.

COMP-SCI 291 Discrete Structures II Credits: 3

Recurrence relations and their use in the analysis of algorithms. Graphs, trees, and network flow models. Introduction to Finite state machines, grammars, and automata.

Prerequisites: COMP-SCI 191.

COMP-SCI 303 Data Structures Credits: 3

Linear and hierarchical data structures, including stacks, queues, lists, trees, priority queues, advanced tree structures, hashing tables, dictionaries and disjoint-set. Abstractions and strategies for efficient implementations will be discussed. Linear and hierarchical algorithms will be studied as well as recursion and various searching and sorting algorithms. Programming concepts include Object Orientation, concurrency and parallel programming. Several in-depth projects in C++ will be required.

Prerequisites: COMP-SCI 191, COMP-SCI 201R, and COMP-SCI 201L.

COMP-SCI 304 Ethics and Professionalism Credits: 3

This course examines the societal and ethical obligations of computer science, information technology, and electrical/computer engineering practice. Topics include obligations of professional practice, digital privacy, intellectual property, and ethical issues around computer security, reliability, and networking.

Prerequisites: Departmental consent.

COMP-SCI 308 Computational Thinking and Programming Credits: 3

An introduction to the elements and applications of computational thinking and programming using Python. Students will learn data representation and organization, algorithmic thinking, logical reasoning, problem-solving, control flow, basic data structures and algorithms, data analysis, applications of computational thinking with Python. This course is not for credit for Computer Science Major or Minor students.

Prerequisites: COMP-SCI 191.

COMP-SCI 320 Data Communications and Networking Credits: 3

This course examines the fundamental aspects of data communications and computer networks. Students will learn the concepts of layered models, communication protocols, digital transmission and encoding techniques, multiplexing techniques, error detection and correction concepts, the data link layer and its associated protocols, LAN architectures, switching techniques, major Internet protocols and standards, internetworking, addressing, and routing concepts. By the end of the course, students will be familiar with all networking concepts and technologies and will be able to size and implement different types of networking architectures. Part of the course will be devoted to the use of opensource software tools, such as Cisco Packet Tracer and Wireshark, to experiment with network architectures and analyze network traffic.

Prerequisites: COMP-SCI 291.

COMP-SCI 349 Java Programming with Applications Credits: 3

The course covers the syntax and semantics of the Java programming language along with the use of essential class libraries. These topics will be taught in the context of application development. Students will learn how to write small to medium sized Java applications and applets. Specific topics covered include: essential classes in the Java API, interfaces, inheritance, exceptions, graphical user interface components, layout managers, events, I/O classes, Applets, data base access, and multithreading. Other topics will be covered as time permits.

Prerequisites: COMP-SCI 303.

COMP-SCI 353 Functional Programming Credits: 3

Functional programming is a paradigm which views program output as a mathematical function of the input. A mathematical function has no side effects or state; functional programming emphasizes avoiding side effects, often by employing standard operations such as map, reduce, and filter. The absence of side effects, use of composable functions, and immutable data make reasoning about program behavior and proving correctness simpler, and source code more compact. Concurrency is straightforward, allowing functional programs to scale to large data sets or multiple processors.

Prerequisites: COMP-SCI 201R.

COMP-SCI 361 Introduction to Cybersecurity Credits: 3

A study of the fundamental cybersecurity topics, including cyber threats & vulnerabilities, application security, information security, cryptography, network security, and policies and strategies for security risk management. Students will be applying knowledge to identify threats & protect against potential cyberattacks

Prerequisites: COMP-SCI 320.

COMP-SCI 371 Database Design, Implementation and Validation Credits: 3

This course discusses in detail all aspects of database management systems. It covers in detail database design, implementation, and validation. In addition to these, it briefly covers implementation, tuning, database security, and implementation. The course is suitable for undergraduates and professionals alike.

Prerequisites: COMP-SCI 303.

COMP-SCI 394R Applied Probability Credits: 3

Basic concepts of probability theory. Counting and measuring. Probability, conditional probability and independence. Discrete, continuous, joint random variables. Functions of random variables. Sums of independent random variables and transform methods. Random number generation and random event generation. Law of large numbers, central limit theorem, inequalities. Their applications to computer science and electrical and computer engineering areas are stressed.

Prerequisites: COMP-SCI 201R and COMP-SCI 201L (or E&C-ENGR 216), MATH 220, and STAT 235 (or E&C-ENGR 241, or STAT 115, or MOTRMATH 110).

COMP-SCI 404 Introduction to Algorithms and Complexity Credits: 3

A rigorous review of asymptotic analysis techniques and algorithms: from design strategy (such as greedy, divide-and-conquer, and dynamic programming) to problem areas (such as searching, sorting, shortest path, spanning trees, transitive closures, and other graph algorithms, string algorithms) arriving at classical algorithms with supporting data structures for efficient implementation. Throughout, the asymptotic complexity is studied in worst case, best case, and average case for time and/or space, using appropriate analysis techniques (recurrence relations, amortization). Introduction to the basic concepts of complexity theory and NP-complete theory.

Prerequisites: COMP-SCI 291 and COMP-SCI 303.

COMP-SCI 420 Advanced Networking and Applications Credits: 3

This course provides advanced knowledge in computer networking and applications. More specifically, the students will learn new networking concepts, such as software-defined networking (SDN), next-generation networking protocols, such as IPv6, how streaming of multimedia flows and group communications are performed in the Internet, how networks are managed through remote network management platforms, and how to secure networking architectures.

Prerequisites: COMP-SCI 320.

COMP-SCI 421A Foundations of Data Networks Credits: 3

This introductory course examines the analytical aspects of data communications and computer networking. Topics cover protocol concepts and performance analysis that arise in physical. data link layer, MAC sub layer, and network layer.

Prerequisites: COMP-SCI 291, COMP-SCI 303, COMP-SCI 394R.

COMP-SCI 423 Client/Server Programming and Applications Credits: 3

Fundamentals of Client/Server programming using socket interface; features of network programming including connection oriented and connectionless communication in multiple environments (Windows, UNIX, and Java); other client/server mechanisms, such as RPC and RMI) and formal object environments designed to facilitate network programming (CORBA, COM and Beans).

Prerequisites: COMP-SCI 303, COMP-SCI 431.

COMP-SCI 424 Software Methods and Tools Credits: 3

This course covers a number of software methods and tools that are widely used in industry. These methods include architecture patterns and styles, software frameworks, unit testing, and version control. The covered software tools include Microsoft Project, IBM Rational Systems Modeler, Eclipse Plug-ins, JUnit, Subversion, and GIT. The course emphasizes practice. Students will use these methods and tools to develop a software system from the initial planning to final deployment.

COMP-SCI 426 Network Security Credits: 3

This course provides an introduction to network security concepts and protocols. Topics addressed include: foundations of network security and an in-depth review of commonly used security mechanisms and techniques, security threats and network-based attacks, applications of cryptography, authentication, access control, intrusion detection and response, security protocols (IPsec, SSL, Kerberos), denial of services, viruses and worms, web security, wireless security, and privacy. Recommended preparation: C/C++/Java programming course.

Prerequisites: COMP-SCI 320.

COMP-SCI 431 Introduction to Operating Systems Credits: 3

This course covers concurrency and control of asynchronous processes, deadlocks, memory management, processor and disk scheduling, x86 assembly language, parallel processing, security, protection, and file system organization in operating systems.

Prerequisites: COMP-SCI 303, COMP-SCI 281R.

COMP-SCI 436 Digital Forensics Credits: 3

A study of the processes, principles, and tools for investigating incidents where computers and digital media play a significant or interesting role. Students will learn digital evidence controls, evidence search, E-mail investigations, data hiding, steganography, data recovery, password cracking, network forensics, and mobile/IoT forensics.

Prerequisites: COMP-SCI 201R.

COMP-SCI 441 Programming Languages: Design and Implementation Credits: 3

This course covers programming language paradigms (object-oriented programming, functional programming, declarative programming, and scripting) and design tradeoffs in terms of binding, visibility, scope, lifetime, type-checking, concurrency/parallelism, and abstraction. It also covers programming language specification, grammar, lexical analysis, exception handling, and runtime considerations.

Prerequisites: COMP-SCI 303.

COMP-SCI 446 Distributed Computing Systems Credits: 3

This course will teach students the fundamentals of distributed computing systems that are the building blocks of large-scale software systems, such as cloud computing, search engines, and social networking platforms. The course will cover the following four groups of topics: distributed computing basics (e.g., system model, inter-process communication, messaging and remote invocations), distributed algorithms (e.g., time synchronization, distributed coordination algorithms, consensus), distributed services (e.g., distributed file systems, group communication, replication), and distributed systems (e.g., peer-to-peer systems, publish-subscribe systems).

Prerequisites: COMP-SCI 431.

COMP-SCI 449 Foundations of Software Engineering Credits: 3

An introduction to the fundamental principles and practices of software engineering. Students will learn a systematic and disciplined process for developing software and apply it to a small project. The focus will be on the agile development process, software requirements, software design, and unit testing.

Prerequisites: COMP-SCI 303.

COMP-SCI 451R Software Engineering Capstone Credits: 3

The course will focus on the requirements and project planning and managing of medium sized projects with deliverables of each phase of the software life cycle. Additional studies of system integration and architecture, software modeling, requirements specifications, configuration management, verification, validation, software evolution and quality and finally measurement, estimation and economics of the software process.

Prerequisites: COMP-SCI 303, COMP-SCI 449.

COMP-SCI 456 Human Computer Interface Credits: 3

Design of human-computer interfaces considering the psychological and physical abilities of the user. User interface design from a functional and ergonomic perspective. Contents organization, visual organization, navigation. Use of graphical user interface (GUI) and the development of high quality user interfaces.

Corequisites: COMP-SCI 449.

COMP-SCI 457 Software Architecture: Requirements & Design Credits: 3

Introduction to requirements and design engineering with emphasis on organization and presentation of system requirements and designs for customers, users and engineers; validation of requirements and design with needs of system customer; examination of requirement and design changes during the lifetime of a system; transformation of informal ideas into formal detailed descriptions; examination of the different stages in the design process including architectural design, interface design and data structure design, database design, program and transaction design; examination of domain modeling criteria and examination of design quality attributes; non-functional attributes and project resource allocation.

Prerequisites: COMP-SCI 303.

COMP-SCI 458 Software Testing and Verification Credits: 3

Introduction to principles and techniques of software testing and verification for quality assurance in software development processes. Topics include functional testing, structural testing, test automation, specification-based testing, model-based testing, static code analysis, and formal verification.

Prerequisites: COMP-SCI 303.

COMP-SCI 461 Introduction to Artificial Intelligence Credits: 3

This course provides an overview of the field of artificial intelligence. Topics include guided and unguided search, adversarial search, generation and use of heuristics, logic programming, probabilistic reasoning, and neural networks. Application areas studied include game playing, automated proofs, expert systems, and data mining. Recommended preparation: One or more of COMP-SCI 394R, COMP-SCI 404, or an advanced programming elective.

Prerequisites:COMP-SCI 303.

COMP-SCI 465R Introduction to Statistical Learning Credits: 3

This course provides a practical introduction to analytical techniques used in data science and prepares students for advanced courses in machine learning. Topics covered include multivariate distributions, information theory, linear algebra (eigenanalysis), supervised/unsupervised learning, classification/regression, linear/non-linear learning, introduction to Bayesian learning (Bayes rule, prior, posterior, likelihood), parametric/non-parametric estimation.

Prerequisites: COMP-SCI 394R.

COMP-SCI 470 Introduction to Database Management Systems Credits: 3

This course covers database architecture, data independence, schema, Entity-Relationship (ER) and relational database modeling, relational algebra and calculus, SQL, file organization, relational database design, physical database organization, query processing and optimization, transaction structure and execution, concurrency control mechanisms, database recovery, and database security.

Prerequisites: COMP-SCI 303.

Co-requisites: COMP-SCI 431.

COMP-SCI 473 Data Compression Credits: 3

A study of big data compressions, such as speech, audio, text, video, and graph signals, which are, currently, dominating the Internet and mobile networks. Selected topics include info theory for uncertainty, entropy coding like hoffman coding, arithmetic coding, image and video prediction, transform, quantization and compression, graph signal and data compression, deep learning based compression.

Prerequisites: COMP-SCI 303.

COMP-SCI 476 Blockchain Technologies Credits: 3

An introduction to the essential concepts and applications of blockchain technologies. Students will delve into the concepts through a set of hands-on activities including exploring blockchains, creating wallets, trading cryptocurrency, and building a blockchain application.

Co-requisites: COMP-SCI 431.

COMP-SCI 479 Introduction to Computer Vision Credits: 3

Image is an essential form of information representation and communication in modern society. This course focuses on topics of computer vision, teaching computers how to understand images. Introductory topics include image formation, color and texture features, homograph, key points detection, aggregation, subspace methods in image modeling, and deep learning based image segmentation and classification, with applications in photography, media and entertainment, education, defense and medicine. The course is project based and emphasis hands on experiences for students to solve real world problems.

Prerequisites: E&C-ENGR 484.

COMP-SCI 482 Computer Vision Credits: 3

A study of how computers understand images. Students will learn image formation, color, and texture features, homography, key points detection, aggregation, subspace methods in image modeling and deep learning-based image classification with many applications in photography, media and entertainment, education defense and medicine. Students will also gain hands-on experience to solve real-world problems.

Prerequisites: COMP-SCI 303.

COMP-SCI 483 Software Security Credits: 3

A formal study of the principles, techniques, and best practices for developing secure software. It emphasizes the security ramifications for different activities of software development processes, including security policies, security requirements analysis, threat modeling, secure design, secure programming, security testing, and verification.

Prerequisites: COMP-SCI 303.

COMP-SCI 490 Special Topics Credits: 1-3

Selected topics in specific areas of computer science. May be repeated for credit when the topic varies.

Prerequisites: Junior standing.

COMP-SCI 490CR Special Topics Credits: 1-3

Special topics in Computer Science.

COMP-SCI 490R Special Topics Credits: 1-3

Selected topics in specific areas of computer science. May be repeated for credit when the topic varies.

COMP-SCI 491 Internship Credits: 1-3

Students may participate in structured internships under the joint supervision of an employer and a faculty member. The student must carry out significant professional responsibilities that also have academic merit. Available for credit/no credit only and students must be in good standing with at least 18 credit hours of coursework counting towards the computer science degree. Registration by consent number only.

Prerequisites: Departmental consent.

COMP-SCI 497 Directed Readings Credits: 1-3

Readings in an area selected by an undergraduate student in consultation with a faculty member. Arrangements must be made prior to registration.

Prerequisites: Departmental consent.

COMP-SCI 498 Research Seminar Credits: 1-3

Undergraduate research based on intensive readings from the current research literature under the direction of a faculty member. Arrangements must be made prior to registration.

Prerequisites: Departmental consent.

COMP-SCI 499 Undergraduate Research Credits: 1-3

Completion of project, including a final written report, under the direction of a faculty member. A prospectus must be accepted prior to registration.

Prerequisites: Departmental consent.