### Program Courses

**CCOM3020** - **Discrete Mathematics** (3 )

*This course is designed for students who attend their first or second year in the Computer Science program or a Mathematics program. In this course students will learn techniques to produce elementary mathematical demonstrations. The course also will introduce students to topics related to sets or processes that can be enumerated or associated with subsets of the natural numbers. The topics that will be discussed will be necessary for the other courses in mathematics and computer science.*

**CCOM3030** - **Fundamental Structures of Computer Science** (3 )

*This course is designed for students who attend their first semester in the Computer Science or Mathematics program. It provides a panoramic view of the Computer Science through a specific area (e.g. data bases, operating systems, networks, artificial intelligence, bioinformatics). It presents a foundation that allows to appreciate the relevance as well as the interrelation among different subjects of Computer Science. It provides an introduction to skills related to problem solving.*

**CCOM3033** - **Introduction to Computer Programming** (3 )

*This course provides an introduction to basic computer programming and to problem solving using algorithms, including parallel programming techniques. Students will master the basic parts of a computer program, starting with control structures using conditional and iterative instructions with logical expressions, as well as definition and use of variables adn data types. They wil develop procedures and functions for common tasks that repeat or more complex which require decomposition, including recursive functions. They will use data structures such as arrays, strings, files and pointers. Also, the students will be exposed to the computer structure: input and output, memory and central processing unit. The course also includes an overview to the Computer Science Field and its effects on society, including ethical principles in computing. *

**CCOM3034** - **Data Structures** (3 )

*Abstract data types, their efficient implementation and application to problem solving. Introduction to the asymptotic analysis of algorithms. Fundamental data structures such as queues, stacks, lists and tress, their efficient implementation and applications, Introduction to hash-tables, priority queues, and graphs. Basic sorting and searching methods. Introduction to concurrent data structures. The course has three hours of lecture per week and includes a workshop of one and a half hour per week. In the workshop, students will implement the concepts learned in class. *

**CCOM3981** - **Undergraduate Seminar 1** (1 )

*This course is designed for students who attend their first semester in the Computer Science program. The course will allow students to become familiar with topics related to Computer Science and to undergraduate research. They will also learn the skills necessary to work in research and about principles of academic integrity. This is the first step to create an atmosphere where the students get interested and participate in research activities. At the end of the course the students should have selected a topic to research on. *

**CCOM3982** - **Undergraduate Seminar 2** (2 )

*This course is designed for students who attend their second semester in the Computer Science program. The course will allow students to become familiar with topics related to Computer Science and to undergraduate research and to put into practice the skills learned in the course CCOM 3981. Students will select a topic, revise the pertinent literature to prepare an oral and a poster presentation about the selected topic. The presentations could be group presentations. The students could also choose an undergraduate research topic to be conducted under the direction of a Computer Science faculty member and present the research problem and the background material. In addition, the students will learn about the job and graduate school opportunities in computer science.*

**CCOM3986** - **Undergraduate Research in Computer Science** (3 )

*This course will give the students of the computer science program a research experience in a topic related to Computer Science. Each student will work independently on a research project under the supoervision of a researcher. There will be weekly meetings to discuss the progress made and approaches to advance the completion of the project. At the end of the semester each student will submit a technical report; in addition will give an oral presentation or will prepare a poster of the reasarch done. The course can be taken more than once with a maximum of 6 credits. *

**CCOM4017** - **Operating Systems** (3 )

*Operating Systems are the vehicle for user level applications and serve as a guard between these applications and the resources of the computer. The diversity and functionality of computer's resources, in conjunction with execution of concurrent software processes and servicing multiple users, make design and implementation of Operating Systems a challenge. During this course, we will aim to understand these challenges and the involved tradeoffs. Topics covered in the course will include: memory management, multiprogramming, virtual memory, paging, segmentation, job and process scheduling, concurrency, sharing, synchronization, processor management, deadlock detection and avoidance, device and file management.*

**CCOM4027** - **Introduction To Data Management** (3 )

*Introduction to the basic concepts of the organization and management of files on secondary storage media. Introductory data base concepts. Techniques for the management of internal and external files: searching, sorting, updating, compressing, deleting, and merging. File organization on direct and sequential access storage devices. The student will carry out programming projects in which the concepts of the course are implemented.*

**CCOM4029** - **High Level Programming Languages** (3 )

*In this course fundamental aspects of high-level programming languages, including data objects, operations, sequence control, data control, storage management, syntax, and semantics are presented. Also, the students are exposed to different language paradigms, E.G. imperative, parallel, functional rulebased (logic), and object-oriented languages. The course gives hands on experience and allows students to develop moderate-level programs in various programming languages, one for each paradigm. *

**CCOM4030** - **Introduction to Software Engineering** (3 )

