Compulsory for all CS Students
0418-111 Discrete Mathematics for Computer Science (3) (Prerequisite: None)
The purpose of the course is to provide a foundation for the discrete mathematics used in the theory and application of computer science. Its major part treats classical mathematical topics, including propositional and predicate logic, proof techniques, sets, relations, functions, sequences as well as counting techniques. The approach, however, emphasizes the topics of importance to computer science and provide examples to illustrate why the material is of interest.
0418-141 Computer Programming I (4) (Prerequisite: None)
The course introduces computer science majors to computing using a procedural programming language. Principles of problem-solving, algorithm design and program development are explained and trained. It covers the general program structure of procedural programming languages, their simple data types, data structures and declarations, built-in operators and their proper use in expressions. The concepts of the different kinds of statements (assignment statements, I/O statements and I/O formats) including also the control statements (compound, decision, loop statements) are subject of teaching and training. The students will learn about user-defined types such as a pointer, enumeration, array and record type. The concept of procedures/functions including recursive subprograms and their use as one program structuring mechanism along with parameter passing mechanisms is likewise subject of this course. Significant training is ensured through an extensive laboratory component to reinforce understanding and to develop computing skills.
0418-142 Computer Programming II (4) (Prerequisite: CS141)
The course continues computing orientation at an advanced level after a brief review of the fundamental programming concepts taught in the course Computer Programming I. It continues with a thorough explanation of the structure and union type as well as bit fields. Pointers are now explained within the concept of memory allocation, list structures as dynamic data structures and list manipulation. Students become familiar with the handling of text and binary files. They will also learn about the design of personal libraries and header files and their use by corresponding pre-processor directives. A substantial part of the course is dedicated to object-oriented software development by studying encapsulation and information hiding, data abstraction and abstract data types and its generalization by the class concept and implementation of abstract data types by classes. Inheritance leading to class hierarchies, dynamic binding and polymorphism in the context of object-oriented software design will experience high attention through the course. Significant training is ensured through extensive lab components to re-enforce understanding and to develop computing skills.
0418-201 Data Structures and Algorithms (3) (Prerequisite: CS142)
The course deepens and widens the fundamental concepts of abstract data structures and algorithms provided by the courses “Computer Programming I” and “Computer Programming II” 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-211 Theory of Computation I (3) (Prerequisite: CS111, CS201)
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-220 Programming in C and UNIX (3) (Prerequisite: CS141)
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 Systems (4) (Prerequisite: CS141)
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, in particular, software-hardware interfacing modules, device drivers, interrupt handlers as well as integrating of assembly code into high-level language programs. Intensive laboratory exercises will train the students in this field of programming.
0418-223 Systems Programming (4) (Prerequisite: CS221)
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-301 Algorithm Design and Analysis (3) (Prerequisite: CS111, CS201)
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) (Prerequisite: CS111, CS221, MATH102)
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 linear equations, initial and boundary value problems, ordinary differential equations, spline functions, and least square methods.
0418-321 Operating Systems (3) (Prerequisite: CS223 or CS220)
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 Network (4) (Prerequisite: CS223 or CS222)
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-335 Web Programming (3) (Prerequisite: CS201)
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-390 Software Engineering (3) (Prerequisite: CS223 and CS201)
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-470 Database Systems (4) (Prerequisite: CS301)
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-491 Capstone Project I (3) (Corequisite: 390 )
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, adapt to different computing environments and application domains, building prototypes, scientific writing, working in teams, interacting with users, and making oral presentations. Registered students must develop software preferably using a new environment, submit a comprehensive project report, and publicly present their work. The lecture component of the course explains the social and professional issues of computing as well as the foundations of Human-Computer interactions.
0418-492 Capstone Project II (3) (Prerequisite: CS491)
This course is taken by senior students under the guidance of a faculty member. By the time of enrolling 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 demanding application domains, and building executable prototypes. Students will also experience significant 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 project report and a fully functional system, and publicly present their work.
Elective CS Courses
0418-101 Introduction to Computer Science (3) (Prerequisite: None)
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-143 Fundamentals of Computer Programming (3) (Prerequisite: CS101)
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-315 Theory of Computation II (3) (Prerequisite: CS211)
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-322 (0418-325) Computer Architecture (3) (Prerequisite: CS221)
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-346 Declarative Programming (3) (Prerequisite: CS201) AI TRACK
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) (Prerequisite: CS211)
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) (Prerequisite: CS301) AI TRACK
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-391 Fundamentals of Cloud Computing (3) (Prerequisite: CS223)
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) (Prerequisite: CS201)
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.
0418-415 Information Theory and Cryptography (3) (Prerequisite: CS211) CYBERSECURITY TRACK
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) (Prerequisite: CS331)
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) (Prerequisite: CS331)
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) (Prerequisite: CS322)
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 and Privacy (3) (Prerequisite: CS321, CS331) CYBERSECURITY TRACK
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) (Prerequisite: CS301)
The course offers an introduction to computer graphics, which has become an increasingly important area in computer science. The course provides intensive training of the design and programming of graphical user interfaces. Furthermore, the course concentrates on principles on raster and vector image generation and graphical algorithms to represent geometric objects as well as computer animation.
0418-466 Introduction to Machine Learning (3) (Prerequisite: CS301, STAT201) AI TRACK
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 the industry.
0418-475 Distributed Database Systems (3) (Prerequisite: CS331 and CS470)
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) (Prerequisite: Dept. Approval)
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) (Prerequisite: Dept. Approval)
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.
Service Courses
0418-123 Introduction to Computers (3) (Only for non-CS students)
This is a literacy course that develops a general understanding of computer systems and their uses by introducing the basic hardware and software concepts. The students receive hands-on training on some of the widely used computer software systems, applications, and services such as operating systems, text processing, spreadsheet, presentation design and preparation, databases, multimedia, internet, search engines, electronic communications, and web authoring.
0418-126 Computer Programming (3) (Only for non-CS students)
Basic computer concepts, Data types, Control structures, Program development methods, Programming style.