Course Offering Descriptions

 

Course Description Faculty
CS415:
Relational Document-Based Database
This course covers the essentials of DB design principles and an introduction to SQL and NoSQL databases.
Topics include: Relational DB design principles, Normal Forms, Primary and Foreign and Unique keys; Queries (Aggregation, Joins, Sorting); Transactions; Document-based DB design principles, Indexes, Scaling Databases; Availability and recovery (dump, restore, export, import); Database as a Service.

Unubold Tumenbayar
Sridevi Malasani
CS422:
Database Management Systems
Database systems organize and retrieve information, allowing the user to access the desired information easily and efficiently. Topics include: relational data model; SQL; ER modeling; relational algebra; data normalization; transactions; objects in the database; data security and integrity; data warehousing, OLAP, and data mining; distributed databases; and study of a specific commercial database system. (4 units) Joseph Lerman
Mrudula  Mukadam
CS425: Software Engineering Software Engineering is a course that introduces the student to best practices in software development through a software development methodology. Students have already had some experience in previous courses with the Object Oriented paradigm and have used some of the basic UML diagrams for purposes of modeling relationships between software objects.
Show More
In Software Engineering, the student will develop skills in putting these tools together to produce robust, easily maintainable software. A software development methodology describes when and how OO concepts and UML diagrams should be used to accomplish the aim of building quality software. The course centers around a small project in which the principles discussed in the lecture format can be illustrated and applied. By the end of the course, the student will have a running application, built in accord with the high standards of the RUP (Rational Unified Process) development methodology.
Paul Corazza
Emdad Khan
Obinna Kalu
CS435:
Algorithms
This course presents methods for analyzing the efficiency of algorithms (including worst-case and average-case analysis) and introduces a variety of known, highly efficient algorithms. Analysis, design, and implementation of algorithms are given equal emphasis.
Show More
Topics include searching and sorting, efficiency of operations on data structures (including lists, hashtables, balanced binary search trees, priority queues), graph algorithms, combinatorial algorithms, recurrence relations, Dynamic Programming, NP-complete problems, and some special topics as time allows (Special topics include computational geometry, algorithms for cryptosystems, approximation, Big Data and parallel computing).
Clyde Ruby
Paul Corazza
Emdad Khan
CS445:
Modern Asynchronous Programming
This course goes deep into asynchronous web programming concepts and covers the most essential design patterns for JS, that includes the observer pattern, factory, decorator, and many more. It also covers working with Web API and Immutable data structures.
Topics include: Collaborative Git; Intro to TypeScript and Bundlers; Asynchronous JavaScript; Event-Loop; History API, Geolocation API; Ajax (HTTP, Ajax, JSON, Fetch, Introduction to CORS, Debugging); Promises and Async/Await; Reactive Programming; RxJS Observables and Operators; Design Patterns: Module, Prototype, Singleton, Observer, Façade, Factory, Decorator, Proxy, Strategy, Memoization; Modern Web Browsers.

Rujuan Xing
CS471:
Parallel Programming
The future of computing is parallel. The increase in sequential performance has plateaued as processor designs have hit the limits of miniaturization, clock frequency, power, and heat.  In 2005 the number of processor cores abruptly started increasing from a single core to multiple cores, creating the potential to execute programs much more quickly. However, to utilize this potential, a programmer must have some knowledge of parallel programming techniques.
Show More
This course teaches students the fundamental concepts of parallel programming in the context of Java 9. Parallel programming enables developers to use multicore computers to make their applications run faster by using multiple cores at the same time. By the end of this course, you will learn how to use popular parallel Java frameworks (such as Multi-Threading, Streams, and Executors) to write parallel programs for a wide range of multicore platforms including servers, desktops, or mobile devices.
The software tools used during this course include Microsoft Visual Studio, Java multithreading library, and OpenMP threading standard. (4 units) Prerequisite: Knowledge of computer programming using Java, C, or C++.

