teaching

The list of courses I taught at Sabanci University.

  • CS204: Advanced Programming (2020, 2019, 2018, 2017, 2016, 2015, 2014).
    • This course is intended to give advanced programming techniques, as well as further experience in programming. Topics covered will be: advanced object-oriented programming techniques and programming with classes (function overloading, templated classes, inheritance), pointers, linked lists, stacks, queues, debugging and profiling, reusable software (using/creating libraries), visual/GUI programming, exception handling (SW interrupts), multi-threaded programming and synchronization.
  • CS306: Database Systems (2014).
    • This course covers the fundamental topics in database management systems including ANSI/SPARC architecture, data abstraction, data independence; data definition and manipulation languages; entity-relationship and relational data models, integrity constraints, query languages like SQL, relational algebra and calculus, functional dependencies, normal forms, transaction processing recovery and concurrency control, data structure for database management systems such as indices, B-trees, hashing.
  • CS406: Parallel Computing (2020, 2019, 2018, 2017, 2016, 2015, 2014) - double coded with CS531: Parallel Processing and Algorithms.
    • This course is an introduction to various aspects of parallel computing. Topics include the taxonomy of parallel architectures and interconnection networks, parallel algorithms, and programming, speed-up, efficiency, and performance issues; control-parallel, data-parallel, and data flow models; parallel algorithms for sorting, matrix operations, graph problems.
    • At the end of the course, the students will; (1) understand the evolution of high performance and parallel computing w.r.t. laws and modern hardware; (2) be able to design, apply, and analyze parallel algorithms in problem-solving; competent to measure the performance of parallel/distributed programs; (3) will be able to evaluate whether a parallel and distributed application is efficient or not and propose techniques to increase the performance; (4) will gain hands-on experience with GPU programming with CUDA and multicore programming with OpenMP.
  • CS501: Advanced Data Structures and Algorithms (2017).
    • This course emphasizes fundamental algorithms, advanced methods of algorithmic design and analysis, and the use of advanced data structures. Topics include understanding of the inherent complexity of natural problems via polynomial-time algorithms, randomized algorithms, NP-completeness, online algorithms, graph, and network flow algorithms, linear programming, approximation algorithms, tools for probabilistic analysis of algorithms.
  • CS582: Special Topics - Algorithms on Massive Scale Data (2015).
    • This course covers algorithms, techniques such as sketching and streaming algorithms, sublinear algorithms, dimensionality reduction, randomized linear algebra, external memory and cache-obliviousness, as well as tools such as Hadoop, Map Reduce, and Spark, to cope with massive scale data.
  • SEC505: Blockchain: Sec. and Applications (2020, 2019, 2018) in Professional Master’s Program on Cyber Security.
    • This course covers cryptographic fundamentals for blockchain, distributed systems, cryptocurrencies, smart contracts, distributed blockchain applications, consensus algorithms, blockchain mining, security and privacy in blockchain, blockchain ecosystem.
  • SEC532: Blockchain: Sec. and Applications (2020, 2019, 2018) - double coded with CS48001: Special Topics - Blockchain: Sec. and Applications
    • This course covers cryptographic fundamentals for blockchain, distributed systems, cryptocurrencies, smart contracts, distributed blockchain applications, consensus algorithms, blockchain mining, security and privacy in blockchain, blockchain ecosystem. The students learn these concepts while having hands-on experiences on Bitcoin scripting, smart contract, and Dapp development with Solidity.
    • After the course, the students will; (1) be able to understand the components of blockchain, the terms, and the jargon people use; (2) be able to understand the math behind the cryptographic techniques used in various blockchains; (3) learn how to design a blockchain-based solution for a real-life problem; (4) be able to implement smart contracts on a blockchain with Solidity.