This course surveys the most important algorithms and data structures in use on computers today. Particular emphasis is given to algorithms for sorting, searching, graphs, and strings. The course concentrates on developing implementations, understanding their performance characteristics, and estimating their potential effectiveness in applications.

This course provides core concepts of computer architecture and digital logic, von Neuman models, MARIE machine, Memory systems, Symbol codes, Input/output operational units. Also, this course enables students to successfully apply concepts of operating systems. Gives them knowledge services of OS as an intermediary between user applications in one hand and the computer system hardware on the other hand.

Business and Leadership course is an applied and practical course surveying the attributes of leadership that are practical for different business cultures. The module will be separated into (1) Effective Communication, (2) Learning, (3) Entrepreneurship and (4) Finance & Marketing.


Introduction to the intellectual enterprises of computer science and the art of programming. This course teaches students how to think algorithmically and solve problems efficiently. Topics include abstraction, algorithms, data structures, encapsulation, resource management, security, software engineering, and web programming. Languages include C, Python, and SQL plus HTML, CSS, and JavaScript. Problem sets inspired by the arts, humanities, social sciences, and sciences. Course culminates in a final project. Designed for concentrators and non-concentrators alike, with or without prior programming experience. Two thirds of CS50 students have never taken CS before. Among the overarching goals of this course are to inspire students to explore unfamiliar waters, without fear of failure, create an intensive, shared experience, accessible to all students, and build community among students.

An important aspect of most every business is record keeping.  In  our  information  society,  this  has become  an  important  aspect  of  business,  and  much  of  the  world's  computing  power  is  dedicated  to maintaining and using databases. Databases of all kinds pervade  almost  every  business.  All kinds  of  data,  from  emails  and  contact information to financial data and records of sales, are stored in some form of a database. In the theoretical part, this course will provide an introduction to relational databases modelling with an  emphasis  on database normalization. The practical part includes a hands-on approach to databases implementation and information processing using SQL.

The main objective of the course is to introduce students to concepts necessary for designing, using, and implementing database systems and applications.


This course is an introduction to notions of discrete structures in mathematics that are relevant to computer science.

This course covers network management and security issues and solutions. The course starts with consideration of why network security is necessary, network vulnerabilities and the types of attacks networks need to defend against. Discussion of basic security concepts of security services, and the role played by encryption and hash algorithms along with issues and approaches for key management follow. Particular focus and emphasis are then covered regarding to network security capabilities and mechanisms (Access Control on wired and wireless networks), Network Management Security, Internet Security, Wireless Network Security, VPN, Firewalls, Deep Packet Inspection and network flow monitoring. A discussion of network application security (Email, Web, P2P, etc.) is presented followed by consideration of network utility (DNS, NTP, etc.) and management tools (Syslog, vulnerability scanning, penetration testing, etc.) and concluding with a review of necessary operational security processes and activities.

This course is designed to help students improve their software development skills using Object Oriented Programming language. During this course the concepts and the use of classes and objects (instances, inheritance, polymorphism, overloading, etc.) to solve computer related problems are demonstrated, while adhering to the best software programming practices.
Throughout the course different design patterns (creational, structural and behavioral) are demonstrated.
The use of streams and functional interfaces are explained.
Concurrent programming concepts will be introduced.
Throughout the course Java and bespoke libraries will be introduced