COURSE DESCRIPTION OF REQUIRED COURSES
Introduction to Programming (COM-122)
This foundational course introduces the fundamental principles of computer programming and computational thinking. Students learn to design, write, test, and debug programs using a high-level programming language such as Python, C++, or Java. Key topics include data types, variables, control flow (conditionals and loops), functions and modular design, arrays and lists, and basic algorithms for problem-solving. The course emphasizes algorithmic thinking, problem decomposition, and logical reasoning. Students develop multiple small projects that illustrate practical applications in data processing, automation, and user interaction. By the end of the course, students are able to design structured programs and have a solid foundation for more advanced computing courses.
Discrete Mathematics (COM-236)
This course provides the mathematical background necessary for the study of computer science and software engineering. Topics include propositional and predicate logic, set theory, functions and relations, mathematical induction, combinatorics, graph theory, and Boolean algebra. Students learn to construct rigorous proofs, reason about algorithms, and model computational problems using mathematical structures. Applications to computer science such as logic circuits, data organization, recursion, and cryptography are explored. The course emphasizes problem-solving, abstract reasoning, and the ability to express computational concepts in precise mathematical language.
Object-Oriented Programming (COM-119)
This course builds upon the foundations of programming to introduce the object-oriented paradigm, which emphasizes modularity, reusability, and abstraction in software design. Students learn the principles of encapsulation, inheritance, and polymorphism, as well as how to design and implement classes and objects. Additional topics include exception handling, file I/O, data encapsulation, and the use of libraries and frameworks. Students apply these concepts in practical projects, such as building interactive applications or simulation systems. The course encourages best practices in software engineering, including documentation, testing, and version control.
Principles of Computing Systems (COM-123)
This course provides an integrated view of how computing systems function from the ground up. It introduces digital logic, computer architecture, machine language, memory hierarchy, input/output systems, and system-level software concepts. Students explore how high-level programs are translated and executed on real hardware, gaining a deep understanding of the hardware–software interface. Topics such as instruction sets, microarchitecture, interrupts, and basic operating system services are covered. Through labs and simulations, students build small system modules and analyze performance trade-offs in computing systems.
Data Structures (COM-229)
A comprehensive study of data structures and their role in efficient software design. Topics include arrays, linked lists, stacks, queues, trees, heaps, hash tables, and graphs. Students learn about dynamic memory allocation, recursion, searching and sorting algorithms, and the trade-offs between time and space complexity. The course emphasizes algorithmic efficiency and the importance of selecting the right data structure for a given problem. Programming assignments require students to implement data structures and evaluate their performance using real-world datasets. This course is essential preparation for studying algorithms and software engineering.
Algorithms (TBA)
This advanced course focuses on the design, analysis, and optimization of algorithms. Topics include sorting and searching, divide-and-conquer, dynamic programming, greedy algorithms, graph algorithms (such as Dijkstra and Kruskal), and advanced topics like NP-completeness and approximation algorithms. Students learn to evaluate algorithm performance using asymptotic analysis and Big-O notation, and to select suitable algorithms for different problem domains. The course combines theoretical understanding with practical implementation, emphasizing critical thinking and problem-solving in computational contexts.
Operating Systems (COM-341.1)
This course provides an in-depth study of the fundamental concepts and design principles of modern operating systems. Topics include process management, threads, concurrency, synchronization, CPU scheduling, memory management, virtual memory, file systems, device management, and security. Students explore case studies of UNIX/Linux and Windows systems and gain hands-on experience through programming assignments such as process scheduling or memory allocation simulations. The course emphasizes the role of the operating system as a resource manager and as the bridge between hardware and applications.
Computer Networks (COM-416.1)
This course introduces the principles, architectures, and protocols of modern computer networks. Topics include the OSI and TCP/IP models, data transmission, error detection, flow control, routing algorithms, IP addressing, congestion control, network security, and wireless communication. Students analyze how data is transmitted through layered architectures and how communication protocols ensure reliability and performance. Practical exercises involve network simulation, packet analysis, and basic network configuration. The course prepares students to understand and manage networked systems and internet technologies.
Database Systems (COM-213)
This course introduces the principles and technologies of database design and management. Topics include data models (especially the relational model), entity-relationship diagrams, normalization, indexing, transactions, concurrency control, and data integrity. Students learn Structured Query Language (SQL) for creating, querying, and managing databases. The course includes a practical component in which students design and implement a database for a real-world application using a relational database management system (such as MySQL or PostgreSQL). Emphasis is placed on database design best practices, scalability, and security considerations.
Senior Thesis I (COM-431.1)
This is the first part of a two-semester capstone project where students undertake an independent research or development project under faculty supervision. In this course, students identify a problem or research question, conduct a literature review, and develop a detailed project proposal including objectives, methodology, and expected outcomes. Emphasis is placed on project management, academic writing, and research ethics. Regular progress meetings and presentations ensure that students refine their ideas and develop professional communication skills.
Senior Thesis II (COM-433)
A continuation of Senior Thesis I, this course focuses on the implementation, testing, and completion of the student’s research or development project. Students collect data or build systems, evaluate results, and present findings in a formal written thesis and oral defense. The course emphasizes technical rigor, innovation, and professionalism. Students are encouraged to produce work of publishable quality and to demonstrate mastery of their chosen computing discipline through practical application and analysis.
Internship: Educational Tasks
This internship provides supervised practical experience in an academic or training environment. Students apply computing knowledge to educational contexts by assisting in teaching, tutoring, curriculum design, or the development of educational software tools. The internship encourages reflection on teaching methodologies, communication skills, and the role of computing in education. A final report and evaluation by the supervising faculty member are required.
Internship: Research Project (COM-498.1 / COM-499.1)
This internship offers students the opportunity to participate in applied or theoretical research under the supervision of a faculty member or industry partner. Students work on an approved project involving data collection, experimentation, software development, or algorithmic analysis. The experience emphasizes independent research, documentation, teamwork, and presentation of findings. The course culminates in a written report or technical paper summarizing methods, results, and conclusions, demonstrating the student’s ability to apply academic knowledge to real-world problems.