Computer Science

Classes

CSCI 100 : Intro to Computer Science

This course introduces the fundamentals of systems and computer science. A brief examination of critical, creative, systems and scientific thinking, is followed by more details on computational thinking. The focus is hands on computing exercises and group exercises that stress the importance of algorithms and problem solving. Students are exposed to the research agenda of the department, the different track options and career opportunities along the different tracks.

Credits

3

CSCI 120 : Explorations in Computer Science

This is a required freshman course introducing CS fundamentals such as: binary arithmetic, computational linear algebra, and python programming. Course explores CS sub-domains such as: artificial intelligence, cybersecurity, data science, machine learning, interactive media (games), human computer Interface (HCI) usability testing, and robotics. In addition, students will be exposed to design thinking for innovation. Class will include presentations from leading experts from academia, government and industry allowing students to ask questions directly. Topical assignments will expose students to introductory topics through individual exercises and team projects.

Credits

2

CSCI 135 : Computer Science I

This course provides an introduction to the discipline of computer programming. Closed laboratory to reinforce lecture topics and introduce new topics. Course is designed to expose students to basic programming concepts and to the use of the C++ language. This course is designed to enhance the student's ability to design, develop and test/debug programs. Each student will increase his or her skill in writing correct and maintainable programs. Emphasis will be placed on problem analysis and on the subsequent development of algorithms. Several standard data types will be discussed and the student will gain an understanding of the issues relating to the use, design and implementation of each type in C++. A major focus of the lectures will be to provide an overview of real-world problem solving concepts and top-down software design.  Prereq: Intro. to Computer Science. 

Credits

4

CSCI 136 : Computer Science II

Course exposes students to the software development life cycle with a focus on the concepts and use of the object-oriented paradigm in problem analysis, solution design, software development and implementation.  This course is designed to enhance the student's ability to engineer software that is efficient, maintainable and cost efficient over its entire life cycle. Data abstraction is discussed in depth and students gain experience in the use of classes, object and member functions.  Students gain an understanding of the development of reusable abstract data types.  Software reuse is emphasized and object-oriented concepts are used throughout the course. O-notation and the complexity of algorithms are discussed at relevant points in the course

Credits

3

Prerequisites

