​​​Computer Science

Mission Statement

The Department of Computer Science at the American University of Beirut prepares students for advanced studies and professional careers in the dynamically changing world of computing and information technology. Our program combines the theoretical foundations of computing with the practical knowledge of software development vital to industry, to provide broad and integrated curriculums.

The department offers a Bachelor of Science (BS) degree in computer science, designed to be completed typically in four years.

The department has vigorous research programs in graphics and multimedia, networking and security, machine learning and data science, high-performance computing, data mining and information retrieval, and software engineering. Our faculty members are committed to contributing to the advancement of the field of computing through scholarly activities, in which our students play a vital role.

Bachelor of Science in Computer Science​

The Bachelor of Science program aims at imparting graduates with a solid foundation in computing at both the theoretical and practical levels, thus conferring the ability to design, build, and deploy sophisticated systems using state-of-the-art technologies in a broad array of areas. It also develops an appreciation of the transformative impact that computing has had on a wide variety of disciplines. Students are trained in quantitative reasoning, the use of fundamental principles and ideas (abstraction, modularity, data structures, algorithmic, computability, calculus, and logic) for analysis and problem-solving, and disciplined development of modern software systems. The BS program adheres to ACM’s (Association of Computing Machinery) standards for knowledge areas learning outcomes.

Degree Requirements

University General Education Requirements

The General Education requirements are the following:

Major Requirements

Computer science: CMPS 101, CMPS 102, CMPS 111, CMPS 214, CMPS 315, CMPS 361, CMPS 221, CMPS 231, CMPS 340, CMPS 342, CMPS 244, CMPS 270, CMPS 271, CMPS 490 and 42 additional ECTS in computer science courses numbered 214 and above.

Technical electives: 6 ECTS to be chosen from the following:

CMPS elective numbered 214 or above, PSYC 322, PSYC 329, Mathematics: MATH 100 (Calculus III), MATH 201 (Linear Algebra and Differential Equations), STAT 101 (Probability & Statistics)

All prospective computer science majors are expected to complete CMPS 101, CMPS 102, CMPS 111, and Math 201 in the first year. Computer science majors are expected to maintain an average grade of at least 2.2 in computer science courses. Students must have a grade of at least C+ in CMPS 101, and a grade of at least C+ in CMPS 102 before they are allowed to enroll in most CMPS courses.

Course Descriptions

CMPS 101 Introduction to Programming - 6 ECTS

This course introduces students to programming and computational thinking. A high-level programming language is used. Students will learn the principles of imperative and object-oriented programming in addition to basic data types, flow control (repetition and selection constructs), procedures and functions, parameter passing, scoping, recursion, arrays, and classes. Students are briefly introduced to simple algorithms and data structures.

CMPS 102 Intermediate Programming with Data Structures - 6 ECTS

This course consolidates algorithm design and programming techniques, with an emphasis on abstract data types. The course introduces students to the design, analysis, and implementation of data structures as well as some of the key algorithms operating them. Topics include lists, stacks, queues, deques, sets/maps, search trees (binary search trees and AVL trees), heaps/priority queues (heap sort), hash tables, and graphs (breadth-first search and depth-first search). Prerequisite: a grade of at least C+ in CMPS 101.

Every term.

CMPS 103 Programming for Everyone - 6 ECTS

This course is designed for students with no prior exposure to computer science or programming. It aims to help students, regardless of their major, to feel justifiably confident of their ability to write small programs that allow them to accomplish useful goals. To this end, it provides students with a brief introduction to many topics in computer science so they will have an idea of what is possible when they need to think about how to use computation to accomplish some goals later in their career. The course will use the Python programming language. Not open to computer science students.

CMPS 108 Computing for Business - 6 ECTS