*This course is designed for students who attend third of fourth year in the Computer Science Program. Provides an overview of the basic principles and concepts of software engineering. Discusses elements of the software life as ethical issues related to software development process. In addition, through a group project the students will gain experience that enables them to position as designers and developers of software. *

**CCOM4065** - **Numerical Linear Algebra** (3 )

*This is a course on numerical methods to solve problems of matrix algebra. Since the methods provide approximations to the actual solution of the problem, it is important to study the error obtained by the methods. Algorithms will be described and the mathematical foundations of the algorithms as well as its implementation on the computer will be discussed. We will use a high-level programming platform to implement the methods. We will use test problems to show the strengths and weaknesses of the methods. At the end of each chapter, we will discuss a real-life problem in which one of the methods discussed is used to solve the problem.
*

**CCOM4086** - **Computer Architecture I** (3 )

*In this course the student is exposed to fundamental issues of the architecture of modern computers. The main objective is to provide students with the knowledge necessary to understand the functional logic of the main components of modern computers. Topics include the logical design, data representation, the different types of memory and its organization, registers, the CPU and its organization, construction and operation of buses, I/O devices and their interfaces. Different levels of abstraction of the computer architecture are studied: logical level, the architecture of micro-level, machine language level, assembly language and operating system level. The course also examines the main features of CISC and RISC architectures and surveys opportunities for parallelism at multiple levels within the processor.*

**CCOM4087** - **Compiler Design** (3 )

*Introduction to compiling, structure of simple one-step compilers: syntax and lexical analysis, parsing, introduction to type checking, intermediate code generation, introduction to code generation and optimization. Discussion about tools for compilers design (e.g. Lex and Yacc).*

**CCOM4088** - **Cybersecurity** (3 )

*In the Introduction to Cybersecurity course the students will learn the physical and logical architecture of the Internet, and basic principles of information assurance. Through interaction with network clients and servers, they will explore why networked systems are vulnerable to cyber-attack. They will see how the five pillars of information assurance (availability, integrity, authentication, confidentiality, and non-repudiation) apply to networked information resources. Students will explore basic techniques of how to attack and defend Internet resources. The hands-on techniques will serve to motivate students to explore in depth more advanced techniques, and the mathematical underpinnings of cybersecurity (discrete mathematics, cryptography).*

**CCOM4205** - **Computer Networks** (3 )

*Growth of computer networks in the past few decades has been spectacular. The key force behind such amazing growth is network applications on which our society has become increasingly dependent. One of the more outstanding application examples is the World Wide Web, which is used for finances, information propagation, entertainment, etc. However, todays rapid technology expansion enabled a new set of devices to enter the arena of computer networks. The dominant new player is the cellphone. Today the ability to carry a voice conversation via a cellphone is only on of the plethora of services provided by a modern cellphone, for example, SMS, picture and video, web access, GPS, etc.*

**CCOM4995** - **Fun with Programming Interview Problems** (3 )

*NULL*

**CCOM4996** - **Independent Study in Computer Science** (3 )

*This course gives the students the opportunity to conduct an independent study and to learn about topics related to Computer Science guided by a professor. The topic will be selected according to the interest of the student and the professor. At the end, the student will write an essay or technical report about the topic studied. The course can be taken more than once if the topic is different, with a maximum of three credits. *

**CCOM5026** - **Computer Architecture II** (3 )

*Design and organization of digital systems. Machine level data representation. Arquitecture and organization of memory systems. Input/Output control. Alternative architectures.*

**CCOM5035** - **Computability Theory** (3 )

*In this course fundamental concepts, ideas, and models of the theory of computation are discussed. Topics included: introduction to automata and languages, introduction to compatibility theory, introduction to complexity theory. *

**CCOM5045** - **Introduction to Computational Cell Biology** (3 )

*This course will introduce the student to mathematical modeling of different cell activities. It will use examples of cellular processes to motivate concepts and techniques used in computational cell biology. Progressively it will increase the complexity of the cellular functions modeled with mathematical and computational techniques that will also increase in complexity. The course will focus on the simulation of functions that describe certain physiological behavior in the cell.*

**CCOM5050** - **Design And Analysis Of Algorithms** (3 )

*In this course general and advanced techniques for the design and analysis of algorithms are discussed. Topics included: mathematical induction, asymptotic notation, worst-case analysis, recurrence relations and their closed form solutions, sorting and search algorithms, randomized algorithms, parallel algorithms, proof of correctness, advanced design techniques, advanced data structures, graph algorithms, np-completeness. *

**CCOM5060** - **Parallel Processing** (3 )

