CS 682: Distributed Software Devlopment

Here's the course description from the department handbook:
Prerequisite: CS - 601. Internet application development, including server-side technologies such as scripting languages, template frameworks, web page mining, and distributed computing issues such as peer-to-peer, multi-cast, and distributed agents.
Could you be less specific?
The purpose of this class is to teach you about the technology, principles, and algorithms needed to develop applications that utilize or require multiple machines. We'll look both at specific technologies for inter-machine communication, such as XML, RDF, and SOAP, and also at algorithms and protocols for use in distributed environments.
What are the course requirements?
You must have satisfactorily completed CS 601 to take this course. Throughout the course, you'll have a number of programming assignments, each of which will provide you with some familiarity with different technologies. You will then combine these pieces together into a larger application (a peer-to-peer client). You will also have a midterm and a final. More detailed info can be found on the syllabus.
What language will be using?
For the most part, I will let you use whatever language you want, as long as I have some familiarity with it. I will typically present examples in either Python or Java.

In some cases, there will be one or two languages that are obvious choices. For example, in working with SOAP, it will make sense to use a language that has mature SOAP libraries developed. If you want to use something esoteric (i.e. not Java, Python, Perl, Ruby, C/C++, or C#) you should talk to me ahead of time.
Can we use (insert really cool library or package here) to help with our lab?
Maybe - talk to me on a case-by-case about this. In general, I'd encourage you to take advantage of third-party packages, as long as they don't make the lab trivially simple.
What's the class like?
We'll alternate between "lab-style" classes and traditional lectures. In the lab-style classes, we'll have a short introduction to some particular technology, followed by time for hands-on work and interaction. Lectures will be in the more traditional format, and will be used to cover more theoretical or algorithmic topics.
What will we learn about?
Some of the topics we'll cover are: distributed computing paradigms (service-oriented, client/server, peer-to-peer), principles of distributed systems (synchronicity, coherence, fault tolerance), algorithms for ensuring coherency, liveness, leader election and replication, distributed objects, discovery and naming systems, large-scale distributed systems, resource allocation, and multiagent systems. The syllabus has a list of topics.
There's so much reading! Do we really have to do it, or can we just look at the class slides?
The reading is required and I will expect you to do it, preferably before the relevant class.

One useful skill I hope to help you pick up in this class is the ability to quickly scan and synthesize written documentation. You will not want to read all of this information from front to back. Instead, you'll want to scan through it, looking for headers and cues as to the subject matter. Then you'll want to go back and spend more time on those sections that contain relevant material that you are not familiar with.
How is this course different from Professor Pacheco's Parallel and Distributed Computing (PDC) course or Professor Benson's Graduate OS course?
PDC focuses on tightly coupled processing units. The assumption is that all of the nodes in a cluster or system have low communication costs and latency, and are all controlled by the same individual or organization. This allows you to do fine-grained parallelism.

We will be focusing on larger-scale systems, in which one or more components may not be in the same organization, city, or even the same hemisphere. In addition, these systems may not be administered by a single entity, which leads to a focus on coarse-grained parallelism, and protocols for effective communication.

Graduate OS also deals with distributed systems and the operating system functionality needed to provide these sorts of services. The main difference between this class and graduate OS is that we will focus our attention on "the transport layer and above." That is, we will assume that the infrastructure for supporting communication is already in place, and look at what can be done at the application level to perform distributed computation.