Introduction to Computing - with lecture slides: The aim of this course is to introduce fundamental computing concepts to first year college students. The course is designed around functional programming language called Racket. It introduces essential concepts such as conditionals, function design and recursion, as well as further methods such as generative recursion and divide-and-conquer problem solving.
Object Oriented and Concurrent Programming - with lecture slides: This course introduces students to object orientation and concurrent processes, using the industrially accepted Java language. Object oriented approach considers the data and the process together. Program and algorithm design are considered under this approach. Object orientation topics include data hiding, inheritance, polymorphism, exception handling and GUI programming. This course also covers programming of concurrent, cooperating sequential processes that include critical sections, mutual exclusion, thread synchronization, semaphores, monitors and deadlock starvation.
Get the materials as lecture notes: OOP-LectureNotes.html, or expand for individual slides below:
Computer Networks Programming - lecture Notes:
This course aims to introduce students to the standards that make the computer networks possible, the theoretical concepts needed to understand it,
and approaches for designing networked software systems. Practical element of the course involves writing programs that use the various protocol stacks
to carry out network computing tasks. Subjects covered include layered network architecture, local and wide area network protocols,
network topologies, connectivity and delay analysis, network securitand communication secy recy, client/server and peer-to-peer communication
architectures, programming for high-load web applications. Students are expected to have a fair command of object oriented programming
and concurrent programming techniques. Lecture notes are provided here on: how computer networks work, and their security and architecture issues,
with several program examples (in Java and Python) related to TCP/UDP programming, RMI, XML-RPC, Broadcast/Multicast techniques, and concurrency/performance issues.
Large Scale Programming - Lecture Notes : Large scale programming concerns how to divide computational tasks across multiple processes
(threads or distributed systems) to accomplish higher levels of computational power. These lecture notes briefly cover principles and techniques used in these systems,
with several program examples (in Java).
Prolog Programming Tutorial : This tutorial was developed as part of an Artificial Intelligence course.
While Prolog is extremely useful for AI problems, its unique style and level of available texts makes it hard for students to approach and start using it for real problems.
These notes offer a limited depth coverage from very start to applying elementary problems and algorithms in Prolog language.