This course introduces Excel as a computer tool to plan, create, and use spreadsheets to formulate and solve business problems. It exposes students to a wide coverage of spreadsheet topics from introductory concepts such as problem formulation, writing formulas and functions, charting, grouping, and error prevention to more powerful and advanced features such as pivot tables, and analysis needed in decision-making. In addition, it boosts students’ ability to collect, analyze, and forecast business and financial data to generate valuable insights. The course offers students an opportunity to apply skills in a laboratory environment in which they can experiment using Excel business problems designed for some selected topics. It provides the tools to perform modeling, calculations, analysis of various phenomena encountered in other courses such as finance, operations management, human resources, etc.

CMPS 111 Discrete Structures - 6 ECTS

This course introduces students to discrete structures, focusing on those relevant to computing sciences. Topics covered include Logic and Proofs, Sets, Sequences, Functions, Growth of Functions, Algorithms and their complexities, Induction and Recursion, Counting, and Recurrence Relations. Every term.

CMPS 214 Algorithms and Data Structures - 6 ECTS

This course introduces systematic methods for the design and (asymptotic) analysis of advanced algorithms and data structures. Topics include searching, sorting, order statistics, divide-and-conquer, greedy algorithms, dynamic programming, multi-threaded algorithms, matrix algorithms, as well as (advanced) graph algorithms. Several data structures are also studied such as red-black trees, binomial heaps, Fibonacci heaps, and suffix trees.

Prerequisites: CMPS 111 and a grade of at least C+ in CMPS 102. Annually.

CMPS 221 Computer Organization and Design - 6 ECTS

This course covers the fundamentals of computer architecture with a focus on single-core processor design. Topics include: digital logic design, combinational and sequential logic, hardware for computer arithmetic, floating point arithmetic, assembly programming, instruction set architecture, Datapath design, pipelining and pipeline hazards, memory organization, cache design, and virtual memory.

Prerequisites: CMPS 111 and a grade of at least C+ in CMPS 102. Annually.

CMPS 231 Programming Languages - 6 ECTS

This course covers the fundamentals of programming language design and implementation. The course introduces functional programming and examines the language design principles underlying functional, imperative, and object-oriented languages. Type systems are also introduced. The course also covers the initial stages of programming language implementation, including lexing, parsing, and semantic analysis.

Prerequisite: a grade of at least C+ in CMPS 102. Annually.

CMPS 243 Computer and Information Security - 6 ECTS

This course introduces students to the world of information and computer security. Students will be exposed to various security vulnerabilities of computing and networking systems and learn their fundamental aspects such as cryptography, user authentication, access control principles, trusted computing & multilevel Security, database security, SQL injection attacks, malicious software, worms, malwares, viruses, denial-of-service attacks, intrusion detection and prevention systems, firewalls etc. Also, other topics related to operating system security, web security, wireless security, and Internet security are covered as time permits. The course will examine causes of security breaches and give methods to help prevent them.

Prerequisite: a grade of at least C+ in CMPS 102 and senior standing.

CMPS 244 Database Systems - 6 ECTS

This course covers the fundamental concepts of database systems. Topics include data modeling using the Entity-Relationship model and the Relation model; query languages including relational algebra and SQL; File Organization and Indexing; Normalization; database programming; and noSQL databases. The course is offered in blended-format and includes a term project.

Prerequisite: a grade of at least C+ in CMPS 101 and junior standing. Annually.

CMPS 270 Software Construction - 6 ECTS

Software Construction provides methods, tools and techniques to develop, modify and maintain complex and efficient software systems. Topics include object-oriented design; specifications and invariants; abstract data types, testing, design patterns, concurrency; version control and event driven programming.

Prerequisite: a grade of at least C+ in CMPS 102.

CMPS 271 Software Engineering - 6 ECTS

This course introduces practical industry-standard software engineering best practices to students that have already written moderate sized software. Students are exposed to full development lifecycle methodologies, choosing the right SDLC, requirements management, software design, design patterns, testing. A group term project provides a holistic hands-on experience building an end-to-end software application using agile principles and emulating a real-world environment often for real clients with real needs. Other topics covered include working in a team, professionalism, project management, and ethics.

