Pattern-Oriented Software Architectures for Concurrent and Networked Software

This ten week Coursera massive open online course (MOOC) entitled Pattern-Oriented Software Architectures for Concurrent and Networked Software taught students how to apply patterns and frameworks to alleviate the complexity of developing concurrent and networked software. Students wrote concurrent and networked software programs in popular open-source pattern-oriented software architecture frameworks, such as Android (Java) and ACE (C++). The course began on March 4th, 2013 and ran through the middle of May, 2013.

About this Course

This course focuses on pattern-oriented software architecture for concurrent and networked software. Concurrent software can simultaneously run multiple computations that potentially interact with each other. Networked defines protocols that enables computing devices to exchange messages and perform services remotely. The topics in this course are timely since the advent of multi-core and distributed-core processors--coupled with ubiquitous wireless and wireline connectivity--is increasing the demand for researchers and practitioners who understand how to successfully develop and deploy concurrent and networked software.

Despite continuous improvements in processors and networks during the past four decades, however, developing quality concurrent and networked software remains hard; developing quality reusable concurrent and networked software is even harder. The principles, methods, and skills required to develop such software can be greatly enhanced by understanding how to create and apply patterns and frameworks. A pattern describes a reusable solution to a commonly occurring problem within a particular context. When related patterns are woven together they form a pattern language that provides a vocabulary and a process for the orderly resolution of software development problems. A framework is an integrated set of software components that collaborate to provide a reusable architecture for a family of related applications. Frameworks can also be viewed as concrete realizations of pattern languages that facilitate direct reuse of design and code.

This course describes how to apply patterns and frameworks to alleviate many accidental and inherent complexities associated with developing and deploying concurrent and networked software. These patterns and frameworks have been used successfully in many domains, including telecom/datacom, mobile devices, electronic medical imaging, network management, aerospace, avionics, automation, online gaming, and financial systems. Over the coming weeks and months I'll illustrate by example how patterns and frameworks simplify and enhance the development of concurrent and networked software via the use of:

We'll explore several case studies from the domains of mobile apps, web servers, object request brokers, avionic control systems, and expression tree processing to showcase a time-tested pattern-oriented software design and programming method for concurrent and networked software.

Course Objectives

Upon completing this course, students will be able to:

Course Format

The class will consist of lecture videos with integrated quiz questions designed to ensure that you're understanding material covered in the videos. There will also be weekly auto-graded standalone quizzes, as well as peer-graded short essays and programming assignments that are not part of the videos and optional reading material. The programming assignments will involve writing concurrent and networked software in popular pattern-oriented software architecture frameworks written in Java (such as Android) and C++ (such as ACE and Boost). There will also be an optional final exam.

Recommended Background

The course is intended for students who are familiar with

Course Structure

The course is organized as follows:

The PDF and PowerPoint versions of all the slides used in the course will be available online as the videos become available on the course website. You can download this material from here.