For further information, watch this five-minute video made by the Professor of this course:
https://www.youtube.com/watch?v=dWcWAnn0Ppc
Bruce Lester
CS472:
Web Application Programming
This course provides a systematic introduction to programming interactive and dynamic web applications. The course is intended for individuals with little or no prior web application programming experience. This offering will use NodeJS and the Express framework for server-side processing. The course begins with a review of the fundamentals of HTML and CSS, with a special focus on web page layout using CSS. JavaScript is the programming language used thorough the course including functions, objects, modules, jQuery framework, Ajax, and Promises. Students spend most of their time programming a series of increasingly complex and sophisticated websites. A capstone project during the last week of the course creates a website with a SQL database backend that is accessed asynchronously by the client for optimal performance. Bruce Lester
Keith Levi
Asaad Saad
Rujuan Xing
Obinna Kalu
Mohammed Elmatary
Sridevi Malasani
Ankhtuya Ochirbat
CS473:
Mobile Device Programming
Developing Android programs is an exciting and potentially lucrative experience. Android development opens up the world of creativity to you the programmer and allows you to express yourself in ways you never dreamed of in a digital world where you can create a product and make it available to billions of users in just one click of a button. This course will concentrate on creating Android applications by using the Kotlin programming language.
Show More
Topics you will learn includes: Setting up your computer for Android programming; Manifest basics; Layouts, Activities, Views and UI components; Working with Intents, Fragments and Shared Preferences; Web View and HTML; Working with Multimedia; SQLite Database and JSON; Understating Sensors; Localization; Publishing app into Google play store.
Renuka Mohanraj
CS477:
Server-Side Programming
This course focuses on using JavaScript at the backend (NodeJS). Students will learn how NodeJS works and gain a deep understanding of its core application programming interface (API). The course covers how the JS compiler engine (V8) works, how to structure code using modules, and how asynchronous code works in Node and the Node event loop.
Show More
The course also teaches Node Package Manager (NPM), how to build a web server, how to work with Express framework, and how to use ODM such as Mongoose to manage MongoDB. Students will learn all the techniques that define a modern web application, including authenticating users with JSON Web Tokens, persisting data in the database, and building a Restful API. Other computer science concepts are also covered.
Topics include: HTTP & Rest API design; Stateless vs stateful applications; Node API; Node Package Manager (npm); Model-Controller architecture, Express framework, and middlewares; Server-side routing; Token-based authentication.

