This page is not an exhaustive list of everything I taught but rather a discussion of the specific courses I designed since I joined USF in 2002, with a focus on those linked to my Computing Education Research agenda. Each tab will discuss the courses I taught on this specific area.

All of the offerings in these pages have been initially taught in a face-to-face setting. They evolved into an hybrid delivery, face-to-face & web, which supported my transition to flipped classrooms. They have then been adapted to online delivery, first synchronous, then asynchronous. It has been quite interesting to get to transition the same learning objectives through this landscape of diversified delivery modalities

Again, I will provide only a quick list on this page for now until I have some time to upload more material

I enjoy teaching programming at any level. The courses below have been also an opportunity to conduct computing education research on the difficulties encountered by novice programmers - see the CEReAL group website for details.

The teaching material is made available, along with papers and other information when it has been developed as part of a NSF project.

Programming Fundamentals in Java

This is an introduction to programming for undergraduate students with no prior programming experience. At USF, I have taught several variants under the following names;

The latest version uses the fundamentals-first, aka objects-late, pedagogy but I have also experimented with objects-first, using the excellent BlueJ environment.

While we use the Java programming language, I get students started with the syntax-free flowchart interpreter Raptor during the first few weeks. This led to some interesting findings regarding the impact of syntax-late pedagogy. We then switch to Java with JGrasp to provide a good IDE support to students.

The material is available @

Object Oriented Programming in Java

This course directly follows the above and supplements it by introducing students to object oriented techniques. I will be teaching it for the first time at USF in Fall 2017 under the following name;

The material will be shortly available @

Program Design

This is a 2nd or 3rd programming offering for undergraduate students. It focuses on the C programming language as a way to strengthen their procedural programming skills while exposing them to a language used in upper-level offerings oriented toward the system-level aspects of our discipline.

At USF, I taught several variants under the following names;

The material is available as part of the NSF CLUE project;

Advanced Object Oriented Programming

This course has been taught at USF for Information Technology majors as both a graduate course in the Masters in IT, and an advanced undergraduate elective in the BS in IT programs. It is an overview of advanced functional and object-oriented programming techniques & frameworks.

At USF, I taught it under the following names;

Since I joined USF Information Technology program, a significant focus of my teaching has revolved around operating systems and, in particular, Linux. Besides the OS Principles undergraduate courses, this allowed me to also develop Linux Technologies, and System Administration oriented courses and a BS IT specialization track.

This work also resulted in several computing education research papers and grants, see CEReAL website for details.

Operating Systems

Core undergraduate course on Operating systems for which I opted to leverage Linux as a semester-long case study.

At USF, I taught several variants under the names;

One of the main pedagogical innovation was to allow students to interact with kernel internals without having to devote weeks to accustomize themselves with the kernel source tree as a whole. This is a barrier when using a prodution-level OS like Linux in the labs, but it is still a significant hindrancec when using kernels designed to be friendly to students such as Minix.

This was achieved by relying on Loadable Kernel Modules - LKMs. Students would learn about a kernel subsystem then write small LKMs designed to interact with it; e.g.

This allows us to focus on small pieces of kernel at a time and learn about them without actually modifying the whole kernel source tree itself

Part of the material I used was developed under NSF funding so you might get an idea of what this offering is all about by looking into the SOFTICE project.

User-Level Intro to Linux

This intro to Linux does not start students with system administration but instead aims at making them advanced users first. This approach, while adhering to the first exam of the LPI / Linux+ certifications, proved to be useful to a much wider range of students who need to know how to work on the Linux platform without necessarily targeting sysadmin positions.

At USF, I taught several variants under the names;

Teaching material available @

Linux System Administration

I have developed a USF BSIT Linux Technologies specialization track, based on a collaboration with Polk State College under NSF ATE funding.

Refer to the project website for more details @