Prerequisite: CMPS 270. Annually.

CMPS 315 Theory of Computation - 6 ECTS

A course that covers basics of automata and language theory, computation theory, and complexity theory. Topics include regular expressions, finite automata, context-free grammars and parsing, push down automata, closure properties, Turing machines, Church’s thesis, reductions and decidability, time complexity and NP-completeness, space complexity, polynomial-space and log- space computations, circuit complexity, probabilistic computations and complexity classes, approximation algorithms, and selected topics as time permits.

Prerequisites: CMPS 214. Annually.

CMPS 324 GPU Computing - 6 ECTS

This course covers parallel computing in the context of processors with many computational cores, with particular emphasis on data parallelism and general-purpose GPU programming. The course introduces the CUDA programming model as well as the GPU architecture and memory organization. The course then covers mapping algorithms to parallel hardware and common optimizations for parallel code using numerous parallel patterns and applications case studies, such as: vector addition, matrix multiplication, convolution, stencil computation, histogram, reduction, prefix-sum, ordered merge, sorting, sparse matrix computation, graph traversal, and others. The course also covers a selection of advanced parallel programming practices.

Prerequisites: CMPS 221. Annually.

CMPS 332 Compiler Construction - 6 ECTS

This course covers the design and implementation of optimizing compilers starting from source code representation down to machine code. Topics include intermediate representations, linkage and storage conventions, intermediate code generation for imperative and object-oriented languages with polymorphism, global dataflow analysis and the iterative dataflow algorithm, local and global optimizations, backend code generation, and register allocation.

Prerequisites: CMPS 221 and CMPS 231. Annually.

CMPS 340 Operating Systems - 6 ECTS

This course provides an introduction to the fundamentals of operating system function, design, and implementation. It contains a theory component illustrating the concepts and principles that underlie modern operating systems and a practice component to relate theoretical principles with operating system implementation. The course is divided into three major parts. The first part of the course discusses concurrency (processes, threads, scheduling, synchronization, and deadlocks). The second part of the course discusses memory management (memory management strategies and virtual memory management). The third part of the course concerns file systems, including topics such as secondary storage systems and I/O systems. If time permits, the following topics will be briefly examined: Virtualization, security, distributed synchronization, and perhaps other topics. A case study of a contemporary operating system like UNIX accompanies the course.

Prerequisite: CMPS 221. Annually.

CMPS 341 Systems and Network Programming - 6 ECTS

This course focuses on the programming aspects of networking protocols. Topics include: designing and building programming applications that use computer networks, fundamental concepts required to build iterative and concurrent client/server networking applications using sockets. Then it moves to explain low level networking programing and other advanced socket topics. The course also presents the emerging peer-to-peer computing along with some tools needed to develop P2P applications.

Prerequisite: CMPS 340. Annually.

CMPS 342 Computer Networks - 6 ECTS

An introduction to network architectures and protocols, placing emphasis on Internet design principles and methodology. Specific topics include application layer protocols, network programming, transport protocols, circuit switching and packet switching, routing algorithms, multicast, local and wide area networks, error detection and correction, and performance evaluation.

Prerequisite: CMPS 221. Annually.

CMPS 351 Numerical Computing - 6 ECTS

Techniques of numerical analysis: number representations and round-off errors, root finding, approximation of functions, integration, solving initial value problems, Monte-Carlo methods. Implementations and analysis of the algorithms are stressed. Projects using MATLAB or a similar tool are assigned.

Prerequisites: a grade of at least C+ in CMPS 101, and MATH 100. Annually.

CMPS 361 Machine Learning - 6 ECTS

This course covers Machine Learning theory, algorithms, and applications. Machine Learning is currently at the heart of Artificial Intelligence. It enables computational systems to adaptively improve their performance with experience accumulated from the observed data. This course balances theory and practice and covers the mathematical as well as the heuristic aspects. It also covers the latest trends in Machine Learning such as deep learning.

