I have taught or am currently teaching the following modules:
Game Development (SOFT8009)
Students begin by learning about the history of games. At the same time, students begin lab work using Unreal Engine 4 to develop a 3D first-person shooter game. We cover many game-related topics, such as aesthetics, game dynamics and game mechanics, examining some theories of models related to game analysis and design. Other topics such as narrative, character and level design are covered. Students learn how to write a game design document and how to develop a paper prototype of a game. During lectures, games are analysed critically and picked apart to examine why they are or are not effective. Students write a short essay (circa 2,000 – 2,500 words) on a topic of their choosing, but this will often be a deep analysis of a game or games using frameworks such as the MDA framework, though students could approach the essay from a number of other lenses – culture, psychology, etc. Students work in a group to develop a game using Unreal Engine 4.
Cloud Application Frameworks (COMP8040)
This module is quite a large module of 15 ECTS credits. At the core of the module is learning how to develop Java enterprise and cloud applications using the Spring Framework, which sorts out a lot of the “plumbing” associated with typical large-scale Java applications and allows you to concentrate on developing your core business logic. By the end of the course, students will have deployed a large-scale web-based application to a cloud environment using the Cloud Foundry platform-as-a-service (PaaS). The module also covers modern software development practices and procedures – agile development, agile project management with Scrum, software configuration management, design patterns, UML 2.x and more.
Application Development Frameworks (SOFT8020)
This module focuses on developing scalable enterprise Java applications using the Spring Framework. Key concepts of frameworks are covered, such as Inversion of Control, Dependency Injection, Lightweight Containers, Aspect Oriented Programming, etc. Enterprise Integration is covered – web services, messaging, remoting – as is web application development using the MVC pattern, as well as an examination of other architectural patterns in web applications.
System Programming (COMP8033)
This module teaches students about using C to get system information, initiative interprocess communications and handle synchronization among processes / resources / threads using shared memory, semaphores, etc. Student also learn about socket programming.
OO Server Side Programming (COMP8007)
Students learn how to develop web applications using JSP, Servlets, JavaBeans and Taglibs. Frameworks are introduced, including RIA frameworks such as Vaadin.
Script Programming (COMP7014)
The basics of a script programming language are taught – assuming basic programming knowledge, such as with Java. My concentration is on Python initially, though other languages / interpreters are covered in lesser detail, such as Lua, Awk, Sed, Perl, Ruby and more. A GUI toolkit (Tk) and a microframework (Flask) are also covered.
Cloud Application Development (SOFT8022)
This module covers software development in the context of the Cloud. I begin with an introduction to Platform-as-a-Service and how it fits into the Cloud Stack. Frameworks and their characteristics and features are discussed before covering Spring Framework for Java in some depth, with a particular focus on Spring MVC. I cover other topics related to software development processes in a Cloud context, such as agile, continuous integaration, test-driven development, DevOps, lean software development, scrum, kanban, RAD frameworks, such as Ruby on Rails.
Applied Web Development (COMP8005)
I take the student through the process, in a very hands-on way, of short-listing and evaluating various technologies related to web development. The focus is on developing a report throughout the module on the technologies considered and the reasons why the platforms, such as PaaS or LAMP or custom environment, web or application framework, unit test frameworks, data access layer frameworks, build tools, software configuration management, IDEs, and so on. A prototype testing out some of the technologies also forma part of the assessment. The ethos of the module, from my perspective, is to build up the student’s overall knowledge of the software development landscape and the tools available, as well as building up the critical evaluation skills necessary in an environment full of competing technologies.
Advanced Web Publishing Apps (COMP8003)
Customising leading content management systems by creating themes and plugins. My main focus when teaching this module is on WordPress extensions.
Problem Solving & Programming 1 & 2 (SOFT6018 & SOFT6017)
These modules are the starting point for first-year students when it comes to programming. Students are first taught to think about problem solving, then use various techniques to analyse a problem, design a solution, and implement it using a high-level programming language (Java, naturally); then follow up to verify and validate the solution with tests (I introduce students to JUnit in the PSP2). The focus of the course is not on object-oriented programming, which comes in the follow-up OOP1 module, rather the structured aspects of everyday programming that slots neatly into OO programming.
Object-Oriented Programming 1 (SOFT7004)
Teaching students how to code using the Java language, teaching the fundamentals of Object-Oriented Programming using classes, objects, etc.
Application User Interfaces (COMP7002)
Introducing the practical application of interaction design using the Java Swing library to create desktop applications, along with a brief overview of a rich client platform / framework such as Netbeans Platform.
Database Systems 1 (COMP7025)
Introducing students to the concepts of database management systems, the relational model, SQL, ER modelling and database analysis and design.
Data Management Systems (DATA8002)
Introduction to the relational model, SQL DDL and DML. An examination of alternative NoSQL data models, in particular Key-Value Stores, Document-Oriented, Column-Family and Graph – focus is on MongoDB (document-oriented) and Neo4J (graph) in practical terms. An introduction to distributed data and Big Data is also provided.
Introduction to Human-Computer Interfaces (SOFT6002)
An introduction to the area of interaction design. The module is very much hands-on, encouraging students to experiment with prototypes, consider the psychological and social aspects of interaction design, and evaluate their designs and implementations in terms of usability, effectiveness, and so on.
MSc Project Supervision
Supervision of projects for students on the MSc in Cloud Computing and the MSc in Software Development.
Data Science Analytics Project (DATA8006)
Supervision of projects for higher diploma in data science students.
University College Cork
Electronic Environments (MIS532)
A mix of computer architecture, operating systems, networking, security, backup and recovery, and e-commerce. Delivered to masters students over the course of 2 semesters.
Designing Applications with Visual Basic (MT264)
I tutored for this 2nd-year module delivered remotely over 2 semesters.