**0418-111** Discrete Mathematics for Computer Science (3)

*The purpose the course is to provide a foundation for the discrete mathematics used in 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 counting techniques. The approach, however, emphasizes the topics of importance to computer science and provided examples to illustrate why the material is of interest.*

**0418-141** Computer Programming I (4)

*Description 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 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 re-enforce understanding and to develop computing skills.*

**0418-142 **Computer Programming II (4)

*The course continues computing orientation at an advanced level after a brief review of the fundamental programming concepts taught in course Computer Programming I. It continues with 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 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 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)

*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)

*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 the 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)

*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)

*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 the assembly language level. It emphasizes the data representation of numerical and non-numerical data on 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-222 **Systems Programming Laboratory (2)

*This course is highly programming oriented and contains a series of laboratory projects that gives students the chance to use and combine the subjects covered in the programming courses “Computer Programming I” and “Computer Programming II” as well as the course “Computer Systems”. The projects concentrate on the following topics: basic CPU and memory functions, interfacing of devices, interrupt handling, design, implementation and test of complex assembly language programs; integration of functions and services of operating systems; interfacing high-level programming language programs and assembly programs. *

**0418-223 **Systems Programming (4)

*This course serves as foundation for courses on networks and operating systems, where 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)

*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 subject of investigation. A main objective of this course is that the students understand the mathematical concept used in describing the complexity of algorithm, to select and apply algorithms, as well as to explain the trade-offs that exist between a range of algorithms that posses the same functionality. Furthermore, the course introduces to complexity classes P and NP. *

**0418-311 **Numerical Computation (3)

*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 differentiations and integrations, solving linear equations, initial and boundary value problems, ordinary differential equations, spline functions, and least square methods.*

**0418-315 **Theory of Computation II (3)

*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 generalization of basic models for parallel computation.*

**0418-321 **Operating Systems (3)

*The course provides a comprehensive description of operating system principles. It introduces the concepts necessary to understand how an operating system serves as 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-322 **Computer Architecture (3)

*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-331 **Computer Network (4)

*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)

*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)

*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)

*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)

*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. *

**418-390 **Software Engineering (3)

*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-415 **Information Theory and Cryptography (3)

*The course introduces computer science students to Shannon’s approach of Information theory and cryptography. Therefore, in the centre 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)

*The course introduces to basic concepts of modelling 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)

*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)

*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)

*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)

*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-470 **Database Systems (4)

*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)

*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-490 **Project (2)

*This course is taken by senior students under the guidance of a faculty member. It provides students with opportunities to enhance their skills such as developing formal problem specifications, reviewing research journals, building prototypes, scientific writing, working in teams, interacting with users, and making oral presentations. The registered students have to work out a software project, to submit a project report that is written in a professional way and to provide a presentation in front of the students, who are registered for the project course. The project proposal must find the consent of the course instructor. *

**0418-496 **Topics in Computer Science I (3)

*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)

*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. *