Courses 2024

Compulsory for all CS Students admitted in 2024/2025 or later

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-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-143 Fundamentals of Computer Programming (3) (Prerequisite: 0418101)

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) (Prerequisite: CS142, CS220)

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-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: CS220)

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-310 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-320 Principles of Computer Systems (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-491 Capstone Project I (3) (Prerequisite: 0418320 )

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.