Prerequisites: a grade of at least C+ in CMPS 101, STAT 101, and MATH 201.

CMPS 362 Data Science - 6 ECTS

This course introduces foundational elements comprising the data science pipeline. It covers techniques in data acquisition, cleaning, and preparation for machine learning, basic applied machine learning techniques spanning distance-based algorithms, rule based algorithms, and black box algorithms, basic statistics for machine learning (descriptive, inferential, and estimation statistics), basic time series analysis and forecasting techniques, data production techniques using knitr and rmarkdown, and machine learning interpretability using SHAP. The course is delivered using both the R and Python programming languages.

Prerequisites: a grade of at least C+ in CMPS 101, STAT 101.

CMPS 375 Mobile Application Development - 6 ECTS

This course introduces students to the world of mobile applications development from a software engineering perspective. Students will learn the importance of a good design for a mobile application, in addition to being able to write a basic to intermediate mobile application. The course includes many software designs patterns and user interface design patterns. Students will learn how to collect, store, and present data in a mobile application, in addition to using the different exciting features of a mobile such as locations, graphics, cameras, and other features.

Prerequisite: a grade of at least C+ in CMPS 102. Annually.

CMPS 378 Web Programming and Design - 6 ECTS

This course introduces the fundamentals needed to program on the Internet as well as the state-of-the-art technologies used in designing and developing rich multi-tiered web-based applications. It presents the basics of client-side/server-side web programming and the skills and tools needed to create dynamic Web-based applications. It provides in-depth coverage of various markup languages and their associated cascading style sheets, several client side and server-side scripting languages (such as PHP and JavaScript, Angular, and Nodes) in addition to AJAX-enabled rich Internet applications, client-side technologies, web services, Web Servers, and multi- tiered applications using relational database systems.

Prerequisite: a grade of at least C+ in CMPS 102. Annually.

CMPS 380 Digital Media Programming - 6 ECTS

The class is an introduction to digital media programming and processing. The course explains the essential technology behind images, animations, sound, and video and illustrates how to write interactive programs that manipulate these media in creative ways. The class assumes basic knowledge in Java or a first course in programming.

Prerequisite: a grade of at least C+ in CMPS 101.

CMPS 382 Game Programming - 6 ECTS

This course introduces students to game programming using state of the art technologies. The course covers both theoretical backgrounds and implementation details of different components of games. Topics covered will be the physical control of a game character, interactions between objects, inventory, HUD, and AI.

Prerequisite: a grade of at least C+ in CMPS 102. Annually.

CMPS 416 Algorithmic Graph Theory - 6 ECTS

This course explores algorithmic graph theory by visiting some of its core theorems, key problems, and efficient algorithms and tools. The main goal is to systematically present essential results for the design of graph algorithms. Mathematical properties of graphs will be used in developing new algorithms and showing that these algorithms work correctly and efficiently. The course assumes no prior knowledge of graphs but requires that students have “mathematical maturity” (e.g., are comfortable with proofs and abstract reasoning). Some of the topics that will be covered include fundamentals of graphs, connectivity, matching, covering, planarity, sparsity, coloring, and network flows.

Prerequisites: CMPS 214. Annually.

CMPS 417 Advanced Design and Analysis of Algorithms - 6 ECTS

This course studies advanced data structures and algorithms, with an emphasis on the design of efficient algorithms. It surveys many of the techniques that apply broadly in the design of efficient algorithms, and studies their application in a wide range of domains and computational models. The goal is for the class to be broad rather than deep and to touch upon the following areas: data structures, bit tricks, string algorithms, maximum flows, linear programming, online algorithms, approximation algorithms, fixed-parameter algorithms, parallel algorithms, external-memory algorithms, computational geometry, and streaming algorithms. This is a tentative list of topics that might be covered; some material will be selected adaptively based on the background, interests, and rate of progress of the students.