CSCI   135 (with a grade of 'C' or better.

CSCI 165 : Scientific Computing for Eng

Introduces programming and use of digital computers through symbolic programming. Programming includes general problem-solving and the systematic development of algorithms, use includes the coding of programs and practical experience in Maxima or Matlab.

Credits

3

CSCI 201 : Computer Organization I

This course will cover the fundamentals required to understand the relationship between computer hardware and software. Topics include data representation on computers, computer arithmetic, Boolean algebra and digital logic, and assembly programming in MIPS

Credits

3

Prerequisites

CSCI 135.

CSCI 202 : Computer Organization II

This course will present the relationship between computer hardware and software, and the fundamental knowledge essential for understanding and designing the operations of computer systems. Topics include performance evaluation, non-pipelined and pipelined datapath, memory hierarchies, and I/O devices

Credits

3

Prerequisites

CSCI 201

CSCI 211 : Unix Lab

This course will present the basic concepts of LINUX and UNIX operating systems. Topics that will be examined include Vi editor, Linux Command, directories, Disks and File systems, Users and Groups, File Permissions, Processes, file compression, basic network use, manage files, create and modify files, and Shell script.

Credits

1

CSCI 341 : Theory of Computation

Introduction to the classical theory of computer science. A study of the formal relationships between machines, languages and grammars, we will cover regular, context-free, context-sensitive, recursive and recursive enumerable languages. Sequential machines and their applications to devices, processes, and programming. Models of computation: finite state automata, push down automata, Turing machines. The role of non-determinism

Credits

3

Prerequisites

CSCI 136 and Discrete Structures.

CSCI 350 : Structure of Program Language

The course will teach students the basic components of the design and analysis of computer programming languages as well as the fundamental computation theory that is required to understand those concepts. The course will also cover several non-imperative languages (unlike C, such as LISP and Prolog) to expose students to the diversity of programming languages.

Credits

3

Prerequisites

CSCI 201, CSCI 341

CSCI 354 : Computer Science III

The course continues the study of data structures and algorithms, focusing on algorithmic design and problem analysis and the relationships between data representation, algorithm design, and program efficiency. Topics include advanced data structures, key algorithm design techniques, analysis of the time and space requirements of algorithms, and the subsequent development of solution of systems. Concrete examples will be drawn from a variety of domains, such as algorithms for trees and graphs, indexing and search, and real-world problems.

Credits

3

Prerequisites

CSCI 136 (with a 'C' or better)

CSCI 363 : Large Scale Programming

This course will introduce the students to applications and systems in the large scale. Students will be introduced to the object-oriented method to software design using UML and will apply the object-oriented design/analysis techniques of UML to a realistic Java application. Students will gain familiarity with managing larger projects and OOA/D.

Credits

3

Prerequisites

CSCI 136

CSCI 375 : Software Engineering

This course will introduce students to the basic concepts of software engineering and the software development life cycle. The course will cover methodological techniques for software specification, design, implementation, testing, verification, and documentation. The course will also present the use of state-of-the-art tools for computer-aided software engineering (CASE).

Credits

3

Prerequisites

CSCI 354

CSCI 376 : Operations Research

Methodology for planning, analyzing and evaluating optimal systems: identifying and structuring objectives and defining performance requirements that influence the design of the system. Synthesizing and analyzing alternative solutions and applying optimization techniques for the optimum queuing system. Applications to real world systems with open and closed queues with emphasis on computer systems using microcomputer software packages.

Credits

3

Prerequisites

CSCI 375

CSCI 379 : Into to Human-Comp Inter Des

Students will learn the fundamental concepts of human-computer interaction and user-centered design thinking, through working in teams on an interaction design project, supported by lectures, readings, and discussions. They will learn to evaluate and design usable and appropriate software based on psychological, social, and technical analysis. They will become familiar with the variety of design and evaluation methods used in interaction design, and will get experience with these methods in their project.

Credits

3

Prerequisites

CSCI 354

CSCI 390 : Ethical & Soc. Impact of Compu

This course will present the foundations of ethics in the context of computing. The broader social impact of computing and technology in general will also be reviewed. Areas of specific focus will include technology and human values, costs and benefits of technology, the character of technological change, and the social context of work in computer science and information technology.

Credits

2

CSCI 401 : Operating Systems

This course will present the basic concepts of operating systems. Topics that will be examined include processes and interprocess communication/synchronization, virtual memory, program loading and linking system calls and system programs, interrupt handling, device and memory management, process scheduling, deadlock and the trade-offs in the design of large-scale multitasking operating systems. 

Credits

3

Prerequisites

CSCI 202; CSCI 363

CSCI 402 : Mobile Application Development

This course will introduce students to developing applications which target mobile devices. Students will be introduced to many issues unique to mobile applications, including synchronization, remote data access, security and sometimes-connected networks. They will research topics in these areas and develop a significant project which demonstrates their knowledge and understanding of these issues. 

Credits

3

Prerequisites

CSCI 354

CSCI 410 : Modeling & Simulation

Introduces the fundamentals of system design and modeling. Emphasizes advantages and limitations of various modeling techniques for different applications. Introduces probability distributions typical of queuing models and presents in-depth discussions and experiments with existing simulation packages.

Credits

3

CSCI 421 : Computer & Video Game Dev

The course will span the software domains embedded in computer and video games. Topics such as game computational infrastructure, design, engines, and motion will be presented through discussion and assignments.  Game industry guest speakers will discuss software challenges and opportunities. Students completing this course will understand the software development process required to create a successful game and possess the programming expertise to create a simple game.

Credits

3

Prerequisites

CSCI 354, CSCI 375

CSCI 422 : Game Engine Programming

Game engine programming is introduced as a critical element in compelling game creation.  Programming activity will feature input capture, world integration, object motion, collision detection and audio scoring. Game performance metrics, code optimization and quality assurance testing procedures will be emphasized.  Code examples will be presented from XNA game studio and Torque. Course game project may be completed using a 2D or 3D game engine of choice including Torque, Gamestudio, Panda3D, or OGRE 3D rendering engine. 

Credits

3

Prerequisites

CSCI 421

CSCI 432 : Database Systems

This course will present the basic concepts of database systems. Topics that will be covered include basic relational database theory, relational database modeling, relational database design and implementation, normalization, transaction management, the SQL language and other languages and facilities provided by database management systems

Credits

3

Prerequisites

CSCI 354

CSCI 450 : Data Comm & Network Prog

This is an introductory course on computer networking. It will cover the layering model of the Internet. The upper four layers (application, transport, network and data link) will be discussed in details with dominant networking protocols and algorithms introduced. Students will also learn how to do basic programming on the Internet.

Credits

3

Prerequisites

CSCI 354, CSCI 201, CSCI 470, Discrete Structures

CSCI 452 : Network and Web Programming

This class will introduce (1) network programming, writing applications that communicate with each other via TCP/UDP sockets, and (2) Web programming, writing applications that are accessible through a Web Browser over the Hypertext Transport Protocol (HTTP). For web programming, both client side and server side programming will be covered. The LAMP stack (Linux, Apache, MySQL, and PHP) will be used for server side, Javascript and CSS will be covered for client side. HTML will be taught before studying programming. As prerequisites, programming skills are needed. Light database experience is preferred but not required

Credits

3

CSCI 453 : Intro to Cyber Security I

Computer Security Overview. Malware and Cyberwarfare. Passwords. Biometrics. Access Controls. Multilevel Security. Multilateral Security. Firewalls. Intrusion Detection . Cryptography Before 1970. Symmetric Key Cryptography. The Data Encryption Standard (DES). The Public Key Paradigm. Knapsacks. The RSA Approach to Public Key Cryptology. Elliptic Curve Cryptography. The Advanced Encryption Standard (Rijndael). Hash Functions. The Digital Signature Standard

Credits

3

CSCI 454 : Intro to Cyber Security II

Distributed Denial of Service (DDoS). Hash Functions. SHA-3 and Keccak. Network Security. Network attack and defense. Steganography . Software security I. Software flaws. Malware. Miscellaneous software-based attacks. Software security II. Software reverse engineering. Software tamper resistance. Digital rights management. Software development. Stuxnet and Cyberwarfare. Advanced encryption techniques. Elliptic Curves and Elliptic Curve Cryptography. Electronic voting. Quantum cryptography.

Credits

3

Prerequisites

CSCI 453

CSCI 470 : Fundamentals of Algorithms

Techniques for designing efficient algorithms, analyzing their complexity and applying these algorithms to a broad range of application settings. Methods for recognizing and dealing with hard problems are studied.

Credits

3

Prerequisites

CSCI 354

CSCI 471 : Applied Data Structure

This course aims to teach students to learn skills required for solving technical interview problems and deepen ones ability to solve time sensitive programming tasks. Students will learn new data structures, algorithms, and algorithm design techniques and improve their comfort with applying data structures and algorithms knowledge to real-world problems. After this course, students will be able to identify the best data structure or algorithm for their problem and explain the reason for their decision.

Credits

3

CSCI 472 : Systems Management Analysis

This course presents methodology for large-scale system design and analysis using modern semantic analysis techniques. Identification and definition of large-scale (community/industrial-based) problems. Discusses how to select and quantify measures of the severity of the problem. Presents different techniques for modeling alternative solutions to problems.

Credits

3

Prerequisites

CSCI 375

CSCI 473 : Applied Data Science

This course is an introduction to probability and statistical concepts and their applications in solving real-world problems. This prerequisite course provides a solid background in the application of probability and statistics that will form the basis for advanced data science methods. Statistical concepts, probability theory, random and multivariate variables, data and sampling distributions, descriptive statistics, and hypothesis testing will be covered. The use of computer-based applications for the performance of basic statistics will be utilized.

Credits

3

CSCI 475 : Intro to Machine Learning

Techniques for learning from data and applying these algorithms to application settings. Topics covered include Bayesian methods, linear classifiers such as the perceptron, regression, and non-parametric methods such as k-nearest neighbors. 

Credits

3

Prerequisites

CSCI 354; MATH 189

CSCI 476 : Artificial Intelligence

This course will introduce students to contemporary topics in artificial intelligence. Topics that will be examined include basic AI concepts, representations, and techniques used in building practical computational systems (agents) that appear to display artificial intelligence, through the use of adaptive information processing algorithms. During the semester students will learn general knowledge representation techniques and problem solving strategies. Topics will include search, intelligent agents, game playing and rule-based systems.

Credits

3

Prerequisites

CSCI 350

CSCI 479 : Cybersecurity Network CPS/IoT

This course is designed to introduce emerging topics related to cybersecurity challenges and practical cyber-defense/countermeasures in networked Cyber-Physical Systems (CPS) and Internet-of-Things (IoT). The course will cover fundamental concepts, technologies, theoretical understanding and practical basis for cybersecurity of networked CPS/IoT.

Credits

3

CSCI 481 : Product Management

This course teaches students to understand what a product manager (PM) does and what their role is. Students learn product skills including customer discovery, pitching, requirements definition, UI design, and using metrics. They learn management skills such as influence without authority, negotiation, and having difficult conversations. Students practice these skills by creating an end-to-end product plan.

Credits

3

CSCI 490 : Software Development Studio

This course is an integrative experience that brings together all components of the undergraduate computer science curriculum in an applied, hands-on real-world setting. The course is a bridge between the academic experience and the professional workplace. The objectives of the Capstone course are to give the student the experience of 1) being involved in building a non-trivial, real-world, software development project; 2) working with other developers in a team environment; 3) building a web application and 4) integrating knowledge of topics such as programming, data structures, algorithms, database, and software engineering within a team-project framework. Students will present their final product at the end of the semester.

