Core Courses Elective Courses (300 level) Elective Courses (400 level)
Badges: CS core in the Computer Science major (2024+) CYB core in the Cybersecurity major CSE Computer Science elective CYE Cybersecurity elective
Note on superseding courses: 0418-143 supersedes 0418-141 · 0418-310 supersedes 0418-211 · 0418-320 supersedes 0418-223.
Core Courses
Required in the Computer Science major (2024 plan) and/or the Cybersecurity major.
0418-101 Introduction to Computer Science (3)CSCYB
History of computation, a tour of computer science, the motivation to use computers, various types of computers, computer structure, binary number system, basic computational problems, elementary programming concepts, and software tools
0418-111 Discrete Mathematics for Computer Science (3)CSCYB
The purpose of the course is to provide a foundation for the discrete mathematics used in the theory and application of computer science. The major part of the course covers classical mathematical topics, including propositional and predicate logic, proof techniques, sets, relations, functions, sequences, and counting techniques. The approach, however, emphasizes topics of importance to computer science and provides examples to illustrate why the material is of interest.
0418-143 Fundamentals of Computer Programming (4) (pre: 0418-101)CSCYB
Overview of programming concepts. Repetition techniques. Functions, recursion, parameter passing mechanisms. Data structures, programmer-defined structures, programmer-defined types, classes, and objects. I/O concepts, including file processing. Basic problem-solving techniques and design of simple algorithms
0418-201 Data Structures and Algorithms (3) (pre: 0418-143 AND 0418-111)CSCYB
The course deepens and widens the fundamental concepts of abstract data structures and algorithms studied earlier courses in the light of object-oriented paradigm, in particular, by its class concept. It introduces the students to various data-structure techniques for efficiently representing information in a computing system along with its algorithms to access the information. The course compares static vs. dynamic memory structures and implementations and covers the topic of arrays, stacks, queues, trees, heaps, graphs and hashing schemes and their algorithms
0418-220 Programming in C and UNIX (3) (pre: 0418-101)CSCYB
This course is designed for students with prior programming experience to learn programming in C in a Unix-like programming environment. Features of the C language that are covered include arrays, structures and unions, file processing, pointers, pointer arithmetic, casting and dynamic memory allocation (malloc, calloc and free). Data structures that are emphasized include lists, queues, stacks, and hash tables. Students will learn to use tools provided in UNIX such as emacs/vi, make, and gdb to assist them in the design, testing and debugging of their programs. Students will learn about regular expressions and grep and will be able to use a scripting language such as Perl/Python to solve simple problems
0418-221 Computer Organization (4) (pre: 0418-143 AND 0418-220)CSCYB
The course provides a programmer’s view on computer systems and serves as a foundation for courses on system programming, compilers, computer architecture, and operating systems, where a deeper understanding of the system’s hierarchy is developed. Besides explaining the basic system architecture, it concentrates on the instruction, operating system, and assembly language level. It emphasizes the data representation of numerical and non-numerical data on the machine level. The course addresses the needs of assembly language programming that enables to write programs for the system level such as software-hardware interfacing modules, device drivers, interrupt handlers as well as integrating assembly code into high-level language programs. Intensive laboratory exercises will train the students in this field of programming.
0418-310 Theory of Computation I (3) (pre: 0418-111 AND 0418-143)CSCYB
The course introduces the theoretical foundations of computing through the study of mathematical models of computing machines and computational problems. The course considers several models of computation with the intent of developing a theoretical and intuitive understanding of computability. Topics include finite state automata and regular languages, pushdown automata and context-free languages, Turing machines and recursively enumerable languages, decidable and undecidable problems. The course ends with an introduction to computational complexity
0418-320 Principles of Computer Systems (4) (pre: 0418-221)CSCYB
This course serves as the foundation for courses on networks and operating systems, where a deeper understanding of systems-level issues is a necessity. Topics covered include: linking, exceptional control flow, virtual memory, system-level I/O, network programming, and concurrent computations
0418-491 Capstone Project 1 (3) (pre: 0418-320)CS
This course is taken by senior students under the guidance of a faculty member. The project proposal should be approved as per the department's rules, policies, and guidelines. The project aims to provide students with a capstone design and development experience. It enables students to demonstrate and enhance their practical skills, such as developing formal problem specifications, adapting to different computing environments and application domains, building prototypes, scientific writing, working in teams, interacting with users, and making oral presentations. Enrolled students must develop software, preferably using a new environment, submit a comprehensive project report, and present their work publicly. The lecture component covers the social and professional issues of computing as well as the foundations of Human-Computer Interaction.
0418-492 Capstone Project 2 (3) (pre: 0418-491)CS
This course is taken by senior students under the guidance of a faculty member. By the time they enroll in this course, students are expected to have their project proposals presented and approved. Capstone Project II aims to provide students with a capstone design and development experience. It enables students to demonstrate and enhance their practical skills, such as developing system requirements specifications, learning and using industry-standard computing environments, exploring new and demanding application domains, and building executable prototypes. Students will also gain experience in scientific and technical writing, working in teams, interacting with users, and making oral presentations. Enrolled students must develop software, preferably using a new environment, submit a comprehensive final report and a fully functional system, and present their work publicly.
0418-231 Introduction to Computer Security (3) (pre: 0418-220)CYB
This course introduces the major and classical problems in computer security. Topics include definition of computer security, computer security principles, policy and mechanism, physical security, malware categories, securing simple vulnerable programs, security features in operating systems, classical attacks and defenses in communication networks.
0418-312 Applied Cryptography (3) (pre: 0418-231 AND 0418-310)CYB
Mathematical foundations of cryptosystems, basic encryption and decryption, one-way functions, entropy, symmetric and asymmetric cryptography, cryptanalysis, cipher modes.
0418-348 Secure Programming (3) (pre: 0418-231)CYB
Memory exploits, vulnerable programs, models for memory safety, architectural support for safe programming, programming in a safe programming language, safety under concurrency.
0418-321 Operating Systems (3) (pre: 0418-320)CYBCSE
The course provides a comprehensive description of operating system principles. It introduces the concepts necessary to understand how an operating system serves as a manager of computer system resources. It describes each of the major subsystems that comprise an operating system (process management, storage management, and I/O systems, system protection, and security) and examines the interrelationships among them. Different operating system techniques are compared and the tradeoffs between various approaches are examined.
0418-331 Computer Networks (4) (pre: 0418-320)CYBCSE
The course is an introductory course in computer networks. The course targets the wide field of computer communication and the most relevant applications. Students should become familiar with basic functions of computer networks and applications. Topics are network concepts, standards and topologies as well as switching principles, routing and addressing, reference models with its different layers and protocols. Different services of computer networks like file transfer, electronic mail and Web applications and technologies, client-server systems, protocols; network security; multimedia, wireless and mobile computing are studied. Finally, social, ethical and professional issues of all parties using the Internet are discussed
0418-435 Network Security (3) (pre: 0418-312 AND 0418-320)CYB
Security architecture, network configuration, security policy design, security mechanisms, analysis of network security, intrusion detection and prevention, anomaly detection.
0418-493 Computer Security Design (3) (pre: 0418-435)CYB
Analysis, architecture, design, and implementation of a secure software system. Technical writing, presentations, and topics specific to the implementation of the system. A complete implementation of executable security components and their integration and testing is required.
Elective Courses (300 level)
Choose from these toward the major's elective requirement (at least 6 credits at the 300 level and 6 at the 400 level).
0418-301 Algorithm Design and Analysis (3) (pre: 0418-111 AND 0418-201)CSECYE
The course introduces formal techniques to support the design and analysis of algorithms, focusing on both the underlying mathematical theory and practical considerations of efficiency. Advanced algorithmic techniques such as divide and conquer, greedy, dynamic programming, backtracking, and randomized algorithmic techniques are studied. Sorting and graph algorithms are the subjects of investigation. The main objective of this course is that the students understand the mathematical concept used in describing the complexity of algorithms, select and apply algorithms, as well as to explain the trade-offs that exist between a range of algorithms that possess the same functionality. Furthermore, the course introduces complexity classes P and NP.
0418-311 Numerical Computation (3) (pre: 0410-111 AND 0410-102 AND 0418-201)CSE
Students in this course study numerical methods, solutions, and approximations from a programmer's perspective. The course topics include numerical solutions of nonlinear equations, polynomial interpolations, numerical differentiation, and integrations, solving systems of linear equations, spline functions, and least square methods
0418-315 Theory of Computation II (3) (pre: 0418-310)CSE
The course provides different models for computability, namely RAM, Turing machine, l-calculus, and recursive functions, and discusses Church’s thesis and its consequences. Based on the notion of computability, decidable and undecidable problems in the formal language theory and in other fields will be treated. Finally, the course introduces the generalization of basic models for parallel computation
0418-325 Computer Architecture (3) (pre: 0418-221)CSE
The course concentrates on the organization and architecture of computer systems. It considers the architecture of the CPU, the organization of the memory, and other important functional blocks. Principles for achieving instruction-level parallelism are investigated along with performance considerations. Parallel computer architectures are also subject of study
0418-335 Web Programming (3) (pre: 0418-201)CSECYE
The course concentrates on complex applications, which require concepts, methods and tools coming from different areas of communication and computing. The course requires a sound knowledge of computer networks and the World Wide Web on the one hand as well as hands-on in programming languages, in particular in Java. Web applications are based on documents, which are generated and stored on servers and requested by and transferred to client applications. The course covers static as well as dynamic documents and appropriate concepts to create, handle and transfer them, like HTTP and other protocols, scripting languages, and security and performance issues. Course projects give students the chance to complete the training in this field
0418-346 Declarative Programming (3) (pre: 0418-201)CSECYE
The course concentrates on the fundamental ideas underlying the functional and logic programming paradigms and presupposes the courses in “Computer Programming I/II” as well as “Data Structures and Algorithms”. Therefore, the course is not considered as a simple course in programming and programming languages, but is rather more concerned with the concepts and techniques of functional and logic programming. However, functional programming is exemplified by the strongly-typed, research-based language Standard ML, whereas logic programming by using Prolog
0418-347 Compiler Design (3) (pre: 0418-310 AND 0418-221)CSECYE
The course introduces to theory and practice of program translation. It makes the students familiar with the fundamental structure of compilers and interpreters and their building stones. Students will study the application of the theory of formal languages and automata to design language translators. The course progresses to cover lexical analysis, syntactical analysis, semantic analysis and synthesis and target code generation. Computer projects are assigned to the students to provide them with the necessary practical experience to design and implement a simple compiler
0418-365 Artificial Intelligence (3) (pre: 0418-201)CSECYE
The emphasis of the course will be on the logical foundations of artificial intelligence and problem-solving methods. It covers the widely applied search techniques for problem-solving. The course deals with knowledge representation and reasoning under uncertainty in expert systems and planning systems. Finally, machine learning in relation to genetic algorithms and neural networks will conclude this course. Programming in this course requires familiarity with functional and logical programming languages
0418-390 Software Engineering (3) (pre: 0418-201)CSECYE
The objective of this course is to give a broad view of software engineering principles and techniques. It introduces the notion of software process models, human factors in software engineering, software specification, software design, programming techniques, software validation and verification and software maintenance, and social and professional issues
0418-391 Cloud Computing Fundamentals (3) (pre: 0418-201)CSECYE
This course introduces the fundamental concept of cloud computing, cloud computing models, cloud storage models, cloud systems management, scalable computing using the cloud
0418-392 Software Design (3) (pre: 0418-201)CSE
The course material covers the principles, mechanisms, techniques, and tools for object-oriented software design. Students learn how to architect, design, implement and test large software applications
Elective Courses (400 level)
Choose from these toward the major's elective requirement.
0418-415 Information Theory and Cryptography (3) (pre: 0418-310)CSECYE
The course introduces computer science students to Shannon’s approach of Information theory and cryptography. Therefore, in the center of this course are basic concepts and techniques of cryptography. However, another focal point is the application of encryption methods for information protection and computer system security
0418-416 Modeling and Performance Evaluation (3) (pre: 0418-320)CSECYE
The course introduces to basic concepts of modeling and performance evaluation of computer systems. Model validation and verification techniques are studied to determine whether the model is an accurate representation of the actual system and the conceptual simulation model is translated into a correctly working simulation program. Time-based and discrete-event simulation models will be considered. Case studies are carried out for time-shared computer models, client-server systems and local area networks
0418-425 Distributed and Parallel Systems (3) (pre: 0418-320)CSECYE
The course covers problems relevant for the design and implementation of complex application programs running on a distributed and/or parallel system. The course starts with a review of functions and services provided by the underlying communication system, and then concentrates on concepts for the design of distributed and parallel systems. This includes general problems distributed and parallel algorithms, concurrency and parallelism, synchronization, composite actions and transaction processing as well as the relevant support by suitable programming languages and software packages. The theoretical aspects are combined with practical exercises for really existing programming concepts and packages
0418-426 Embedded Microprocessor Systems (3) (pre: 0418-320)CSECYE
The subject area of this course is microprocessor systems and their embedding into technical equipment. The course continues and deepens subjects, which were covered in the Computer Systems and Programming courses, and concentrates on concepts to put these things together in order to design technical systems controlled by microprocessors. The course starts with the review of microprocessors, their internal structure, the instruction set, and continues with the memory and bus system, the I/O concept, the interrupt system, and controllers to interface them to peripheral devices. The course includes also the related design, programming and test concepts for this area of application of microprocessor systems
0418-427 Computer Security & Privacy (3) (pre: 0418-320)CSE
This course introduces the students to the principles of computer security, techniques, and models. The course includes classical attack scenarios, defensive resources and techniques, and models for protecting systems and networks
0418-455 Computer Graphics (3) (pre: 0410-111 AND 0418-201)CSECYE
The course offers an introduction to computer graphics, which has become increasingly important in computer science. The course provides intensive training in the design and programming of graphical user interfaces. Furthermore, the course concentrates on principles of raster and vector image generation, graphical algorithms used to represent geometric objects, as well as the fundamentals of computer animation.
0418-466 Introduction to Machine Learning (3) (pre: 0480-201 AND 0418-201)CSECYE
This course covers topics in supervised learning, unsupervised learning and reinforcement learning. The course will familiarize students with various algorithms for machine learning and prepare them for research and for applying machine learning techniques in different domains.
0418-470 Database Systems (4) (pre: 0418-201)CSECYE
The course introduces the student to the fundamental concepts essential for understanding, modeling, designing, implementing, and employing a database management system in various environments. The course provides the student with the advantages of employing database management systems along with a thorough understanding of the relational model and integrity constraints followed by a proper introduction of relational algebra along with Structured Query Language (SQL) for data handling and manipulation. Subsequent to a careful treatment of SQL, the course exhibits relational database design through the entity-relationship data-modeling scheme as well as functional-dependency and normalization as a designing and refining instrument. The course is capped by an introduction to the transaction system along with a brief coverage of concurrency control and recovery schemes
0418-475 Distributed Database Systems (3) (pre: 0418-320)CSE
The course starts with the review of relational database management systems and shows the demand for distributed databases. The course covers concepts and problems, which are relevant for the design and implementation of distributed database systems. This includes architectural concepts, problems and solutions of data fragmentation and allocation, query processing, transaction management and concurrency control
0418-496 Topics in Computer Science I (3) (pre: Department approval)CSECYE
The intention of the course “Topics in Computer Science” is to allow flexibility in the Undergraduate Program in Computer Science. The course concentrates on subjects of specific importance not yet covered by other courses. Before scheduling this course, it is necessary to prepare the syllabus and to approve it by the curriculum committee of the Department of Mathematics and Computer Science
0418-497 Topics in Computer Science II (3) (pre: Department approval)CSECYE
The intention of the course “Topics in Computer Science” is to allow flexibility in the Undergraduate Program in Computer Science. The course concentrates on subjects of specific importance not yet covered by other courses. Before scheduling this course, it is necessary to prepare the syllabus and to approve it by the curriculum committee of the Department of Mathematics and Computer Science