Program Highlights
 The program provides a rigorous analytical foundation in mathematics, a thorough understanding of computer science and IT theory, as well as practical software development skills.
 Courses in business, marketing, finance, and hightechnology entrepreneurship, and a wide variety of general study courses are also available.
 Reichman University computer science alumni are earning among the highest wages in Israel.
 The academic program is dynamic and in constant adaptation to the fastpaced innovations of the hightech world.
 New elective courses are offered each year to prepare students with the most relevant tools and knowledge.
Selected Courses from the Program:


This is the first course in the calculus of one variable intended for Computer Science. Topics covered include the algebraic and analytic properties of the real number system, functions, limits, derivatives and an introduction to integration. Applications including graphing functions, maximising and minimising functions, areas and volumes.

Systems of linear equations, Gaussian elimination; Matrices, matrix operations, invertible matrices, a method for inverting matrices; Determinants, Cramer`s rule; Vectors in 2space and 3space, dot product, norm of a vector, projections, cross product, lines and planes; Real vector spaces, subspaces, linear independence, basis and dimension, row space, column space and nullspace of a matrix, rank of a matrix

Discrete Math: This is an introductory course in discrete mathematics oriented toward Computer Science. Topics taught in the course include:  fundamental mathematical concepts (definitions, proofs, sets, relations, functions, order relations, proofs by induction),  counting (permutations, combinations, the inclusionexclusion principle),  basic number theory and graph theory.

Course Syllabus 1. Determinants 2. Linear transformations: kernel, image, composition of transformations, the inverse matrix, the duality of matrices and transformations. 3. Eigenvalues and eigenvectors, the characteristic polynomial, the minimal polynomial, diagonalisation of matrices. 4. Inner products, orthogonality, orthonormality orthogonal matrices

Set theory: naive and axiomatic set theory, cardinals and set comparison, finite and infinite sets, countable sets, cardinality of the continuum, degrees of infinity. Logic: We will study in the course about two logics  propositional logic and first order logic. We will understand the general components of a logic  syntax, semantics, and a proof system  and we will elaborate on each of the components with respect to the two above logics. Among other things, we will study about: Propositional logic  logic connectives, truth tables, logical consequence and equivalence, tautologies and contradictions, normal forms. Firstorder logic  quantifiers, predicates, functions, structures and models, logical consequence and equivalence, normal forms. As a part of first order logic, we will see examples of algebraic structures, and in particular, we will study basic concepts in group theory.

“Good data structures and bad code are much better than the other way around”. Indeed, in order to efficiently and effectively solve challenging computational problems, it is important to organize data in an appropriate form, called data structure. Data structures are an essential area of study and practice for computer scientists and practitioners. The course presents and analyzes classical data structures and related algorithms. In particular, we will learn how to assess the performance of various algorithms for searching, sorting, and manipulating data. We will learn widelyused data structures such as lists, stacks, queues, trees, and hash tables. We will then understand the relations between data structures and the efficiency of algorithms that exploit them. Following is a list of subjects to be covered. Time & space complexity: best case, worst case, average case and amortized – in terms of O, Ω, Θ classes. Data structures: linked list, stack, queue, binary heap, binary search tree, binary search tree with augmented data (e.g., interval tree), suffix trees, Btrees, hash table, KD trees. Algorithms: in addition to the algorithms related to the data structures, we will also learn comparison based sorting algorithms (heap sort, quick sort, merge sort), linear sorting algorithms (radix sort, counting sort and bucket sort), order statistics algorithms, and in particular the medianofmedian algorithm.

The course provides an introduction to procedural programming and work in a UNIX/Linux environment. The course teaches basic topics in the C programming language, such as memory structure, memory management, pointers, and design of procedural programs. In parallel, we will cover fundamental topics in work in a Linux environment, such as managing permissions, working with text files, and programming in shell scripts. The course will involve programming assignments in C in a Linux environment


The course teaches techniques for design and analysis of algorithms, and introduces important and widely used algorithms. The course is theoretical in nature, concentrating on the abstract notions involved. Basic graph algorithms such as graph traversals, shortest path, minimum spanning tree, and network flow are covered as well as general techniques such as greedy algorithms and dynamic programming.

This course reveals the inside of digital computers. The purpose of the course is to explain the principle of operation of the hardware and the relation of the hardware and the software and to give a clear view of how a highlevel language program is actually executed by a digital computer. The course starts with Boolean algebra and the implementation of Boolean equations using gates and continues with forming the basic building blocks of a digital computer, e.g., multiplexers, decoders, Arithmetic Logic Unit, registers, counters, state machines etc. At this stage, a simple CPU can be designed. Therefore, a RISC CPU, the MIPS, is defined by introducing its instruction set. The steps of converting a high level program into the MIPS machine language and the mechanism needed to support subroutines are discussed. This is followed by implementation of a basic single cycle MIPS in which the data path and the control part are designed in detail. The next stage is a multicycle implementation of the same CPU, including exceptions and interrupts handling. Eventually, a pipelined version is introduced.

The course will cover advanced programming topics with a focus on practical applications. We will take a deeper look at Java programming, including tasks such as file I/O and text parsing. We will also study broader topics in application programming, such as version control, unit testing and basic GUI development in HTML and Javascript.

Probability theory is a tool of fundamental importance to nearly all the sciences, including Computer Science. This course is intended as an elementary introduction to the mathematical theory of probability. The course covers the following topics: Basic Terms in Probability: Probability Spaces (Sample Space, the Field of Events and the Probability Function), Axioms of Probability, Combinatorial Analysis and Symmetric Sample Space, Conditional Probability and Baye’s Rule, Independency between Events. Random Variables: General Discrete Distributions and Special (Uniform, Geometric, Binomial, HyperGeometric, Poisson, Negative Binomial) and General Continuous Distributions and Special (Uniform, Exponential, Erlang, Normal), Jointly Distributed Discrete Random Variables, Independent Random Variables, Discrete Conditional Distributions, Expectation, Variance, Correlation (CoVariance, Correlation Coefficient), Markov and Chebyshev inequalities, Limit Laws (Central Limit Theorem, Convergence in Probability, the Weak Law of Large Numbers).

In this course we will study computational models and formal languages, which are important aspects of computer science theory. We will get to know the formal languages: Regular languages and Context free languages. In addition, we will study the basic computational model: automaton (deterministic and nondeterministic), Pushdown Automaton and Formal Grammar.



In recent years, we have witnessed two revolutionary changes in the field of networking. First, the internet has taken over the universe of computer networking. Any serious discussion about computer networking today has to be done with the internet in mind. Second, over the past ten years the biggest growth area has been in networking services and applications, which can be seen in the emergence of the web and ubiquitous use of email services, audio and video streaming, internet phone, and online commerce. This course is organized around a fivelayer internet architecture. These five layers consist of the application, transport, network, link, and physical layers.

The strive for efficiency is ancient and universal, as time and other resources are always in shortage. Thus, the question of which tasks can be performed efficiently is central to the human experience. In this course we will conduct a systematic exploration of this question through the lens of Computer Science. We will start by studying the theory of Computability, which is concerned with the rigorous definition of computational tasks and the analysis of automated procedures that may solve them. This will set the stage for the theory of Computational Complexity, whose goal is to examine what are the resources that are necessary for any algorithm to solve a given task. Topics covered in the course include Turing machines, universality, nondeterminism, the halting problem, recursive and recursively enumerable functions, undecidability, space and time complexity, the classes P and NP, reducibility between decision problems, the CookLevin theorem and NPcompleteness.

This course equips students with verbal communication skills ahead of their transition from academia to the professional arena. Classes are held in small groups, so to allow all students to practice. The course seeks help the students develop effective verbal communication skills by highlighting the various elements of presentation, such as structure, language, presentation, and content. Students will also be able to improve their verbal skills by using multimedia materials.

The course will provide an understanding of the theory and implementation of functional programming. The course will review the mathematical basis for functional programming, which is the Lambda calculus, teach the functional programming language Haskell, show how principles of functional programming have penetrated the conventional programming languages and environments, and present models for executing functional programs. The course will also mention the logic programming languages, which are based on Firstorder logic, and will briefly present the Prolog programming language.

For the entire list of courses please refer to the Student Handbook
*Students are also required to take general electives and may take electives from other programs at Reichman University.
**Reichman University reserves the right to cancel, alter, or expand the academic programs and courses offered.
Why study Computer Science at the Reichman University?
"Reichman University made me realize that there is no limit to what I can achieve."
"At Reichman University, I'm surrounded by openminded, passionate faculty and students, who facilitate a true education, beyond mere schooling and i’m thrilled about where my education here will lead me."