Rujuan Xing
Thao Huy Vu
CS488:
Big Data Analytics
The intelligence of any area or organization is reflected in its processes and structures. One important and growing aspect of that is embedded in its information systems and associated data. Data Analytics is the overall field that includes gathering and analysis of this data to discover the underlying structure and patterns and producing actionable intelligence, to help managers drive superior performance. This course covers the fundamental concepts and tools for mining large diverse data sets to generate new insights – you will learn techniques like Regression, Bayes’ Rule, Decision Tree, KNN, SVM, Association Rule mining, Clustering, Text Mining and many more. You will master the use of R language to create Wordcloud, Data Visualization and implement the techniques mentioned above. You will work in groups on a project to research on a popular data mining algorithm and present your work. (4 units) Prerequisite: Consent of the department faculty. Anthony Sander
CS516:
Cloud Computing
This course will cover cloud programming patterns and will allow students to practice working with various web cloud services, including AWS Serverless functions.
Topics include: dentity & Access Management (IAM); Virtual Private Cloud (VPC), Network Access Control Lists – NACL, Subnets, Availability Zones, Simple Storage Service (S3), Elastic Cloud Compute (EC2), Simple Notification Service (SNS), Elastic Load Balancer (ELB), Auto Scaling, Route 53, API in the cloud; AWS Lambda, Serverless; Web Services; Application Deployment, Final Project.
Unubold Tumenbayar
CS522:
Big Data
Modern information processing is defined by vast repositories of data that cannot be handled by traditional database systems. This course covers latest technology developed and used by industry leaders to solve this problem in the most efficient way.
Specific topics covered include MapReduce algorithms, MapReduce algorithm design patterns, HDFS, Hadoop cluster architecture, YARN, computing relative frequencies, secondary sorting, web crawling, inverted indexes and index compression, Spark algorithms and Scala (4 units)
Prem Nair
CS523
Big Data Technology
In just a few short years, big data technologies have gone from the realm of hype to one of the core components of the new digital age. These technologies are very useful for transforming Information into Knowledge. The aim of the course is to add some important tools to your arsenal to help you solve various big data problems.Show More
The course starts with giving answers to questions like “What is Big Data and it’s importance? How do you store big data reliably and cheaply? Which tools to use to find helpful information from this big data? etc.”  In this course, students will study different tools and programming models for analyzing big data. Topics include Hadoop ecosystem projects such as MapReduce, Pig, Hive, Sqoop, Flume, HBase (NoSQL DB), Zookeeper as well as Apache Spark ecosystem projects such as Spark SQL and Spark Streaming. Students are also given a chance to build a complete big data pipeline starting from data collection in real-time, processing, analyzing and finally viewing the results in graphical format on dashboards. Students will be mainly working with a single node Hadoop cluster of Cloudera distribution. (4 units) (MPP is the only prerequisite)
Mrudula Mukadam
CS525:
Advance Software Development
The Structures and Patterns of Software that Embody Knowledge of Good Design
This course considers the current methods and practices for good design of software systems. Topics include: software design patterns, frameworks, architectures, and designing systems to apply these multi-level abstractions. (2-4 credits).
This course is an introduction to 23 GoF (Gang of Four) design patterns and software frameworks. Design Patterns are proven solutions to recurring problems in object-oriented software design. The course will cover the rationale and benefits of using them in developing software frameworks and applications.
Show More
During the first two weeks,  we have an emphasis on intellectual understanding of the design patterns. For the third week, with the knowledge gained from class, students develop a framework by harvesting, such as board game framework, GUI evaluation framework, check-in/out framework, annotation framework, etc. Textbook: Design Patterns: Elements of Reusable Object-Oriented Software (Erich Gamma)
Gregory Guthrie
CS544: Enterprise Applications This course focuses on the protocols, principles, design patterns, and architecture of the Corporate Enterprise. The course emphasizes principles and patterns that are general across all platforms and frameworks.
We will examine the architectural layers of an N-Tier architecture and the different technologies associated with these layers. The main emphasis will be what is commonly referred to as Service and Persistence tiers. Data Persistence, Security, Application Integration and Distributed Applications are areas of focus in this course.
Show More
Examples of specific technologies covered are Object Relational Mapping (ORM), Dependency Injection (DI), Aspect Oriented Programming (AOP), and integration with other applications through RESTful Web Services, Message Brokers (JMS, RabbitMQ) and Enterprise Integration Patterns.
To investigate these principles in depth the course will examine and work with the Spring Framework. The Spring Framework provides a comprehensive programming and configuration model for modern Java-based Enterprise Applications.
Also, in an Enterprise-level work environment, professional success is highly correlated with the ability to work in a team environment. In this course, we will develop team skills by organizing into groups of 3 or 4 at the start of the course. Teams will work as a unit, discussing course material, collaborating on labs and developing the course project.
Payman Salek
Najeeb Najeeb
Michael Zijlstra
Anthony Sander
Umur Inan
Somesh Pullapantula
CS545:
Web Application Architecture
This course focuses on the protocols, principles, design patterns, and architecture of web applications, and web development frameworks that embody such principles and architecture.  There are a variety of system principles and design patterns that are involved in modern web applications.  The most important architectural pattern in modern web applications is the Model-View-Controller (MVC) architecture for web applications.
Show More
To investigate these principles in depth this course will examine and work with a representative web framework.  In this course the representative framework will be Spring MVC. Spring MVC is part of the Core Spring framework and is considered the leading Java-based technology for building web applications.Prerequisite knowledge
Prerequisite:
 CS472 Web Application Programming or consent of the Department FacultyIn addition, the course assumes knowledge/experience in the following computer science areas:

  • Basic knowledge of JSP technology.
  • Knowledge of network protocols such as TCP/IP and HTTP, which are covered in depth in the CS450 Networks course.
  • Strong background in object-oriented programming. The course requires writing OO programs in an advanced programming environment.
  • Knowledge of design patterns.  Design patterns are covered in depth in the CS525 ASD course.

None of these are explicitly required as prerequisites for this course, but if a student is missing these concepts, it will be a challenge for them to understand the course concepts.

BOOKS :

Servlets & JSP – To Be Announced

Spring MVC: Beginner’s Guide

by Amuthan G
ISBN: 1783284870

Packt Publishing; 1st edition (June 24, 2014)

Rujuan Xing
CS568:
Web Application Development 1
React is the most popular library for building powerful web applications. In this course, students will learn how to use React and ES6 to build robust, scalable applications from the ground up using the latest Redux patterns to maintain their application state.
Topics include: Component-based web application development, Components Design Patterns, Consuming rest APIs, Persistence with browser API, JSX and React API (props, proptypes, events, refs), Application data flow, and Deploying React apps.

