In this seminar we explore, from a software engineering perspective,
several of the new programming paradigms that are emerging for
larger-scale network-based applications. This exploration, in the form
of reading, discussion, and experimentation, is done at two levels:
overall system architecture and programming infrastructure. Our goal is
to better understand both the core phenomena and what is the
significance of these phenomena for future software engineering.
Course Structure
6 units of the course will be a once-a-week reading seminar, focused on
becoming familiar with the development challenges posed by these
paradigms, and some of the most innovative current research on them
(including recent work at CMU). We'll ask everyone to read
material in advance and react to it (perhaps by experimenting in the
paradigm), and will split the discussion time between understanding the
reading and brainstorming about extensions and alternatives. Each
participant will play a coordinator/presenter role for one or two
topics and associated papers. Each day we will:
- Spend 40 minutes presenting/discussing the reading and/or
exercises, led by the facilitator
- Concrete and technical - what does programming in this domain
actually look like?
- Is this a fundamentally new core concept or a repackaging of
existing ideas?
- Spend 40 minutes discussing research questions and ideas arising
from the topic
- Challenges: scale, performance, capability, productivity,
quality
- Solutions: brainstorm
- Relevant abstractions
- Ways of checking correctness
- Transform into projects
For an optional additional 6 units, we'll meet a second time during the
week for a language/library design workshop. Each participant
will develop a small language or library design focusing on aiding one
of the paradigms studied in the course. The workshop will rotate
among participants, discussing proposals and ideas and exploring
potential research solutions. The end result will be a
well-motivated proposal along with some core theory and/or a small
design prototype. More information on workshop presentations is
posted on the
course blog.
Evaluation
- Quality of presentations when facilitating
- Participation
- Some reflection essay and/or development assignments
- Projects (for those doing one)
Potential Topics (overlapping - not all on schedule below)
Architectural ideas
- Service-oriented architectures
- Cluster
computing (MapReduce, Hadoop)
Technological underpinnings
- Framework-oriented
programming (Eclipse, J2EE, web
frameworks)
- Multicore computing (X10, Fortress, Chapel)
- Server scripting (PHP, Python, Ruby on Rails)
- Rich clients and web programming with AJAX
- Web-based GUIs (Adobe FLEX, MS Silverlight, Limelight, Flash)
Application ecologies
- Programming for mobile devices (Android, iPhone, BREW, Java ME,
WinME,
PalmOS, Symbian...)
- Embedded (Cyber-physical) (RTOS's, Real-Time Java)
- Web programming (see above)
- Cluster/cloud computing (see above)
Schedule
Date
|
Leader(s)
|
Topic
|
Assignment
|
Sept 9
|
Jonathan
|
Organizational meeting
|
|
Sept
11
|
Jonathan / Joshua
|
Rich clients & web
programming with AJAX
recommended book: AJAX design patterns
(online or in library)
|
Write an AJAX application
(extras: Google web toolkit, Microsoft Atlas, Ruby on Rails)
|
Sept 16
|
|
no
class
|
|
Sept
18
|
Bill
Jonathan
gone
|
Web-based GUIs
|
Write an application in Adobe
FLEX, MS Silverlight, Limelight, or Flash
|
Sept 23
|
|
|
|
Sept 25
|
|
|
|
Sept 30
|
|
|
|
Oct 2
|
|
|
|
Oct 7
|
|
|
|
Oct 9
|
|
|
|
Oct 14
|
|
|
|
Oct
16 |
|
|
|
Oct 21
|
|
|
|
Oct 23
|
(JA
gone) |
|
|
Oct 28
|
(JA
gone) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Jonathan's conflicts
- Sept 16,18 - ASE
- Oct 23 (Thurs) - grant meeting
- Oct 28 (Tue) - NSF panel
Bill - no conflicts so far