Prerequisites: CMPS 315. Annually.

CMPS 445 Information Retrieval and Web Search - 6 ECTS

This course introduces graduate-level students to the basics of information retrieval, and the models and algorithms underlying modern search engines. Topics covered include: crawling; indexing; Boolean and vector space retrieval models; probabilistic information retrieval models; language models; top-k query processing; evaluation of information retrieval systems; relevance feedback; link analysis; latent semantic analysis; and information extraction.

Prerequisite: Senior standing. Annually.

CMPS 446 Distributed Systems - 6 ECTS

A distributed system consists of a set of nodes located at networked computers and communicate only by-passing messages. This course provides techniques to abstract, design and implement efficient, scalable, and fault-tolerant distributed systems. Topics include, but not limited to, inter-process communication, distributed synchronization and consensus (e.g., paxos, blockchain), fault-tolerance, distributed file systems (e.g., HDFS), and Hadoop ecosystem.

Prerequisite: CMPS 340. Annually.

CMPS 447 Advanced Networking Topics - 6 ECTS

This course focuses on the current, advanced, and emerging topics in networking. It aims to make the students familiar with the state of the art in networking topics and enhance their skills in network programming and simulations. Lectures will cover topics that include but not limited to socket programming, multicasting, quality of service, IPv6 based networks, Voice Over IP and Internet telephony, software defined networks, network function virtualization, data centers, wireless and mobile networking architectures and technologies (MANET, LTE, 5G). Due to time limitations, some topics might be covered through student presentations.

Prerequisite: CMPS 342. Annually.

CMPS 463 Advanced Machine Learning - 6 ECTS

This course focuses on Deep Learning and its applications. Deep Learning has revolutionized the field of Machine Learning and has turned Artificial Intelligence from a research endeavor into an actual reality. In this course, you will learn about the fundamentals of Deep learning, and how to build Deep Learning models for various real-world applications, particularly in Computer Vision and Natural Language Processing.

Prerequisites: CMPS 361.

CMPS 472 Advanced Software Engineering - 6 ECTS

A course on state-of-the-art software engineering for large distributed and concurrent systems. Fundamental principles and concepts for specifying, designing, analyzing, implementing, and testing such systems. Concurrent object-oriented paradigms. Design patterns. Use of tools. Documentation using both formal and informal descriptions. Students will develop at least one large software system as part of the course.

Prerequisite: CMPS 271. Annually.

CMPS 485 Computer Graphics - 6 ECTS

A course that covers the practice of, and underlying mathematical foundation for, interactive graphics programming. Topics include basic graphics systems, graphics primitives and attributes, windows and viewports, clipping, geometric transformations, color systems, 2D texture mapping, and introduction to 3D graphics. Programming in OpenGL will be used.

Prerequisite: a grade of at least C+ in CMPS 102. Annually.

CMPS 490 Internship - 2–6 ECTS

Computer Science students are expected to work eight full weeks at a recognized firm, in Cyprus or abroad. Internships promote the student's personal development and professional preparation and enable them to develop competencies expected of professionals working in business, government or the broader community.

Prerequisite: Senior standing.

CMPS 496 Computer Science Tutorial - 2–6 ECTS​

Prerequisite: Senior standing.

CMPS 497 Special Topics in Computer Science - 2–6 ECTS

A course on selected topics which change according to the interests of instructor and/or students. Topics are chosen from state-of-the-art innovations in software and computer information systems.

Prerequisite: Consent of instructor. Annually.

CMPS 499 Capstone Project - 6 ECTS

A course to enhance students’ skills with practical experience giving them the opportunity to integrate knowledge accumulated in different courses. In this course, students must deliver a software product which passes through the design, analysis, implementation, testing, and evaluation stages.

Prerequisites: senior standing.