# Teaching

I have been teaching the following university courses at a undergraduate and postgraduate level. For now the material for the lectures is in Greek.

Office Hours: Monday 11am-13pm

### Programming I

This is an undergraduate course which teaches the basics of programming using the C language. I have been teaching this course in the fall semester of the following academic years: 2018-2019, 2017-2018, 2016-2017, 2015-2016, 2014-2015, 2013-2014, 2012-2013, 2011-2012, 2010-2011, 2009-2010.

### Programming II

This is an undergraduate course which teaches more advanced concepts of programming using the C language. I have been teaching this course in the spring semester of the following academic years: 2012-2013, 2011-2012, 2010-2011, 2009-2010

### Data Structures

This is an undergraduate course which teaches the theory behind the basic data structures and presents implementations in C and Java language.

I have been teaching this course in the fall semester of the following academic years: 2018-2019, 2017-2018, 2016-2017, 2015-2016, 2014-2015, 2013-2014, 2012-2013, 2011-2012, 2010-2011, 2009-2010

### Algorithms & Complexity

This is an undergraduate course about algorithms and complexity. It presents the basic algorithmic techniques such as greedy, divide and conquer, dynamic programming, etc and provides an introduction in NP-Complete problems, polynomial reductions and how to deal with such problems in practice.

I have been teaching this course in the spring semester of the following academic years: 2018-2019, 2017-2018, 2016-2017, 2015-2016, 2014-2015, 2013-2014, 2012-2013, 2011-2012, 2010-2011, 2009-2010

### Compilers

This is an undergraduate course teaching the basic theory behind a compiler (lexer, parser, intermediate languages, abstract syntax trees, code optimization and code generation). During this course the students are writing a full-blown compiler for a small language which produces JVM bytecode.

I have been teaching this course in the spring semester of the following academic years: 2018-2019, 2017-2018, 2016-2017, 2015-2016, 2013-2014, 2012-2013, 2011-2012, 2010-2011

### Large-Scale Data Management Systems

This is a postgraduate course which teaches the architecture principles behind large-scale distributed systems.

I have been teaching this course in the spring semester of the following academic years: 2018-2019, 2017-2018, 2016-2017, 2015-2016, 2013-2014, 2012-2013