BSc in Computer Science
- 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 high-technology 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 high-tech 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 2-space and 3-space, 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 inclusion-exclusion 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. First-order 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 widely-used 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, B-trees, 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 median-of-median 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 is an extended version of a popular CS course known as Nand to Tetris. The elementary logic gate Nand is the basic building block from which all hardware platforms are made. In this course we start from Nand, and work our way upwards through the construction of a modern, general-purpose computer system – hardware and software – capable of running Tetris, and any other program. In the process, you will learn how computers work, how they are constructed, and how to plan and execute large-scale development projects. You will build the computer’s chips (ALU, CPU, RAM) using a Hardware Description Language (HDL) and a hardware simulator which we will learn in the course, just like hardware engineers do in practice. You will build the software stack (compiler, virtual machine, basic OS) using either Java or Python, and following detailed API’s and testing programs supplied by us. The course requires no previous hardware knowledge, the only prerequisite being Introduction to Computer Science and a passion to build things from the ground up.
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 non-deterministic), 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 e-mail services, audio and video streaming, internet phone, and online commerce. This course is organized around a five-layer 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, non-determinism, the halting problem, recursive and recursively enumerable functions, undecidability, space and time complexity, the classes P and NP, reducibility between decision problems, the Cook-Levin theorem and NP-completeness.
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 First-order 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?
"The Efi Arazi School of Computer Science at Reichman University provided me with both technical and leadership tools, which were key factors in my career development journey.”
"My experience at Reichman University has been valuable, challenging, and constructive. The combination of entrepreneurship and technology opened a door for me to an array of opportunities in growing and innovative industries, and granted me the relevant skills that align with my personal interests and professional objectives.”