The confluence of multi-core and distributed-core processors, inexpensive mass storage, ubiquitous wireless connectivity, and commodity software platforms is driving the need for software engineers and programmers who understand how to develop concurrent and networked software for mobile devices that connect to cloud computing platforms. Despite many improvements in processors, storage, and networks, however, developing quality software on-time and on-budget remains hard. Moreover, developing high quality reusable concurrent and networked software apps and services is even harder. The principles, methods, and skills required to develop such software are best learned by attaining mastery of patterns, pattern languages, and frameworks. A pattern describes a reusable solution to a common problem that arises within a particular context. When related patterns are woven together they form a pattern language that defines a vocabulary and a process for the orderly resolution of software development problems. A framework is an integrated set of components that collaborate to provide a reusable architecture for a family of related apps or services. Frameworks can also be viewed as concrete realizations of pattern languages that facilitate direct reuse of detailed design and source code. This MOOC describes by example how to apply patterns, pattern languages, and frameworks to alleviate the complexity of developing concurrent and networked software for mobile devices via the use of object-oriented design techniques, Javaprogramming language features, and Android middleware. An extended case study project will be used throughout the MOOC to showcase pattern-oriented software design and programming techniques for concurrent and networked mobile devices and clouds.