*This course is designed for students who attend their first semester in the COmputer Science program. This course offers a broad vision of parallel systems by covering the following topics. Fundamental concepts of parallel computing and parallel architectures, distributed-memory (message-passing) and shared-memory programming, parallel algorithm design, implementation, benchmarking and performance analysis: performance metrics, scalability and running times. This course discusses standard tools used in high performance applications, message-passing, shared-memory programming, and hybrid paradigms of theses, as well as high level tools such as functional languages. This course also pretends to ethical issues related to the use of parallel computation.
*

**CCOM5677** - **Artificial Intelligence** (3 )

*Fundamental concepts of Logic. Artificial intelligence techniques. Natural languages and vision systems. Automatic demonstration of theorems. Expert systems.*

**MATE4061** - **Numerical Analysis** (3 )

*Numerical analysis is the study of algorithms for computing numerical solutions to mathematical problems. The course provides an introduction to the ideas of numerical analysis via simple problems in analysis and algebra. We will study the efficiency of the algorithms as well as their implementation.*

**MATE4995** - **Graph Teory** (3 )

*Graph theory in mathematics and science. Different types of graphs. Graph operations and subgraphs. Graph isomorphisms and automorphisms. Counting of graphs of certain types. Travelling in a graph. Binary relations and graphs. Functions, permutations and graphs. Graph discriptions. Vertex degrees in a graph. Various decompositions of graphs. Disjoint paths in a 2-connected graph. Assembling and disassembling of connected and 2-connected graphs. Trees. Spanning trees of a graph. Enumerating spanning trees of a graph. Bipartite graphs. Euler tours and a criterion of their existance. Labyrinth problem. Graph planarity. Matchings and coverings in bipartite graphs. Vertex colorings of graphs. Edge coloring problem for certain classes of graphs. Ramsey's theorem. Turan's theorem.*

**MATE4995** - **Hardware Descriptor Languages** (3 )

*This course provides students with the knowledge necessary to design and implement digital computing structures using hardware description languages at the 'behavioral', 'register–transfer' and structural levels. Verification and testing of designs using functional simulation tools. Introduction to programmable logic devices, ie FPGAs and CPLDs. Case studies of systems structures for custom computer arithmetic, signal processing and control.*

**MATE4995** - **Machine Learning & DataMining** (3 )

*This class provides a smooth introduction to machine learning, at a level appropriate for undergraduate students. Machine learning is a wide collection of concepts and techniques that allows machines to improve their performance at a given task, using 'experience' or 'guidance'. It is a dynamic and evolving field with numerous successes in everyday computing. *

**MATE4995** - **Literate Programming** (3 )

*The student will read, write, and critique fairly large programs. Students will discuss techniques for improving program design, implementation, construction, and maintainance. The "Writer's Workshop" technique will be used to jointly examine and discuss program fragments. The students will develop critical thinking skills, and their creative writing skills. *

**MATE6680** - **Computational Analysis I (Master's Degree in Applied Mathematics)** (3 )

*Numerical analysis aims to provide computational methods to study and solve mathematical problems involving real variables. Because the methods provide approximations to the true solution of the problem, the study of errors is very important to numerical analysis. In this course we will: provide the mathematical foundations of numerical methods; analyze the method basic theoretical properties—stability, accuracy, and computational complexity; and illustrate the method performances by means of computational examples and counterexamples by using the MATLAB® programming language. The numerical methods learned in this course are important to approximate the solutions of mathematical models of scientific problems.
Course audience: graduate students of computational sciences and applied mathematics.*

**MATE6682** - **Algorithms** (3 )

*This is a hybrid (on–line and face–to–face) course that teaches solid foundations to solve computational problems with an algorithmic approach. In this course we present advanced design techniques such as greedy methods, divide–and–conquer, dynamic programming, and randomized algorithms. Asymptotic notation as well as amortized analysis is introduced as means to measure complexity of algorithms. Most of the examples are related to bioinformatics and graph applications. An introduction to parallel algorithms is given through the model of dynamic multithreading programming. Finally, an introduction to NP–completeness is presented. *

**MATE6690** - **Computational Analysis II (Master's Degree in Applied Mathematics)** (3 )

*This is a course on numerical methods for differential equations. We will study methods of function approximations, numerical methods for ordinary differential equations: initial value problems and boundary value problems, and numerical methods for one-dimension partial differential equations.*

**MATE6882** - **Optimization** (3 )

*This is a course on nonlinear optimization, both unconstrained and constrained. We will study optimality conditions and the basic numerical optimization methods with their convergence analysis. The numerical methods include: basic descent methods, conjugate direction methods, quasi Newton algorithms, reduced gradient method, gradient projection method, penalty and barrier methods, duality, and Lagrange methods. The material learned in this course is relevant to operation research, actuarial science, and mathematical modeling among others. An optimization problem is needed whenever one wants to optimize the performance of a system with the help of a mathematical model.*