Unubold Tumenbayar
CS569:
Web Application Development 2
In this course, students learn Reactive Programming Architecture of Single Page Web Applications (SPA) along with all the necessary skills to build a full modern web application using TypeScript and Angular. Students gain a deep understanding of how Angular works, including: Change detection; Reactive RxJs programming with observables and subjects; The Shadow DOM; Zones; Modules, components, custom directives, and pipes; Services and dependency injection; Angular compiler: JIT and AOF compilation; Forms (template driven and data-driven); Routing, guards, and route protection; HTTP client; and JWT JSON Web Token authentication.
Asaad Saad
Thao Huy Vu
CS571:
Mobile Application Development
This course transitions from web development to mobile application development using React Native, a popular framework from Facebook that enables cross-platform native applications to run using JavaScript without Java or Swift. The course introduces modern JavaScript–JavaScript XML (JSX)–a JavaScript extension. Students gain experience with React Native and its paradigms, application architecture, and user interfaces. The course culminates in a final project in which students implement a mobile app entirely of their own design.
Asaad Saad
Thao Huy Vu
CS572:
Modern Web Applications
In this course you will learn the Reactive Programming Architecture of SPA (Single Page Web Applications) along with all the necessary skills to build a full Modern Web Application. Technologies include:NodeJS, ExpressJS, TypeScript, Angular, Firebase and NoSQL databases (MongoDB). The course will cover:
Show More

  • How the C++ V8 engine and asynchronous code work in Node and the   Node event loop.
  • How to structure your code for reuse and build Restful API using modules and ExpressJS.
  • How NoSQL databases work: Mongo Shell, Aggregation framework, Replica Sets, Clustering, Shards, Mongoose ORM.
  • Deep understanding of how Angular (backed by Google) works, Change Detection, Reactive RxJs programming with Observables and Subjects, The Shadow DOM, Zones, Modules and Components, Custom Directives and Pipes,Services and Dependency Injection, Angular Compiler, JIT and AOF Compilation, Forms (Template Driven and Data Driven), Data Binding, Routing, Guards and Route Protection, HTTP client, JWT JSON Web Token Authentication.
Asaad Saad
Najeeb Najeeb
CS582:
Machine Learning
Machine Learning, the field of study that gives computers the ability to learn from data, is at the heart of almost every scientific discipline, and the study of generalization (that is, prediction) from data is the central topic of machine learning. This course gives a graduate-level introduction to machine learning and in-depth coverage of new and advanced methods in machine learning, as well as their underlying theory.
Show More
It emphasizes approaches with practical relevance and discusses a number of recent applications of machine learning, such as Data Mining (in Big Data / Data Science, Data Analytics), Natural Language Processing, Computer Vision, Robotics, Bioinformatics and Text and Web data processing. Machine Learning is used in various industries including Financial Services, Oil & Gas, Health Care, Marketing & Advertising, Government, Internet and Internet of Things.This course covers variety of learning paradigms, algorithms, theoretical results and applications. It uses basic concepts from artificial intelligence, information theory, statistics, and control theory insofar they are relevant to machine learning Topics include: supervised learning (generative/discriminative learning, parametric/non-parametric learning, neural networks, support vector machines, decision tree, Bayesian learning & optimization); unsupervised learning (clustering, dimensionality reduction, kernel methods); learning theory (bias/variance tradeoffs; VC theory; large margins); reinforcement learning and adaptive control. Other topics include HMM (Hidden Markov Model), Evolutionary Computing, Deep Learning (With Neural Nets) and designing algorithms whose performance can be rigorously analyzed for fundamental machine learning problems.An important part of the course is a group project. Major open source tools used for parallel, distributed and scalable machine learning will be briefly covered to help students doing the projects.
Emdad Khan
Anthony Sander
CS590 Software Architecture Traditionally every software project has a dedicated software architect who designs the architecture for a certain system. In agile software development software architecture is not a role, but a task that is performed by the team members (developers). In this course we study the important software architecture techniques, styles and patterns that are used in modern software systems.
Show More
First we will look at techniques and best practices to discover the architectural relevant requirements. Then we study how to design, evaluate and communicate architecture.
We will study many architectural styles like domain driven design, component based architecture, service oriented architecture, microservice architecture, event driven architecture and stream based architecture. We also study architecture patterns like event sourcing, CQRS, publish-subscribe, reactive, eventual consistency, integration patterns, API gateway, load balancing, token based security, etc.
We use Spring Boot, Spring Cloud and Kafka to practice the different architectural styles and patterns.
Rene De Jong