Skip to content
douglascraigschmidt edited this page Jul 26, 2014 · 40 revisions
    <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&amp;feature=mh_lolz"
        title="Link:
        https://www.youtube.com/playlist?list=PLZ9NgFYEMxp4tbiFYip6tDNIEBRUDyPQK&amp;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&amp;list=PLZ9NgFYEMxp50tvT8806xllaCbd31DpDy"
        target="">http://www.youtube.com/watch?v=lHbIwoevePE&amp;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-&gt;Java Build Path -&gt; 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&amp;feature=mh_lolz"
      title="Link:
      https://www.youtube.com/playlist?list=PLZ9NgFYEMxp4tbiFYip6tDNIEBRUDyPQK&amp;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>
    
  1. 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).

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. What are rules for choosing the appropriate Android Context?

    See the discussion for an overview of which Contexts to choose for different situations.

  9. 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.

  10. 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.

Clone this wiki locally