"Cloud Computing" is one of the hottest topics in the media lately. Exactly what is it? How does it relate to you? What can one do with clouds?
In this course, we will take a broad view of cloud computing and look at everything, from how to program a cloud application, to how one constructs a cloud, to the business cases for using (and not using) clouds for common tasks. There is no textbook, and we will be greatly depending upon the web to both deliver articles for our study and to motivate the discussion.
Some lessons learned from last time:
Get ready for a wild ride, like no other course you have taken. We are going "where few have gone before".
It is important to realize that I am learning about this as I go. Even though this is the second run of the course, the field has changed so much in a single year that I have plenty of catching up to do. For me, this is exciting; there has never been a sub-field that is evolving so quickly.
Therefore, I do not consider you as students, but rather, as "partners". Rather than "leading" you, I would rather think of the course as taking a walk together and exploring this topic together. Your responsibilities in this format include keeping me on track, challenging me when you think I'm wrong, and guiding me toward the aspects you consider most interesting.
For those of you who have not had me as an instructor before, it may take some acclimatization to get used to me. Please remember that:
The formal prerequisites are either Comp40 or EE14, and optionally, Comp111. The informal prerequisites include an open mind, resourcefulness, and curiosity. In doing my assignments, you may use any printed source on the entire internet to help. To excel here, you must be an explorer, and take responsibility for your own learning. I'll give you links to get you started, but that is only the beginning.
Note also that this is your course. You might be surprised that all it takes is a brief mention of a cool new technology to get a lecture on it. If anything catches your eye, or befuddles you, mention it!
A course on a creative and ground-breaking topic deserves a creative approach. In this course, you are allowed and encouraged to work in small groups of students for many parts of the course. The smallest useful group is 2, and the largest is 5 people. Activities called "exercises" are intended for groups rather than individuals. There are also "exams", "quizzes" and "assessments" (take-home exams) that are intended to be completed individually. These will be clearly marked.
There are several unique and experimental components to the structure of this class.
The definition of ethics in this course differs slightly from that in other courses. In some cases, you are expected to work in groups. In this case, ethical behavior means disclosing the members of your group when you submit the project. It is unethical to sign as a member of a group when you did not participate, and equally unethical to involve some other person outside the group as a "ringer" without mention of that involvement.
In other cases, you are explicitly not allowed to work in groups, e.g., on exams, quizzes, and assessments. In this case, ethical behavior means working alone, as well as disclosing the resources you utilized to complete the assessment. On assessments, you may use any resources on the internet to help, but may not converse with other people in any form (e.g., blogs, web publishing, sms, email, twitter(!), etc) to solve the problem. Search engine results count as "published" material.
Complaints about grading must be accompanied by working code and/or corrected solutions:)
First and foremost, this is a programming course, though the definition of "programming" might be different than you initially imagine. Among other effects of the cloud, it is redefining what programming means, as we will see in a series of progressively more bizarre exercises. At the beginning, programming will look much as you imagine it now, but by the end, we will have rethought completely what programming means, and you'll have some glimpse of the "programmer" of the future.
For better or worse, the language of the contemporary cloud is Java. I do not consider myself an expert on Java, and I will be learning a few of the finer points with you. One thing that will save us from ourselves is that the Java of the cloud does not depend upon massive libraries that take years to absorb, and the cloud-based libraries are by contrast smaller and easier to learn. For the most part, homework will be in Java, though there are going to be some homework in which configuration in XML -- and not coding in Java -- is the central issue.
Of late, however, python is making a good showing in the cloud, and we will be making some forays into python when it is easier to use than Java for a particular problem.
While I will not "decree" any specific programming environment, assignments will typically be crafted to be easier in the Eclipse programming environment. The best possible way to do assignments is to have your own copy of Eclipse on your laptop or desktop computer; it's free. For every assignment, there will be a need for custom configuration of Eclipse to do it, including add-ons.
In the second part of the course, we will be working inside complete instances ("sandboxes") of an operating environment, which can be executed as programs using VirtualBox, VMWare player, etc. Thus it helps to be able to load a very large image onto your personal machine.
Thus the course assignments are much easier if you have access to a laptop or desktop with a lot of free space, e.g., 50 GB.
If you don't have such a beast, I will make arrangements for you to have access to a local virtual machine within the department, for use for your assignments. This machine doesn't physically exist; it is a virtual instance in our VMWare infrastructure. Please let me know quickly if this is the case.