Credits

3

CSCI 491 : Senior Project I

Allows the senior student the opportunity to demonstrate his or her knowledge of systems engineering and computer science principles by application to a class project of his or her choosing, with the guidance and supervision of a faculty member. The student develops a proposal for the project, followed by an architectural design and detailed design, all of which must be presented in class

Credits

3

Prerequisites

CSCI 202

CSCI 492 : Senior Project II

In part two, the senior student develops and implements the system solution to the proposed project. The system, most commonly comprising computer software, hardware, procedures, etc., is implemented and tested in the department's Systems Development Laboratory. The student is required to demonstrate the system solution to the faculty and the student body of the department.

Credits

3

Prerequisites

CSCI 491

CSCI 493 : Tech Entrepr & Lean StartUps

This course provides real world, hands-on learning on what it's like to actually start a high-tech company. This class is not about how to write a business plan. It's not an exercise on how smart you are in a classroom, or how well you use the research library to size markets. And the end result is not a Power Point slide deck for a VC presentation. And it is most definitely not an incubator where you come to build the hot-idea that you have in mind. This is a practical class,essentially a lab, not a theory or book class. Our goal, within the constraints of a class room and a limited amount of time, is to create an entrepreneurial experience for you with all of the pressures and demands of the real world in an early stage startup. You will be getting your hands dirty talking to customers, partners, competitors, as you encounter the chaos and uncertainty of how a startup actually works. You'll work in teams learning how to turn a great idea into a great company. You'll learn how to use a business model to brainstorm each part of a company and customer development to get out of the classroom to see whether any one other than you would want/use your product. Finally, based on the customer and market feedback gathered, you would use agile development to rapidly iterate your product to build something customers would actually use and buy. Every day will be a new adventure outside the classroom as you test each part of your business model and then share the hard earned knowledge with the rest of the class

Credits

3

CSCI 498 : SpTp: Robotics Programming

The primary focus of this course will be behavior-based robotics, which uses semi-autonomous artificial intelligence modules for planning. Behavior-based robots use sensor information to react to changes in an environment, instead of complicated internal models. Higher level concepts that will be covered include multi-robot communication, robot localization and path planning.

Credits

3

Prerequisites

Junior Standing, MEEG, ECEG, CSCI major