-
Notifications
You must be signed in to change notification settings - Fork 1.7k
POSA 14 FAQ
-
Why do certain classes appear in more than one assignment?
Certain classes (e.g., SimpleAtomicLong, SimpleSemaphore, etc.) appear in multiple assignments for several reasons, including (1) motivating students to fix any problems reported by peer graders during an earlier assignment and (2) providing a microcosm of the pros and cons of systematic reuse (e.g., pros being no need to rewrite a solution more than once, cons being the need to maintain the code over time).
-
Why aren't the MOOC in the MoCCA Specialization identical wrt programming testing procedures?
The log-based testing techniques and auto-grading tools that Prof Porter used in the Programming Mobile Applications for Android Handheld Systems MOOC made sense for the user-facing apps that were the focus of his course. They make less sense for the concurrency and communication apps and services we're developing and evaluating in this MOOC, which incur more non-determinism and are harder to auto-grade with 100% accuracy. As this Specialization evolves we'll continue to align our approaches so that students can use the most effective tools for the various techniques, methods, and tools covered in each MOOC in the Specialization.
-
Why are the videos arranged in descending order by week on the POSA MOOC Coursera site?
The videos on the POSA MOOC Coursera site are arranged in descending order (i.e. latest week first) so that students who are following along week-by-week can quickly find the latest videos to watch. If you want to watch the videos in ascending order (i.e., from first to last) please go to my YouTube POSA MOOC 2014 playlist, which has the same content in a different order.
-
What is the naming scheme for the videos?
The videos are named in order according to the Section, Module, and Part they appear, which corresponds to the Course Syllabus rather than to the week in which they appear (since each new offering of the POSA MOOC will likely have a different mapping onto weeks, so that information shouldn't be encoded into the names). The optional lectures do not correspond to this naming scheme since they aren't officially part of the POSA MOOC. If you want to store the videos locally on your computer in a different order (e.g., by week) feel free to rename them when you download them.
-
Who will define the projects implemented in the Capstone Projects Course?
Students can choose one project (from a menu of several projects) that the instructors will define. The reasons for this approach are to (1) enhance the consistency of the projects with respect to their difficulty, (2) ensure a critical mass of students for each project who can serve as peer assessors, and (3) avoid complex legal issues associated with intellectual property. Each project will involve elements of each MOOC in the Specialization, i.e., (1) user-facing portions of Android, (2) concurrency and services on Android, and (3) cloud services. Each student will own the copyright on his/her solution (which must be completed individually, rather than as part of a team). However, all student solutions must be available in open-source format to enable peer assessment.
-
What is the best way to handle null references in Java?
There's a good summary of error handling techniques for Java null references here. To avoid cluttering the solutions and distracting from the focus on concurrency and communication, the code examples in the POSA MOOC don't always check for null as thoroughly as production Android code should. In practice, however, we recommend that you apply consistent handling for null Java references in your code.
-
What are the expectations and policies for postings on the online discussion forums?
It's important to read, understand, and follow the Coursera Forum Code of Conduct. Rants and flames (such as "Android sucks," "Language X is better than Java," "Patterns are bad," or "I hate these lectures") will be ignored and/or removed since they generate much more heat than light and disrupt the learning process. Moreover, insulting, condescending, disrespectful, or abusive postings will not be tolerated and may result in students being removed from the course.
-
What are rules for choosing the appropriate Android Context?
See the discussion for an overview of which Contexts to choose for different situations.
-
Can students do extra assignments to improve their grade?
No, the assignments are peer graded and thus require a non-trivial amount of work from other students in the class. As a result, there will be no extra assignments.
-
Where are previews of the optional lectures on patterns and frameworks for concurrent and networked software from the "Programming Cloud Services for Android Handheld Systems" MOOC?
Previews of these optional lectures are available in Section 3 of the 2013 POSA MOOC. You'll need to register for this MOOC to access the lecture previews. Ultimately, these lectures will be integrated into the "Programming Cloud Services for Android Handheld Systems" MOOC when their time comes, but until then you can watch them at the 2013 POSA MOOC site.
<LI> <B> What are the course objectives?</b>
<P>Upon completing this course, students should be able to:
<ul>
<li><p>Recognize the inherent and accidental
e complexities involved with developing concurrent software that
communicates securely between processes and
threads.</p></li>
<li><p>Understand how pattern-oriented software
architecture and framework techniques can and cannot help to
alleviate these complexities.</p></li>
<li><p>Apply patterns and
frameworks to develop reusable and resilient concurrent
applications and services using the Java object-oriented
programming language and Android middleware.</p></li>
<li><p>Know
where to find additional sources of information on how to
program mobile applications and services on Android handheld
systems.</p></li>
</ul></P>
</li>
<li><b>How does this MOOC compare/contrast with courses at
Vanderbilt?</b>
<p>The material in this MOOC is based on senior-level
undergraduate courses we teach at Vanderbilt, such as the
<a
href="http://www.dre.vanderbilt.edu/~schmidt/cs282/">CS
282</a> course, which focuses on teaching mobile software
development at both a conceptual level (e.g., an understanding
of software patterns, object-oriented design, and frameworks)
and a practical level (e.g., experience programming Android
applications using Java and Eclipse). Students in
this course are expected to be (1) familiar with Java, Eclipse, and source code control systems,
and (2) capable of learning new material without significant
hand-holding by the teachers and course staff. The lecture
material in CS 282 is based on the material shown in this MOOC
(earlier versions of this material presented live in CS 282 are available at this a <a
href="http://www.youtube.com/playlist?list=PLZ9NgFYEMxp50tvT8806xllaCbd31DpDy">YouTube
channel</a>). The quizzes, programming assignments, and degree
of feedback for the Vanderbilt courses are different, however,
since the courses at Vanderbilt only have several dozen students (instead of ~80,000 students), so
the assignments are much more challenging and there's significantly more personalized guidance and in-depth assessments from the
teachers and course staff that can't be replicated in a MOOC (yet).</p>
</li>
<li><b>What are your assumptions about--and expectations
for--students taking this MOOC?</b>
<p>As mentioned in FAQ item #2 above, this MOOC is based on material we teach to
senior-level undergraduate students at Vanderbilt. This
material is intended for self-motivated students who
<ul>
<li> Know Java, Eclipse, and Git (or can learn them quickly on
their own)
<li> Want to understand both the concepts and
practice of developing mobile software applications and services
<li> Are curious about how the Android software stack itself is designed and implemented
<li> Are willing/able to carefully read/follow the instructions in the course assignments and
announcements.
</ul><p>
Students who are just interested in vocational training (e.g., having an instructor walk through application code projects step-by-step and line-by-line in the Android development environment) may not find this MOOC suitable for their needs since our goal is to help students learn techniques and methods for finding solutions, not simply spoon-feeding the solutions . Moreover, this MOOC covers certain topics (especially patterns and frameworks for concurrency, communication, and security) associated with engineering quality mobile software development that may not be of interest to students who just want training on the Android APIs, so for those students we recommend others sources, such as
the <a href="http://www.youtube.com/playlist?list=PL2F07DBCDCC01493A">Android
Application Development Tutorials</a> on
YouTube. Likewise, students who don't have time/interest in following the instructions/announcements carefully are welcome to take this MOOC, but they will need to adjust their expectations since the course is not designed for them, due to factors discussed in item #36 below.<p>
</li>
<li> <b>What is the most effective way to learn material covered
in the course and to successfully complete the programming
assignments?</b>
<p>We recommend watching the videos multiple times, looking for
different levels of meaning in the diagrams and the
examples. It's particularly important to carefully watch all the
videos referenced in the programming assignment descriptions
since they provide many relevant tips and insights. Likewise, we
recommend reading the material pointed to by links in the
slides, as well as material from the (optional) recommended
reading. Naturally, participating in the online discussion forum
(and ideally, a meetup group if one is available in your area)
will help make the course material more engaging and
personalized. Additional discussions of the programming
assignment goals, requirements, and (ultimately) their solutions
will be covered in "Virtual Office Hours" (see the FAQ entry on
this topic below).</p>
</li>
<li> <b>Can students take this course if they have little/no prior
experience programming Android and/or Java in Eclipse?</b>
<p>Our course assumes that students are comfortable programming
in Java and have some experience programming Android apps in
Eclipse. If you don't have any Java programming background you
might consider taking the course <a
href="https://www.udemy.com/java-tutorial/">Java for Complete
Beginners</a>. Likewise, you might also benefit from the <a
href="https://www.coursera.org/course/androidapps101">Creative,
Serious and Playful Science of Android Apps</a> MOOC, which is
a novice-friendly introduction to computer science and
programming Android-apps for smart-phones and tablets. No
prior programming knowledge is necessary for that MOOC. We
also recommend that you take Professor Adam Porter's MOOC <a
href="https://www.coursera.org/course/android">Programming
Mobile Applications for Android Handheld Systems</a> since his
course provides important coverage of Android app programming
that will be useful in our course. We encourage you to apply
the <a
href="http://kircher-schwanninger.de/michael/publications/LazyAcquisition.pdf">Lazy
Acquisition</a> pattern in these MOOCs, i.e., watch the
videos, keep track of what you know understand, and then use
the resources available to you (e.g., via the web and the
discussion forums) to fill in the gaps in your knowledge. One
of the best things about MOOCs is that you can go through this
material at your own pace, and there's really no penalty for
retaking a MOOC if you struggle with it the first time
through!
</p>
</li>
<li><b>Why are there so many URL links embedded at the bottom of
the slides?</b>
<p>Many of the topics (especially concurrency,
inter-process communication, and application security) we
cover in this MOOC are very technically deep. Given our
limited time and resource constraints, we can't possibly
address all this material in a single MOOC. Yet many students
may benefit from learning more about these topics, either
during or after the MOOC. Therefore, when there's additional
pertinent information on a topic that we can't cover in our
videos, we provide links in the PDF versions of the slides
that students can download from the <a
href="https://class.coursera.org/posa-002/lecture">Video
Lectures</a> page or from the 2014 POSA MOOC <a
href="https://share.coursera.org/wiki/index.php/Posa-002:Main">wiki</a>
maintained by students. These links point to material on the
web so that students can read as their interests and time
permits. Following up on all the links is a rewarding, albeit
time consuming task. In fact, we term these videos "<a
href="http://en.wikipedia.org/wiki/List_of_Middle-earth_food_and_drink#Lembas">Lembas</a>
Lectures" since a small dose of them can keep a student
nourished (intellectually) for hours! However, none of the
quizzes will involve questions related to this material, so
students can read them at their leisure. The videos in Section
0 are largely introductory, so feel free to watch them at an
accelerated rate of speed if you're willing to read all this
FAQ instead.</p>
</li>
<li> <b>What is the course staff policy for monitoring and
answering discussion forum threads and questions?</b>
<p>The course staff will endeavor to reply to thoughtful
technical questions or constructive suggestions for improving
the course. Often, the responses will point to other resources
(such as this FAQ or to video lectures) so that students can
learn the details of the solutions on their own, which is more
effective pedagogically. Questions posted anonymously will
receive less attention since we want to get to know the
students in the MOOC so the learning environment will be more
like a face-to-face course. Due to extremely limited course
staffing resources, questions about installing or using
Eclipse, GitHub,the Android emulator, debugger, etc. will need to be
addressed by the community of other students taking this
MOOC. Step-by-step instructions on how to setup an Android
development environment using Eclipse, Java, and GitHub are
available <a
href="https://class.coursera.org/posa-002/wiki/Installing_and_Using_Eclipse">here</a>.
</p>
</li>
<li> <b>How many and what types of programming assignments will
there be in this MOOC?</b>
<P>We'll have a half-dozen or so
programming assignments in this MOOC. The first several
assignments will give students experience applying and
developing concurrency mechanisms (e.g., implement a simple
AtomicLong and a simple Semaphore using Java
ReentrantReadWriteLock, ReentrantLock, and
ConditionObject classes using the Java
console environment). The next several assignments will
involve applying and developing frameworks and
applications that use these frameworks (e.g., a multi-threaded
ping/pong Android application that will apply various GoF
patterns to develop a framework that will make it easy to port
the application between Android and console configurations in
Eclipse). One assignment will be an integrated project
that will give students experience applying security fixes to the
iRemember application that was introduced in
Professor Porter's MOOC on <a
href="http://www.coursera.org/course/android" title="Link:
http://www.coursera.org/course/android">Programming Mobile
Applications for Android Handheld Systems</a>. All the source
code examples and skeletons for the programming
assignments will be available in this <a
href="https://github.com/douglascraigschmidt/POSA-14/">GitHub
repository</a>.
</p>
</li>
<li> <b>How can students understand and learn the material in the
videos most effectively?</b>
<P>There is no one rate of speaking that's appropriate for all
students. For students whose native language is not
English--or for any students who find the rate at which the
material is presented in the videos too fast to comprehend--we
recommend that you decrease the rate at which you play the
videos to 0.8x or slower (naturally, for material that you're
already familiar with, you might want to increase the rate at
which the video plays!). If you need instructions on how to
change the rate of playback speed for YouTube videos please do
a google search for information about the browser that you're
using. Once the POSA MOOC starts you'll also be
able to download the videos and use the media player on your
computer to obtain fine-grained control over the playback
speed. The Coursera platform also provides English subtitles
for all the videos based on the scripts we used to record them
originally. Likewise, you can enable "captions" via the
YouTube player to view subtitles at my <a
href="https://www.youtube.com/playlist?list=PLZ9NgFYEMxp4tbiFYip6tDNIEBRUDyPQK&feature=mh_lolz"
title="Link:
https://www.youtube.com/playlist?list=PLZ9NgFYEMxp4tbiFYip6tDNIEBRUDyPQK&feature=mh_lolz">YouTube
playlist</a>. In addition, downloading PDF versions of the
slides and reviewing them prior to watching the videos may aid
with comprehension. Finally, students might also consider
watching the videos multiple times, focusing on different
aspects of the material each time (e.g., listening to the
voice track, looking at the code and diagrams on the slides,
etc.). If you have time, you might also want to read the
material referenced by the links provided at the bottom of
many slides, which are listed on the 2014 POSA MOOC <a
href="https://share.coursera.org/wiki/index.php/Posa-002:Main">wiki</a>
maintained by students, as well as the <A HREF="https://share.coursera.org/wiki/index.php/Posa-002:Main#PDF_versions_of_course_videos_.28Please_help_complete_this_list.29:">book</A> version of the lectures.
</p>
</li>
<li><b>Will there be a Statement of Accomplishment for students
who complete this class?</b>
<p>Yes. Students who successfully complete the quizzes and
assignments in this class <u>prior to the completion of the
MOOC</u> will receive a Statement of Accomplishment signed by
the instructor. There will be two levels of Statements of
Accomplishment: Normal Track and Distinction Track. The
difference between the work performed in each of these tracks
is covered at the Coursera website <a
href="https://class.coursera.org/posa-002/wiki/SoA">here</a>. You
needn't be in the Signature Track to get a Statement of
Accomplishment with Distinction, though you do need to be in
the Signature Track if you want to be eligible to take the
Capstone project course, as described in the next FAQ entry
below.
</p>
</li>
<li> <b>Who is eligible to take the Capstone project course?</b>
<p>Like all Coursera Specializations, the Capstone project
course is only available to students who take the Signature
Track for the preceding three MOOCs in the
Specialization. Moreover, for this first offering of the
Mobile Cloud Computing with Android (MoCCA) Specialization
only students in the Signature Track who receive a "Verified
Certificate with Distinction" in all preceding MOOCs are
eligible to enroll in the Capstone project course. We may
remove this restriction in future offerings of the MoCCA
Specialization, after we have a better understanding of what's
required to successfully complete the Capstone project
course. Even if you didn't attain a Verified Certificate with
Distinction in Professor Porter's 1st MOOC in the
Specialization, you are still welcome to attempt a Verified
Certificate with Distinction in the 2nd and 3rd MOOCs in the
Specialization. If you succeed in attaining the Verified
Certificates with Distintion in these two MOOC all you'll need
to do is take Professor Porter's 1st MOOC when it's offered
next, at which point you'll be eligible to take the next
offering of the Capstone project course (i.e., not the one
that's starts in October 2014, but the next one after that)
once you'll successfully attain a Verified Certificate with
Distinction in all three MOOCs.
</p>
</li>
<li> <b>What is a "trans-institutional MOOC Specialization"?</b>
<p>This MOOC and two other MOOCs (<a
href="https://www.coursera.org/course/android" title="Link:
https://www.coursera.org/course/android">Programming Mobile
Applications for Android Handheld Systems</a> taught by <a
href="http://www.cs.umd.edu/~aporter">Professor Adam
Porter</a> from the University of Maryland and <a
href="http://www.coursera.org/course/mobilecloud" title="Link:
http://www.coursera.org/course/mobilecloud">Programming Cloud
Services for Android Handheld Systems</a> taught by Jules
White from Vanderbilt University) have been designed to
complement each other as part of the Coursera Specialization
on <a
href="https://www.coursera.org/specialization/mobilecloudcomputing/2"
title="Link:
https://www.coursera.org/specialization/mobilecloudcomputing/2">Mobile
Cloud Computing with Android</a>. In particular, the
programming assignments and the course project for all the
courses will be coordinated. Additional information on our
trans-institutional MOOC Specialization is available <a
href="http://www.youtube.com/watch?v=JSkvChTSanM" title="Link:
http://www.youtube.com/watch?v=JSkvChTSanM">here</a>.
</p>
</li>
<li> <b>Is it necessary to take Prof. Adam Porter MOOC prior to
the POSA MOOC or can students take the POSA MOOC without
taking his course?</b>
<p> It's not required to have taken Prof. Porter's MOOC on <a
href="https://www.coursera.org/course/android">Programming
Mobile Applications for Android Handheld Systems</a>. If you
just want to take some of the courses in this sequence--or
take them all in different order--you're certainly welcome to
do so, and you'll still learn a lot. You do need to be
familiar with the core Java and Android topics he covered in
his MOOC or you'll be lost (see FAQ item #5 about for
suggestions on what you'll need to know and how to learn
it). However, you needn't have done the integrative iRemember
application in his MOOC since the POSA MOOC will provide a
skeleton implementation of the iRemember project that focuses
on different aspects of the application (e.g., security features of Android), which won't require knowledge
of what was done in Prof. Porter's MOOC (which focuses on
user-facing features of Android). Naturally, if you take all
the courses in this sequence in the order presented you'll
gain a deeper, end-to-end understanding of handheld systems,
their applications and services, as well as their integration
into the cloud.
</p>
</li>
<li> <b>When will the course material be made available each
week?</b>
<p>All the course material (e.g., video lectures, quizzes,
programming assignments, etc.), for each week will be made
available three days early (i.e., by Fridays) by 9am eastern
time (2pm UTC/GMT) so that students can watch and read the
material over the weekend prior to the beginning of the next
week.
</P>
</li>
<li>
<b>Is there a required textbook?</b>
<p>There is no required textbook, per se. There's lots of
information available in the videos, slides, and the URLs
mentioned in the slides that will help you learn the material
we cover in this class. For deeper mastery of the material,
however, please see the list of "recommended reading" on the
<a href="https://www.coursera.org/course/posa">POSA course
webpage</a> for a list of books that are closely related to
the topics of the course.
</p>
</li>
<li><b>Where can students learn about how to configure their
Android and Java environment to run the examples and complete
the programming assignments?</b>
<P>The POSA MOOC will use the same Eclipse-based Android
development environment as Dr. Porter's earlier MOOC in this
Specialization on </a><a
href="https://www.coursera.org/course/android">Programming
Mobile Applications for Android Handheld Systems</a>,
Step-by-step instructions on how to setup an Android
development environment using Eclipse and Java are available
<a
href="https://class.coursera.org/posa-002/wiki/Installing_and_Using_Eclipse">here</a>.
If you're using a non-Eclipse development environment (such as
<a
href="http://www.jetbrains.com/idea/features/android.html">Intellij
IDEA</a> or <a
href="http://en.wikipedia.org/wiki/Android_Studio">Android
Studio</a>) or want to use a different build tool (such as <a
href="https://code.google.com/p/maven-android-plugin/">Maven</a>)
you'll need to enlist the help of other students on the online
discussion forum and/or the POSA MOOC <a
href="https://share.coursera.org/wiki/index.php/Posa-002:Main">Wiki</a>. Mavenized
versions of all the programming assignments are available <a
href="https://github.com/ilanpillemer/posa14-mavenised">here</a>.
</p>
</li>
<li><b>Where can students learn more about patterns and
frameworks?</b>
<P>Many videos about patterns and frameworks appeared in Section
2 and the Appendix of the <a
href="http://www.dre.vanderbilt.edu/~schmidt/Coursera/spring-2013-posa.html">Spring
2013 offering of the POSA MOOC</a>. You can find links to all
these videos <a
href="https://class.coursera.org/posasoftware-001/lecture/index">here</a>,
though you may need to register first at <a
href="https://www.coursera.org/course/posasoftware">this
link.</a> If you're a Safari online book club member you
should check out the <a
href="http://www.dre.vanderbilt.edu/~schmidt/LiveLessons/">Design
Patterns in Java</a> video training series that covers the
"Gang-of-Four" patterns.
</p>
</li>
<li><b>Which web browsers are recommended</b>
<p>Coursera recommends using the Chrome and Firefox
browsers. There's also a <a
href="http://help.coursera.org/customer/portal/articles/1364448-mobile-faq">mobile
app</a> for Coursera MOOC, as well.
</p>
</li>
<li><b>Can students use programming language [X] for the
course?</b>
<p>The programming assignments in the Android portion of this
course are designed for the Java programming language. The
cloud computing portion may provide more flexibility, but it
will also focus largely on Java, as well. Although you're
welcome to use other languages on Android for your personal
edification, if you stray from Java you'll have more work to
do to map what we're covering in the videos and projects to
the languages you want to use. You may also find it hard to
get feedback on your work via the Coursera <a
href="http://help.coursera.org/customer/portal/articles/971175-how-do-peer-assessments-work-">peer-grading
system </a>.
</p>
</li>
<li> <b>Where can students download the slides and source code
that are presented in the videos and the skeletons that are
provided for the programming assignments?</b>
<p>PDF versions of the slides will be available for download
after the videos are released onto the Coursera <a
href="http://www.coursera.org/course/posa/">POSA</a> MOOC
website each week. These versions of the slides will have
clickable links to make it easy to navigate to the
supplemental material referenced in the slides. All the
source code examples and skeletons for the programming
assignments will be available in this <a
href="https://github.com/douglascraigschmidt/POSA-14/">GitHub
repository</a> once the Coursera POSA MOOC
starts. A "cheat sheet" for using Git is available <A HREF="https://training.github.com/kit/downloads/github-git-cheat-sheet.pdf
">here and step-by-step instructions for using GitHub are available here and a video explaining the basics of Git and GitHub is available here.
<li> <b>How will the 2014 version of the POSA MOOC differ from the
2013 version?</b>
<p>Alhough the 2014 POSA MOOC will cover many of the same
patterns (plus new ones), it will be radically different than
the 2013 version in almost every other respect. The 2014 POSA
MOOC won't cover some of the more "abstract" topics we
discussed in the 2013 POSA MOOC. For example, we won't have
(new) videos on pattern relationships (e.g., pattern
sequences, pattern languages, etc.), general discussions of
frameworks, design dimensions of concurrency and networking,
overview of middleware stacks, etc., since (1) that's outside
the scope of Android and (2) we already have those videos
available in the <a
href="https://class.coursera.org/posa-001">2013 POSA
archives</a>, so you can rewatch the older videos for more
information on the themes of object-oriented software
patterns, frameworks, and design dimensions. the 2014 POSA
MOOC will cover many POSA2 and GoF patterns addressed in
Section 3 of the 2013 POSA MOOC, though they'll be presented
in the context of Java and Android instead of C++ and
ACE.
</p>
</li>
<li> <b>Where is the material from the 2013 POSA MOOC available
online?</b>
<p>All the video lectures, assignments, quizzes, and discussion
forum postings from the 2013 offering of the POSA MOOC is
available <a
href="https://class.coursera.org/posasoftware-001/lecture/index">here</a>,
though you may need to register first at <a
href="https://www.coursera.org/course/posasoftware">this
link.</a> A summary of the 2013 POSA MOOC is also available <a
href="http://www.dre.vanderbilt.edu/~schmidt/Coursera/spring-2013-posa.html">here</a>.
</p>
</li>
<li> <b>Why does this MOOC's name start with "Pattern-Oriented
Software Architecture?</b>
<p>All MOOCs <a
href="http://www.dre.vanderbilt.edu/~schmidt/">Douglas
C. Schmidt</a> teaches on Coursera have a focus on <a
href="http://www.dre.vanderbilt.edu/~schmidt/POSA">pattern-oriented
software architecture</a>, which is a programming paradigm that applies patterns to guide the
design and implementation of software frameworks, components, and applications. The details of what
sorts of patterns--and what applications of patterns we'll
cover--differ from MOOC-to-MOOC, but the patterns focus is
consistent - hence the common prefix for the names.
</p>
</li>
<li><b>What is the schedule for the course?</b>
<p>This MOOC, like all Coursera MOOCs, uses pre-recorded videos
for all the lecture material. As a result, there's no set time
when the class occurs, e.g., you can watch the videos at a
time and a pace that is most convenient for you. There will be
periodic programming assignments that will have a deadline,
which will be clearly marked on the <a
href="https://class.coursera.org/posa-002">POSA MOOC
website</a> in the <a
href="https://class.coursera.org/posa-002/api/course/calendar"
title="Link:
https://class.coursera.org/posa-002/api/course/calendar">course
calendar</a> by clicking on the calendar icon next to the
"Upcoming Deadlines" label. This calendar is automatically
updated as the material is released. Each week for the first
eight weeks (starting with Week 1) a programming assignment
will be released by Monday (see the POSA MOOC <a
href="https://github.com/douglascraigschmidt/POSA-14/tree/master/assignments">GitHub
repository</a> for the assignments). It will be due exactly
two weeks from when it is released. Likewise, there will be
weekly quizzes, released by the beginning of each week, though
their due dates will all be the last day of class so you can
take them as time permits (naturally, there won't be any "late
dates" for quizzes since they are due the last day of
class). Finally, we'll have periodic "virtual office hours,"
where I'll answer questions from students and lead impromptu
discussions with students live via Google Hangout and
YouTube. All these virtual office hours will also be recorded
and uploaded to the Coursera website so you can watch them at
your convenience.
</p>
</li>
<li> <b>What are the plans for
offering the MoCCA Specialization again in the future?</b>
<P>We are planning to re-offer the MoCCA Specialization starting
with Prof. Porter's MOOC on <a
href="https://www.coursera.org/course/android">Programming
Mobile Applications for Android Handheld Systems</a> towards the end of September
of 2014. For those
students who haven't yet achieved a Verified Certificate with
Distinction in Prof. Porter's MOOC, this will be your next
chance to become eligible for the next Capstone project course
(see FAQ item #11). The other MOOCs in the Specialization will most likely be offered again in the Spring of 2015, though we may split them up into smaller MOOCs focusing on targeted topics related to (1) Java Concurrency, (2) Android Concurrency and Communication, (3) Android and Cloud Security, and (4) Cloud Computing. As soon as these plans are finalized we'll post
an announcement with the start dates and detailed schedule.
</p>
</li>
<li> <b>How long will the course material be available online
after the MOOC ends?</b>
<P>We plan to keep the videos, presentations, discussion forum
postings and responses, etc. available indefinitely. Future offerings of the MOOC will use different locations for the videos and source code, so the existing material should still be available at the existing locations.
</p>
</li>
<li> <b>Where is the source code that corresponds to the pathnames
embedded in the slides shown in the videos?</b>
<p>All the Android source code referenced by the pathnames in
the slides shown in the videos is available from <a
href="http://source.android.com/">here</a> (likewise, just the
relevant parts of the Android 4.0 code that we'll be using are
available from <a
href="https://class.coursera.org/posa-002/wiki/Source_Code_By_Week"
title="Link:
https://class.coursera.org/posa-002/wiki/Source_Code_By_Week">https://class.coursera.org/posa-002/wiki/Source_Code_By_Week</a>). If
you download this source code to your computer the pathnames
will be relative to the top-level source directory and
typically start with the bionic, dalvik, frameworks, libcore,
or packages pathname prefixes. The source code shown for more
examples is based on Android 4.0, which is the so-called "Ice
Cream Sandwich" release. The code we examine, however, should
be largely the same in later versions of Android, as well.
</p>
</li>
<li><b>Will there be much flexibility in the schedule of deadlines
for programming assignments in the POSA MOOC?</b>
<p>There will be no flexibility in the schedule or partial credit for the programming assignments since
this causes chaos with the peer grading system and greatly
increases the load on the course staff. The "course staff" is
very small (just Doug Schmidt and Jules White), so we're
unlikely to have enough spare time to keep track of flexible
deadlines. It's possible to miss the deadline for a programming assignment and still achieve a "Statement of Accomplishment with Distinction," as discussed <A HREF="https://class.coursera.org/posa-002/wiki/SoA">here</a>. However, students who unable to do the assignments in
the allotted time frame should consider "auditing" the POSA
MOOC for this offering and then take it again when it's
offered again in the future. Please see item #25 in the FAQ at
<a
href="http://www.coursera.org/course/posa">http://www.coursera.org/course/posa</a>
for more thoughts on if/when these MOOCs may be offered again.
</p>
</li>
<li><b>How closely aligned will the
programming assignments be between MOOCs in the MoCCA
Specialization?</b>
<p>A project in each MOOC in the
MoCCA Specialization will involve adding capabilities to the
iRemember app. The instructors for all the MOOCs are working
together to ensure the iRemember project is properly aligned,
though it won't be necessary to have completed the previous
iRemember project(s) in a given MOOC. Moreover, the other
programming assignments in their MOOCs will reflect the focus
of their respective MOOCs since (1) the topics are largely
different in each MOOC and (2) there's no requirement that
students must take the MOOCs in a particular sequence, so
inter-MOOC dependencies will be minimized.
</p>
</li>
<li><b>How will the programming assignments be submitted and
assessed?</b>
<p>By Monday of each week for the first eight weeks (starting with Week 1) a
programming assignment will be released via <a
href="https://github.com/douglascraigschmidt/POSA-14/tree/master/assignments">GitHub</a> (we are
also releasing previews of the assignments on GitHub as we finish them. If you don't see an
assignment posted on GitHub yet it's because we're still working on it). Every assignment
will be due exactly two weeks from when it is released. Since we don't have the time or staffing
resources to create entirely auto-graded programming assignments, we'll use the
following hybrid assessment method for most of the assignments:
</p>
<ul>
<li><p>Auto-assessments, which will be performed via automated
JUnit or Robotium regression tests supplied with each programming
assignment. Students can run these regression tests locally on
their computers to ensure their solutions work "correctly" prior
to submitting them. Naturally, passing these tests doesn't guarantee a 100% correct
solution since it's beyond the capabilities of JUnit or Robotium to
ensure properties of concurrent programs. </p> </li>
<li><p>Peer assessment, which will involve having five other students in the MOOC
compile/run the automated JUnit regression tests on the submitted solutions to
ensure that the solution actually produces the expected output (i.e., isn't "faked") and
to check other properties of a correct solution that may not be correctly assessed by the
automated regression tests, which aren't always 100% accurate for concurrent programs.</p></li>
</ul>
<p>A project will involve adding
capabilities to the iRemember app started in Dr. Porter's
MOOC; it will likely be entirely peer-graded unless we get
volunteers to develop suitable JUnit regression tests for it.
As the assignments are released (and prior to their due date)
we'll use the Coursera <a
href="https://class.coursera.org/posa-002/human_grading">Peer
Assessment mechanism</a> to do the actual submissions.
Previews of the programming assignments are available at this
<a
href="https://github.com/douglascraigschmidt/POSA-14/">GitHub
repository</a>, though there may be some changes to the
assignments and skeleton code before they are officially
released through the Peer Assignment page at the beginning of each week. As long as you're using Git correctly you should have no problems merging these changes into your local copies. Once the assignments are officially released, however, the code won't change any more (unless a showstopper bug is found).
</p>
</li>
<li><b>Will the links in the MOOC lecture videos be made clickable
and/or consolidated into a single convenient location?</b>
<p>Students in the POSA MOOC are crowd-sourcing the links from
all the lecture slides and adding them to the <a
href="https://share.coursera.org/wiki/index.php/posa-002:Main">POSA
wiki</a>, so please contribute to this effort. All the lecture
slides will be available in PDF form after the videos have
been uploaded to the Coursera <a
href="http://www.coursera.org/course/posa/">POSA</a> MOOC
website each week, so you can also access the links that
way. Note that the "Introduction" videos have no associated
PDF files.
</p>
</li>
<li><b>Where are good sources of tutorials and
examples for Java and Android concurrency
mechanisms?</b>
<p>Concurrency is not an easy topic to master, so students
should leverage multiple sources of learning. Nearly every
video in Section 1 (and beyond) has code fragments straight
out of Android, all of which is available from <a
href="http://source.android.com/" title="Link:
http://source.android.com/">source.android.com</a> or just the
relevant parts of the Android 4.0 code we use are available
from <a
href="https://class.coursera.org/posa-002/wiki/Source_Code_By_Week">here</a>. The
Java code from the <a
href="http://developer.android.com/reference/java/util/concurrent/package-summary.html">java.util.concurrent</a>
package in libcore/luni/src/main/java/java/util/concurrent is
an excellent way to see how Java concurrency mechanisms
covered in the POSA MOOC videos are developed and used in
practice. We've developed complete example programs for the
MOOC that are available <a
href="https://github.com/douglascraigschmidt/POSA-14/tree/master/ex">here</a>. There's
also example code in the assignments available <a
href="https://github.com/douglascraigschmidt/POSA-14/tree/master/assignments">here</a>,
though you'll need to fill in the "TODO" comments to get them
to work. In addition, useful tutorials on Java concurrency
mechanisms appear <a
href="http://docs.oracle.com/javase/tutorial/essential/concurrency">here</a>
and <a
href="http://tutorials.jenkov.com/java-util-concurrent/">here</a>. Finally,
consider reading the books listed in the "Suggested Readings"
Section of the <a href="http://www.coursera.org/course/posa"
title="Link: http://www.coursera.org/course/posa">POSA MOOC
page</a>.
</p>
</li>
<li><b>How can students help improve the
form and content of the video lectures?</b>
<p>Please leave your constructive comments and suggestions for
improving the content of the video lectures in the discussion
forum entitled <a
href="https://class.coursera.org/posa-002/forum/list?forum_id=10008">Suggestions
for Improving the Video Lectures</a>. The most useful
suggestions are ones that help us improve the technical
accuracy and quality of the material, rather than just
commenting on the presentation format and style. Although
there may not be time to address these comments for this
offering of the POSA MOOC, we'll consider them for future
offerings. In addition, these suggestions will help to improve
the LiveLessons versions of these lectures that will be
created during the summer of 2014. Please see <a
href="http://www.dre.vanderbilt.edu/~schmidt/LiveLessons/">this
link</a> for more information about the LiveLessons series,
including the first set of videos on <a
href="http://techbus.safaribooksonline.com/video/programming/java/9780133489989?bookview=overview">Design
Patterns with Java</a>. Also, if you spot any typos or
problems with subtitles for the videos please note them <a
href="https://class.coursera.org/posa-002/forum/list?forum_id=10018">here</a>
so we can fix them.
</p>
</li>
<li><b>How can students keep
informed about important due dates for assignments?</b>
<p>Once the 2014 POSA MOOC has officially begun (in mid-May),
there will be a calendar of events listing the due dates,
etc. Likewise, reminders will be posted periodically to the
Announcements page (and thus disseminated via email to all
enrolled students). Ultimately, however, students are
responsible for keeping track of the deadlines and procedures
related to properly submitting the MOOC assignments. Given
the large number of students enrolled in the MOOC, there will
be little/no support for individual extensions or special
handling of late or improperly submitted solutions to the
assignments.
</p>
</li>
<li><b>How many hours per week will be required for the POSA
MOOC?</b>
<p>There's no 100% accurate way to estimate how long any given
student will require to watch the videos and complete the
quizzes and assignments each week since each person has
different background, aptitude, motivation, learning style,
etc. Moreover, some students are doing the "normal track" and
others are doing the "distinction track". With that caveat in
mind, please see <a
href="https://class.coursera.org/posa-002/wiki/SoA">this
link</a> for rough estimates of how much time <i>may</i> be
required, depending on which track a student is
doing. Concurrency is not an easy topic to master, however, so
if doing the material assigned for the "distinction track"
consumes an excessive amount of time please consider switching
to the "normal track",l which requires much less work since
there are no programming assignments.
</p>
</li>
<li><b>What are some consequences of the "massiveness" of a MOOC?</b>
<p>The massive number of students in the POSA MOOC (50,000+)
impacts some aspects of the course that differentiate it from
a traditional face-to-face courses, such as the courses the
instructors teach at Vanderbilt and the University of
Maryland. In particular:
</p>
<ul>
<li><p>The POSA MOOC course staff will not be able to provide
individual feedback on student assignments, though we will
present our solutions to the assignments in the weekly
"virtual office hours" (see <a
href="http://www.dre.vanderbilt.edu/~schmidt/PDF/POSA-MOOC.pdf">this
paper</a> for more information on virtual office hours). If
you run into problems feel free to post your buggy code to the
appropriate <a
href="https://class.coursera.org/posa-002/forum/list?forum_id=3">assignment
discussion forum</a> so that other students can provide you
tips on fixing your bugs. Please don't post working solutions
to the discussion forum, however, since that violates the
Coursera Code of Conduct. </p></li>
<li><p>Some things will inevitably go awry, e.g., peer graders
will undoubtedly not follow the rubric correctly, unit tests
will need to change, students will forget to add their source
code when they submit their solutions, important deadlines
will be missed due to unforeseen circumstances, assignments
will be modified after they are released, etc.</li></ul><p>Due
to the massive number of students--coupled with the very
limited course staff--it's unfortunately sometimes the case
that the instructors won't be able to "make it right" in a
manner that makes everyone happy. In these situations, our
goal is to maximize the opportunity for as many students as
possible to gain access to a world-class education. Other
considerations (such as consistency, fairness, and
accountability) are also relevant, but our first priority is
to help empower students with an education that will improve
their lives.
</p>
</li>
<li><b>How do the CS 282 videos relate to the 2014 POSA MOOC
videos?</b>
<p>The ~20 hours videos from the Vanderbilt course <a
href="http://www.dre.vanderbilt.edu/~schmidt/cs282/">CS 282:
Systems Programming with Android</a> available on the YouTube
playlist at <a
href="http://www.youtube.com/watch?v=lHbIwoevePE&list=PLZ9NgFYEMxp50tvT8806xllaCbd31DpDy"
target="">http://www.youtube.com/watch?v=lHbIwoevePE&list=PLZ9NgFYEMxp50tvT8806xllaCbd31DpDy</a>
overlap with some of the concurrency-related material
presented in the 2014 POSA MOOC. However, these YouTube videos
are not a substitute for the 2014 POSA MOOC videos, which will
be aligned with the programming assignments and topics covered
in the MOOC (and which are also much higher quality and more
technically accurate). The CS 282 videos are still a valuable
resource to supplement the MOOC videos since they cover some
topics, such as the Android Development Environment,
Activities, certain local Inter-Process Communication (IPC)
mechanisms, etc., that don't appear in the 2014 POSA
MOOC.
</p>
</li>
<li><b>What are "Virtual Office Hours"?</b>
<p>"Virtual Office Hours" provide an opportunity for instructors
to interact in real-time with students once a week on
questions about material covered in the video lectures,
quizzes, and programming assignments. Google Hangout on the
Air and YouTube (see the <a
href="https://www.youtube.com/playlist?list=PLZ9NgFYEMxp4IcAmAvXPU794VydFkzKeF"
title="Link:
https://www.youtube.com/playlist?list=PLZ9NgFYEMxp4IcAmAvXPU794VydFkzKeF">Virtual
Office Hours videos</a> from the 2013 POSA MOOC) are used as
the means to engage with students. Google Handout
automatically records the office hour discussions, which are
then uploaded to the POSA MOOC website so students can view
them offline if they can't make it to the live
events. Likewise, any questions post to the discussion forum
on <a
href="https://class.coursera.org/posa-002/forum/list?forum_id=10013"
title="Link:
https://class.coursera.org/posa-002/forum/list?forum_id=10013">Virtual
Office Hours</a> will be answered during the session.
</p>
</li>
<li><b>How much of the Android software stack is covered by the
MoCCA Specialization?</b>
<p>The MOOCs that comprise the <a
href="https://www.coursera.org/specialization/mobilecloudcomputing/2">MoCCA
Specialization</a> cover a wide range of Android and Cloud
Computing middleware and application topics, as summarized in
<a href="https://www.youtube.com/watch?v=JSkvChTSanM">this
overview video</a>. However, this Specialization does not
(yet) cover the <a
href="https://www.facebook.com/note.php?note_id=461505383919">full
stack</a> of Android and Cloud Computing software. In
particular, the Android Linux kernel, user-level device
drivers, native development kit, Dalvik virtual machine, and
C/C++-based library and service layers are not covered.in
detail. Likewise, certain Android middleware topics (such as
local inter-process communication mechanisms, network
programming, Bound and Unbound Services, and Content
Providers) are only touched upon briefly. Future offering of
the MoCCA Specialization will (hopefully) provide more
coverage of these topics, as time and resources permit.
</p>
</li>
<li><b>What's the best way to watch the videos to avoid being
distracted by the presenter's style and/or call-outs to
embedded URLs?</b>
<p>The particular style for the video lectures was choose to (1)
mimic the experience of a face-to-face lecture class and (2)
minimize the amount of time spent post-producing the
videos. The frequent call-outs to embedded URLs is motivated
by the reasons outlined in FAQ item #6 above and to simplify
the post-production process (for which we have very limited
resources). However, some students find this style distracting
during the videos. The easiest way to resolve the presenter
distraction is to simply move the media player window so that
only the slides are visible. Ultimately, better solution will
materialize in the LiveLessons version of this material that
we'll create during the summer of 2014, which will be
professionally edited by Pearson, so if you're a Safari online
book club member you'll be able to watch this material without
distractions. More information (and examples of the
presentation format) are available at the <a
href="http://www.dre.vanderbilt.edu/~schmidt/LiveLessons/">Design
Patterns with Java</a> website..
</p>
</li>
<li><b>Can students use public source code repositories to store
their solutions to the programming assignments?</b>
<p>Please do not use public source code repositories (e.g., the
freely available GitHub accounts) to store your solutions to
the programming assignments. Publically available repositories
encourage students to copy each others work, which is a
violation fo the Coursera code of conduct that does not allow
students to share work unless explicitly instructed by course
policies.
</p>
</li>
<li><b>What are some good techniques,
tools, and methods for visualizing, analyzing, and debugging
concurrent Java programs.</b>
<p>Debugging concurrent programs is hard due to a variety of
accidental and inherent complexities discussed in the Section
1: Module 1 of the <a
href="https://class.coursera.org/posa-002/wiki/Video_Lectures">video
lectures</a>. There are many resources available to help
students debug their concurrent programs, some of which are
free, some of which aren't, and some are a mixture of free and
non-free.The <a
href="http://docs.oracle.com/javase/realtime/TSV/JavaRTS-TSV.html#introduction">Thread
Scheduling Visualizer (TSV)</a> is a set of tools that provide
an easy way to record and visualize thread scheduling. The <a
href="http://www.fluid.cs.cmu.edu:8080/Fluid">Fluid
project</a> provides a set of Eclipse tools for programmers to
analyze, assure, and evolve multi-threaded Java programs. Some
tips on debugging multi-threaded program are available <a
href="http://www.drdobbs.com/cpp/multithreaded-debugging-techniques/199200938">here</a>.
</p>
</li>
<li><b>Where is the source code for examples and assignment
solutions from the Vanderbilt <a href="http://www.dre.vanderbilt.edu/~schmidt/cs282/"><b>CS
282: Systems Programming for Android</a> and <a
href="http://www.dre.vanderbilt.edu/~schmidt/cs251/">CS
251: Intermediate Software Design</a>
courses?</b> <p>The <a
href="http://www.dre.vanderbilt.edu/~schmidt/LiveLessons/#JavaSourceCode">source
code</a> for the Java variant of the CS 251 "expression tree
processing application" is available as part of the
supplemental material for the Pearson LiveLessons courses on
<a
href="http://www.dre.vanderbilt.edu/~schmidt/LiveLessons/">Design
Patterns with Java</a>. The ThreadedDownloads application
example from Section 1: Module 3 is available in <a
href="https://github.com/douglascraigschmidt/POSA-14/tree/master/ex/ThreadedDownload"
title="Link:
https://github.com/douglascraigschmidt/POSA-14/tree/master/ex/ThreadedDownload">GitHub</a>
as part of the 2014 POSA MOOC. Other assignment solutions are
not available since they form part of the work expected from
Vanderbilt students who take these courses.
</p>
</li>
<li><b>How much of a focus on patterns and frameworks will there
be in this MOOC?</b>
<p>Patterns and framework provide the foundation for much of the
material in this course. There is a short introduction to
patterns and frameworks in Section 0 and several modules in
Section 1 will focus on POSA and GoF patterns and frameworks
applied in Android. Many other videos and other resources
related to patterns and frameworks are also available <a
href="http://www.dre.vanderbilt.edu/~schmidt/DigitalLearning/">here</a>.
</p>
</li>
<li><b>How can we convince our colleagues and management of the
value of patterns and frameworks in practice?</b>
<p>As with most issues associated with IT, there's no single
"silver bullet" that will convince managers and executives of
the "return on investment" (ROI) value of software techniques,
tools, and methods (TTMs). Instead, what's required is a
long-term commitment (at both the individual and
organizational levels) to invest in TTMs that provide tangible
payoffs wrt things that matter to managers/executives and
(arguably more importantly) to customers/sponsors). The
pattern-oriented and framework-oriented TTMs presented through
this MOOC are a step in the right direction -- after all,
these TTMs underlie much of Android and Java, which would not
be as powerful and pervasive without these TTMs. Ultimately,
each individual and organization needs to devise a strategy
for demonstrating the tangible benefits of patterns and
frameworks to the powers-that-be in terms of ROI that they
value, such as reducing software defect rates, enhancing
productivity across the lifecycle (rather than just "hacking
it up and shipping it out"), and increasing the resilience
(e.g., to failures and cyber-attacks).
</p>
</li>
<li><b>Why do the assignments start with 0, but the weeks start
with 1?</b>
<p>The assignments use Java/C/C++ range semantics, whereas the
weeks use calendar range semantics. If this distinction
doesn't make sense, you may be a recovering Pascal or Ada
programmer ;-)
</p>
</li>
<li><b>Why are there lecture
videos on YouTube and on the POSA Coursera website?</b>
<p>The videos on YouTube and the videos on the Coursera site
should be identical, but all videos must be approved by
Vanderbilt before they can be uploaded and published on the
POSA Coursera website. We therefore release them first on
YouTube as we complete them so that interested students can
preview them and provide feedback so that any mistakes can be
fixed before they are released to the POSA Coursera website.
</p>
</li>
<li><b>How can we fix the warning "There are no JREs installed in
the workspace that are strictly compatible with this
environment"?</b>
<p>First, check what version of JRE you have installed or you
have set as an environment variable JAVA_HOME or JAVA_JRE. If
you find out that you have installed java version 7 then you
right click on the project folder in Eclipse. Then
Properties->Java Build Path -> Libraries. You click on
JRE System Library and then the button Edit where you select
Execution Environment similar to the one you have installed on
your PC. Although you are welcome to use whatever version of
Java you'd like for your programming assignments, you need to
make sure that whatever you submit to be graded works with
Java version 6 since otherwise your solution may not work and
the grader will deduct many points.
</p>
</li>
<li><b>The introductory assignments are too easy - are there other
programs we can write to get experience with more advanced
Android concurrency and communication mechansisms?</b>
<p>If you get bored with these assignments and want
to try writing more interesting programs, you might try writing the solutions without using the provided skeletons. If that's still to easy, please see the <a
href="http://www.dre.vanderbilt.edu/~schmidt/cs282/"
title="Link: http://www.dre.vanderbilt.edu/~schmidt/cs282/">CS
282</a> programming assignments available <a
href="http://www.dre.vanderbilt.edu/~schmidt/cs282/index.html#assignments">here</a>. We'll
cover some of these topics later in the MOOC, but you're
welcome to check this stuff out now.
</p>
</li>
<li><b>Since many of the assignments have been posted to GitHub
can we work on them prior to their official release?</b>
<p>You're welcome to work ahead on these assignments, which is
one of the reasons why we've put manhy of them out early.
However, some things are likely to change based on a number of
factors, such as feedback from students, improved JUnit tests,
bug fixes, etc. Although it's unlikely you'll need to do a
wholesale rewrite of your solution (mostly the JUnit tests
should get more thorough) until the assignment is officially
posted via the "Programming Assignments and Assessments" tab
you'll need to be prepare for some changes.
</p>
</li>
<li><b>Where is more information available on Android
internals?</b>
<p>It's worthwhile watching videos on Android's <a
href="https://sites.google.com/site/io/anatomy--physiology-of-an-android">anatomy
and physiology</a> and <a
href="https://sites.google.com/site/io/dalvik-vm-internals"
title="Link:
https://sites.google.com/site/io/dalvik-vm-internals">Dalvik
Virtual Machine</a>. Although these are from 2008 they provide
a good overview of how Android works internally.
</p>
</li>
<li><b>How can I prepare in advance for the upcoming
Programming Cloud Services for Android Handheld Systems
course?</b>
<p>The course will cover a number of topics on HTTP
communication in Android and HTTP-based cloud services with
the Java Spring Framework. Before you start preparing for the
cloud course, ensure that you understand the concurrency
material from the POSA course, particularly AsyncTasks and
Handlers. Some helpful resources to get a jumpstart on the
cloud course are:
<ul>
<li><p>Spring's Building a RESTful Web Service guide (<a
href="http://spring.io/guides/gs/rest-service"
title="Link:
http://spring.io/guides/gs/rest-service">http://spring.io/guides/gs/rest-service</a>)
</p>
</li>
<li><p>Android's Connecting to the Network guide (<a
href="http://developer.android.com/training/basics/network-ops/connecting.html"
title="Link:
http://developer.android.com/training/basics/network-ops/connecting.html">http://developer.android.com/training/basics/network-ops/connecting.html</a>)</p></li>
<li><p>The basic components of HTTP (<a
href="http://www.jmarshall.com/easy/http/" title="Link:
http://www.jmarshall.com/easy/http/">http://www.jmarshall.com/easy/http/</a>)
</p>
</li>
<li><p>For other more advanced topics that are both within and
beyond the scope of the cloud course, Spring has a
comprehensive set of guides (<a href="http://spring.io/guides"
title="Link:
http://spring.io/guides">http://spring.io/guides</a>)
</p>
</li>
</ul>
</li>
<li><b>What resources can be used for the weekly quizzes?</b>
<p>You are welcome to use videos or presentation material when
answering the weekly quiz questions.
</p>
</li>
<li><b>Why are there two versions of week-1-assignment-0?</b>
<p>The official version is the one at <a
href="https://github.com/douglascraigschmidt/POSA-14/tree/master/assignments/week-1-assignment-0"
title="Link:
https://github.com/douglascraigschmidt/POSA-14/tree/master/assignments/week-1-assignment-0">https://github.com/douglascraigschmidt/POSA-14/tree/master/assignments/week-1-assignment-0</a>
is the "official" version that will be used for peer
assessments. The one at <a
href="https://github.com/douglascraigschmidt/POSA-14/tree/master/assignments/week-1-assignment-0-v2"
title="Link:
https://github.com/douglascraigschmidt/POSA-14/tree/master/assignments/week-1-assignment-0-v2">https://github.com/douglascraigschmidt/POSA-14/tree/master/assignments/week-1-assignment-0-v2</a>
provides better diagnostics and has a cleaner design that uses
the Template Method pattern to decouple the test
infrastructure from the student-supplied code. However, it's
not the official version that will be peer graded and is
provided solely as a way for students to understand better how
concurrency and Java Threads work.
</p>
</li>
<li><b>Can I take Programming Cloud Services for Android Handheld
Systems without taking Programming Mobile Services for Android
Handheld Systems?</b>
<p>It is possible to take the cloud course without the mobile
services course. However, the cloud course uses the
concurrency concepts that are introduced in the mobile
services course. If you take both courses, you will have a
much stronger understanding of the material and be far less
likely to have trouble in the cloud course. We highly
encourage students to take both courses.
</p>
</li>
<li><b>Which videos have in-video quizzes?</b>
<p>All "non-introductory" videos have in-video quizzes, which
pop up periodically (typically prior to the "Summary"
segments) and ask students questions about what they've been
watching. All of Section 0 and the intros to each Section or
Module are considered "introductory" videos. In-quiz videos
only appear if you stream the videos from the Coursera server,
but don't appear if you download the videos to your local
computer first.
</p>
</li>
<li><b>What are some examples of Android applications and services
developed using the concurrency and communication mechanisms
covered in this MOOC?</b>
<p>Watch the videos that are available at <a
href="https://class.coursera.org/posa-002/lecture" target=""
title="Link:
https://class.coursera.org/posa-002/lecture">https://class.coursera.org/posa-002/lecture</a>
as well as the previews of forthcoming videos that are
available at <a
href="https://www.youtube.com/playlist?list=PLZ9NgFYEMxp4tbiFYip6tDNIEBRUDyPQK"
title="Link:
https://www.youtube.com/playlist?list=PLZ9NgFYEMxp4tbiFYip6tDNIEBRUDyPQK">https://www.youtube.com/playlist?list=PLZ9NgFYEMxp4tbiFYip6tDNIEBRUDyPQK</a>
for many example concurrent applications and services from the
Android source code itself, as well as sample applications we
developed for this MOOC. Moreover, if you download the Android
source code from <a href="http://source.android.com/"
title="Link:
http://source.android.com/">http://source.android.com</a> and
look in the packages/apps/ directory you'll see dozens more
Android applications, most of which use the concurrency and
communication frameworks and mechanisms discussed in this
MOOC.
</p>
</li>
<li><b>What is the difference between the "assignments" and the
"grading-drivers" directories on GitHub?</b>
<p>The "assignments" directory on GitHub (at <a
href="https://github.com/douglascraigschmidt/POSA-14/tree/master/assignments"
title="Link:
https://github.com/douglascraigschmidt/POSA-14/tree/master/assignments">https://github.com/douglascraigschmidt/POSA-14/tree/master/assignments</a>)
contains the skeletons that are used by students who complete
the skeletons and submit their solutions for peer
assessment. The "grading-drivers" directory on GitHub (at <a
href="https://github.com/douglascraigschmidt/POSA-14/tree/master/grading-drivers"
title="Link:
https://github.com/douglascraigschmidt/POSA-14/tree/master/grading-drivers">https://github.com/douglascraigschmidt/POSA-14/tree/master/grading-drivers</a>)
is used by peer assessors to evaluate the submissions. This
separation enables us to improve the JUnit tests used for
evaluating submissions without changing the skeletons used by
students to write their solutions.
</p>
</li>
<li><b>What can we do if the audio is out of sync with the video
stream when viewed from the course website on Coursera?</b>
<p>You might try playing the videos at a lower resolution if
your browser supports this or downloading the to your computer
and watching them locally. Apparently, the videos on my <a
href="https://www.youtube.com/playlist?list=PLZ9NgFYEMxp4tbiFYip6tDNIEBRUDyPQK&feature=mh_lolz"
title="Link:
https://www.youtube.com/playlist?list=PLZ9NgFYEMxp4tbiFYip6tDNIEBRUDyPQK&feature=mh_lolz">YouTube
playlist</a> are synchronized better, so you might try watching
them (they are identical to what's on the Coursera website). If
all else fails, consider applying the suggestions in FAQ item
#40 above.
</P>
</li>
<li><b>What is an "Optional Lecture"?</b>
<p>Certain lectures are not directly related to the topics of
concurrency, communication, and security, but provide
additional information that may be useful to readers who want
to know more about topics like frameworks, patterns, and
software product lines. These lectures are marked optional,
which means that they don't "quizzified" and questions
pertaining to them won't appear on a weekly quiz. Feel free
to watch them if you're interested and skip them if you're
not.
</p>
</li>