CSC420Computer Networks
3 credits | Pre-requisite: CSC212
This course covers the architecture and protocols of modern computer networks. It presents the networking protocol models: OSI and TCP/IP by discussing the different layers, their functions, roles, and services.
CSC212Computer Organization and Assembly Language
3 credits
The course is designed to introduce Computer Science and Information Technology students to the basics of computer architecture and low-level programming. i.e. assembly code and hardware manipulation.
The course focuses on the Intel x86 Assembly language, number representations, logic circuits, Boolean algebra and logic simplification, addressing modes, Input/Output devices, system buses, memory systems, memory systems, memory occupation, computer arithmetic, instruction sets and the design, control, and structure of CPUs.
CSC315Data Structures and Algorithms
3 credits | Pre-requisite: CSC211 And CSC314
Data Structures and Algorithms is a course designed to provide students with a strong foundation in data structures and algorithms, using an object-oriented approach. Students will learn how to design, implement, and analyze algorithms using a high-level programming language such as Java. The course emphasizes the use of object-oriented programming techniques to implement and manipulate data structures. Topics covered in the course include fundamental data structures (e.g., arrays, linked lists, stacks, queues, trees), Algorithm analysis and complexity, sorting and searching algorithms, Recursion, and backtracking, Hashing and collision resolution, Heaps and priority queues. The course includes lab workshops where students will apply these concepts in practice.
CSC320Database Systems
3 credits | Pre-requisite: (CSC214 Or CSC210) And CSC211
This course is designed to provide students with a comprehensive understanding of the concepts and techniques used in database systems. Topics covered in the course include Introduction to database systems and the relational data model, Entity-relationship (ER) modeling and database design, SQL programming and query optimization, normalization, denormalization, partitioning, Database indexing and transaction management, non-relational database systems (e.g., document-oriented, key-value, graph databases). The course includes lab workshops where students will apply these concepts in practice.
CSC416Graph Theory and Operations Research
3 credits | Pre-requisite: MAT310
The aim of this course is to formulate a wide variety of real-life problems and to solve those using methods based on graph theory and linear methods. Concerning graph theory, we will particularly study the following problems: shortest path, minimum spanning tree, maximal flow network, finding a critical path in a project network. As for linear methods, linear programming problems will be solved graphically and by using the Simplex algorithm and duality. We will also see how to solve integer programming problems using the branch-and-bound method.
CSC460Information Systems Security
3 credits | Pre-requisite: CSC320 And CSC420 And CSC421
This course is designed to provide students with a deep understanding of the principles and practices of information security, with a particular focus on securing computer systems and networks. It covers the fundamental concepts of information security, including the CIA triad (confidentiality, integrity, and availability), access control, authentication, and cryptography. The course also covers advanced topics such as network security, web security, and database security Topics covered in the course include Introduction to information security, Access control and authentication, Cryptography and digital signatures, Network security and secure communication, Web security and application security, Database security and data privacy, Security management and incident response.
CSC438Internship
1 credits | Pre-requisite: CSC360 Or INF360 Or CSC343
The internship module provides an opportunity for students to gain practical experience in the field of computer science by working with a company or organization in a real-world setting for a duration of two months.
During the internship, students will be supervised by an on-site supervisor as well as an academic supervisor from the university. Students will work on projects and tasks assigned by their on-site supervisor and will be expected to apply their knowledge and skills gained from their coursework to solve real-world problems.
At the end of the internship, students are required to submit a report according to the department requirements and template. The report should describe their internship experience, including the tasks they worked on, the challenges they faced, and the skills they developed. Students will also be expected to reflect on their experience and to discuss how their internship has contributed to their personal and professional growth.
CSC210Introduction to Programming
3 credits
This course introduces the fundamental concepts of programming, including basic programming constructs and programming paradigms, and builds on those concepts to cover more advanced topics in programming. Students will learn how to write simple programs using a high-level programming language such as Java. Topics cover the basics of programming, including basic programming constructs (e.g., variables, data types, operators, expressions), control flow structures (e.g., conditional statements, loops), functions and modular programming, basic data structures (e.g., arrays), recursion, and data files (e.g., text files).
Additionally, students will learn about programming style and comments, including best practices for writing readable, maintainable code and using comments effectively to document their code. The course includes lab workshops where students will practice programming and apply these concepts in practice.
CSC314Object Oriented Programming
3 credits | Pre-requisite: CSC214 Or CSC210
This course introduces students to the principles of object-oriented programming and design. It is designed for students pursuing a Computer Science degree and assumes prior programming experience. The course provides an in-depth understanding of object-oriented programming and design principles using UML, with a focus on the use of a programming language such as Java. Students will learn how to design and implement classes and objects, how to use inheritance and polymorphism to build complex software systems. Topics covered in the course include introduction to OOP concepts (classes, objects, inheritance, encapsulation, polymorphism), object-oriented design principles using UML diagrams, exception handling and error checking. The course includes lab workshops where students will OOP concepts in practice.
CSC421Operating Systems
3 credits | Pre-requisite: CSC212 And CSC315
Operating Systems is a fundamental course in the Bachelor of Science in Computer Science curriculum. The course is designed to provide students with a deep understanding of the fundamental concepts, principles, and algorithms underlying modern operating systems, with a particular focus on multiuser and multitasking operating systems like Unix/Linux. The course covers the principles of operating systems design and implementation, with an emphasis on the management of resources such as memory, processes, and input/output. Topics include mutual exclusion and synchronization problems, process scheduling algorithms, memory management, file systems, and device management. The course includes a practical component in which students will learn to use the Unix/Linux operating system commands language and multi-tasking programming techniques featuring process management, anonymous and named pipes, signals, shared memory, semaphores, and message queues.
CSC461Parallel and Distributed Computing
3 credits | Pre-requisite: CSC421
This course is designed to provide students with a deep understanding of the principles and practices of parallel and distributed computing, including the design, implementation, and evaluation of parallel and distributed algorithms and systems.
The course covers the fundamental concepts of parallel and distributed computing, including parallel architectures, message-passing and shared-memory models, synchronization, load balancing, and parallel programming languages and environments. The course also covers advanced topics such as parallel algorithms, distributed systems, cloud computing, and big data processing. It includes a practical component in which students will learn to design and implement parallel and distributed algorithms and systems using a variety of programming languages and tools, such as MPI, OpenMP, MapReduce, and Hadoop.
CSC400Professional Ethics
3 credits | Pre-requisite: CSC265 Or CSC266
This course introduces Computer Science students to the ethical issues and challenges that arise in the practice of computer science. The course provides an overview of the ethical principles that underlie responsible computing practice and explores case studies that highlight the practical application of these principles. Topics covered in the course include: the ethical challenges of emerging technologies, ethical frameworks and principles, privacy and data protection, intellectual property and copyright, cybersecurity and cybercrime, social responsibility and sustainability, professional codes of conduct and ethical decision-making. The course will involve case studies and class discussions to encourage critical thinking and ethical reasoning in the practice of computer science.
CSC265Programming Workshop I
1 credits | Pre-requisite: CSC210
The course aims to strengthen programming concepts acquired in CSC210 and prepare students for adapting to various programming environments and coding in an efficient manner. The course offers a variety of hands-on practice and mini projects that provide students with opportunities to develop and practice their programming skills. Additionally, students will learn about version control systems and debugging techniques. By the end of the course, students will have gained practical experience and skills that will help them become better programmers.
CSC365Programming Workshop II
1 credits
The course introduces students to Python programming and aims to develop their programming skills in a variety of practical and applied contexts. Students will work on hands-on projects that cover web development, data analytics, core software development, and other scientific and mathematical applications. The course will also cover advanced topics such as object-oriented programming, functional programming, and asynchronous programming, among others. Throughout the course, students will learn how to use Python's powerful libraries and tools, such as NumPy, Pandas, Matplotlib, Flask, and more. By the end of the course, students will have gained practical experience and skills that will enable them to tackle complex programming challenges and work on a wide range of projects.
CSC331Web Programming
3 credits | Pre-requisite: CSC210
This course introduces web programming, focusing on client-side web app development. Students will learn how to create dynamic and interactive web pages using HTML, CSS, JavaScript, XML, and DTD. The course will also cover the basics of server-side web programming, including an introduction to web servers, databases, and server-side scripting languages. The course includes lab workshops where students will practice Web programming and apply these concepts in practice.