Skip to content
douglascraigschmidt edited this page May 31, 2016 · 129 revisions

Table of Contents

  1. What are the course learning objectives?
  2. What is the schedule of the MOOCs?
  3. What is the format of the MOOCs?
  4. How do these MOOCs compare/contrast with courses at Vanderbilt?
  5. What are your assumptions about--and expectations for--learners taking this MOOC?
  6. What is the most effective way to learn material covered in the course and to successfully complete the programming assignments?
  7. Can learners take this course if they have little/no prior experience programming Android and/or Java?
  8. Why are there so many URL links embedded at the bottom of the slides?
  9. What is the teaching staff policy for monitoring and answering discussion forum threads and questions?
  10. How many and what types of quizzes and programming assignments will there be in this MOOC?
  11. How can learners understand and learn the material in the videos most effectively?
  12. When will the final grades and certificates be available after the MOOC ends?
  13. What are "Virtual Office Hours"?
  14. Will there be a Statement of Accomplishment or a "with distinction" certificate for learners who complete this class?
  15. Who is eligible to take the Specialization Capstone project course?
  16. Can the software examples shown in this MOOC be used by learners for the programming assignments and/or other projects?
  17. Why are fields in the example code and assignments prefixed with 'm'?
  18. Is it necessary to take the MOOCs in the Specialization in a particular order?
  19. Can Eclipse be used as the development environment for the MOOCs?
  20. Is there a required textbook?
  21. Where can learners learn about how to configure their Android and Java environment to run the examples and complete the programming assignments?
  22. Where can learners learn more about patterns and frameworks?
  23. Which versions of software are required for the MOOCs
  24. Can learners use programming language [X] for the course?
  25. Where are the slides and source code presented in the videos and the code skeletons provided for the programming assignments?
  26. Is it necessary to watch the lecture videos prior to doing the programming assignments?
  27. Will the source code for the programming assignment solutions be made available?
  28. Can 3rd-party concurrency libraries or frameworks be used for the programming assignments?
  29. How can learners get help if their solutions to the programming assignments aren't working?
  30. How long will the course material be available online after the MOOC ends?
  31. Where is the source code that corresponds to the pathnames embedded in the slides shown in the videos?
  32. Will there be much flexibility in the schedule of deadlines for programming assignments in these MOOCs?
  33. How closely aligned will the programming assignments be between MOOCs in the MoCCA Specialization?
  34. How will the programming assignments be obtained, submitted, and assessed?
  35. Will the links in the MOOC lecture videos be made clickable and/or consolidated into a single convenient location?
  36. Can learners do extra assignments to improve their grade?
  37. How can learners keep informed about important due dates for assignments?
  38. How many hours per week will be required for these MOOCs?
  39. What are some consequences of the "massiveness" of a MOOC?
  40. How much of the Android software stack is covered by the this Specialization?
  41. Can learners use public source code repositories to store their solutions to the programming assignments?
  42. Who will define the projects implemented in the Capstone Projects Course?
  43. Which videos have in-video quizzes?
  44. How much of a focus on patterns and frameworks will there be in this MOOC?
  45. What resources can be used for the weekly quizzes?
  46. Are there other programs learners can write to get experience with more advanced Android concurrency and communication mechanisms if they find the programming assignments too easy?
  47. Where is more information available on Android internals?
  48. What can be done if the audio is out of sync with the video stream when viewed from the course website on Coursera?
  49. What is the best way to handle null references in Java?
  50. What are rules for choosing the appropriate Android Context?
  51. How can we convince our colleagues and management of the value of patterns and frameworks in practice?
  52. Is there a way to get the Android Virtual Device (AVD) emulator to run faster?
  53. How long does it take for the post-processed videos, subtitles, and downloadable MP4 videos to appear for live Virtual Office Hours?
  54. What is a "hook method"?
  55. What is the meaning of the "Reference:" line in the auto-grader output?
  56. Where can we learn more about the "Mobile Cloud Computing with Android" Specialization?
  57. What should I do if the overview lessons on Java in Module 1 are too conceptual to understand?
  58. What field should I use to print a string to the user in skeleton code?
  59. Why are my submissions to the auto-grader failing?
  60. What needs to be done to pass the MOOCs?
  61. Why am I getting weird errors from Android Studio?
  62. Can we access the quizzes and programming assignments if we're just auditing the MOOCs?
  63. What are optional peer-graded assignments?
  64. What happens if I can't complete all the programming assignments by the stated deadlines?
  65. I submitted a long time ago so why have I received only a few "feedback on my submission" notices?
  66. What does it mean when the auto-grader reports "Compile Error: Error 37"?

FAQ

  1. What are the course learning objectives?

    Upon completing this course, learners should be able to:

    • Understand the key object-oriented features needed to program Java for Android

    • Know how to install Android Studio and apply it and other tools to develop & debug Android Apps.

    • Know where to find additional sources of information on how to program mobile apps on Android handheld systems.

  2. What is the schedule of the MOOCs?

These MOOCs run for 4 weeks. We will hold weekly "Virtual Office Hours" (VOH), which will be held later in the week, typically starting at 11am eastern time via Google Hangout (the exact times will be posted to the Announcements page of the MOOC). In the VOH sessions we'll answer questions from learners and lead impromptu discussions with learners live via Google Hangout and YouTube. VOHs will continue until the end of the MOOC (i.e., even after the Live Lectures are done) so we can present our solutions to the assignments and learners can ask questions. See FAQ item #13 for more information on VOH.

 There will be periodic programming assignments that will have a deadline, which will be clearly marked on the MOOC websites and in the course calendar available by clicking on the calendar icon next to the "Upcoming Deadlines" label. This calendar is automatically updated as the material is released.  The programming assignments will be based on material covered in both the live and pre-recorded lectures (but not the Supplemental lectures discussed in [FAQ item #3](#3)).

 The programming assignments will be available online once the MOOC starts. Please see [FAQ item #34](#34) to learn how the programming assignments will be obtained, submitted, and assessed. Assignments will be due at least two weeks from when they are released. Likewise, there will be weekly quizzes, released by the middle of each week, though their due dates will all be the last day of class so you can take them as time permits. There won't be any "late dates" for quizzes since they are due the last day of class.
  1. What is the Format of the MOOCs?

    These MOOCs use a combination of recorded lessons and live Virtual Office Hours (VOH). To master the material and succeed with the programming assignments we recommend watching both the recorded lessons and the VOH sessions.

  2. How do these MOOCs compare/contrast with courses at Vanderbilt?

    The material in these MOOCs are based on freshmen and sophomore-level undergraduate courses taught at Vanderbilt, such as the CS 101 and CS 251 courses, which focus 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, Android Studio, and Git). Learners in the Vanderbilt courses are expected to be capable with learning with Java, Android Studio, and source code control systems and capable of mastering new material without significant hand-holding by the teaching staff. Naturally, the quizzes, programming assignments, and degree of feedback for the Vanderbilt courses are somewhat different from the MOOCs since the Vanderbilt courses have many fewer learners (instead of ~20,000 learners), which enables significantly more personalized guidance and in-depth assessments from the teaching staff that can't be replicated in a MOOC (yet).

  3. What are your assumptions about--and expectations for--learners taking this MOOC?

    As mentioned in FAQ item #4, this MOOC is based on material we teach to undergraduate learners at Vanderbilt. This MOOC is intended for self-motivated learners who

    • Have basic computer literacy skills, such as knowing how to send and receive emails, browse the web, participate in discussion forums, and upload and download files on websites
    • Want to understand both the concepts and practice of developing mobile software applications and services
    • Are curious about how the Android software stack itself is designed and implemented
    • Are willing/able to carefully read/follow the instructions in the course assignments and announcements.

    Learners 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 learners learn techniques and methods for finding solutions, not simply spoon-feeding the solutions . Moreover, this MOOC covers certain topics associated with engineering quality mobile software development that may not be of interest to learners who just want training on the Android APIs, so for those learners we recommend others sources, such as the Android Application Development Tutorials on YouTube. Likewise, learners 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 FAQ item #39.

  4. What is the most effective way to learn material covered in the course and to successfully complete the programming assignments?

    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) suggested 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 #13 on this topic).

  5. Can learners take this course if they have little/no prior experience programming Android and/or Java?

    Our Specialization does not assume that learners have prior experience programming in Java and or Android apps. We'll cover these topics starting in the first MOOC in the Specialization. If you'd like to gain additional Java programming background you might consider taking the MOOC Java Programming: An Introduction to Software, the Java for Complete Beginners course, and/or watching my videos on Introduction to Java in the YouTube playlist for my CS251 course at Vanderbilt. Likewise, you might also benefit from the Creative, Serious and Playful Science of Android Apps MOOC, which is a novice-friendly introduction to computer science and programming Android-apps for smart-phones and tablets. We encourage you to apply the Lazy Acquisition 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!

  6. Why are there so many URL links embedded at the bottom of the slides?

    Many topics we cover in this MOOC Specialization are technically deep. Given our limited time and resource constraints, we can't possibly address all this material in a single MOOC or even a single Specialization! Yet many learners may benefit from learning more about these topics, either during or after the MOOCs. 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 learners can download from the MOOC Video Lectures pages. These links point to material on the web so that learners can read as their interests and time permits. We particularly recommend taking a look at the Java online tutorials and the Android API documentation. Following up on all the links listed in the lessons is a rewarding, albeit time consuming task. In fact, we term these videos "Lembas Lectures" since a small dose of them can keep a learner nourished (intellectually) for days! However, none of the quizzes will involve questions related to this material, so learners can read them at their leisure.

  7. What is the teaching staff policy for monitoring and answering discussion forum threads and questions?

    The teaching staff will endeavor to reply to thoughtful technical questions as time permits. Often, the responses will point to other resources (such as this FAQ or to video lectures) so that learners can learn the details of the solutions on their own, which is more effective pedagogically. Questions posted anonymously will receive little/no attention from the teaching staff since we want to get to know the learners in the MOOC so the learning environment will be more like a face-to-face course. Due to extremely limited teaching staffing resources, questions about installing or using Android Studio, Git, the Android Virtual Device emulator, debugger, etc. will need to be addressed by Community TAs and/or other learners taking this MOOC. Step-by-step instructions on how to setup an Android development environment using Java, Eclipse, and Git are available here.

    Before posting on the forums, it's important to read, understand, and follow the Coursera Forum Code of Conduct. In particular, 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 will result in learners being removed from the course.

  8. How many and what types of quizzes and programming assignments will there be in this MOOC?

There will be weekly quizzes, all of which will be auto-graded. The due dates for these quizzes will be the last day of class so you can take them as time permits. There won't be any "late dates" for quizzes since they are due the last day of class.

There will also be multiple programming assignments in each of these MOOCs. Although these assignments may vary a bit from MOOC to MOOC to keep the material fresh and relevant, they will enable you to demonstrate mastery of each Java feature we cover. Each programming assignment will be peer graded two weeks after they are released, as described in [FAQ item #34](#34). The assignments will vary for each MOOC offering. All source code examples and skeletons for the programming assignments are available in this [GitHub repository](https://github.com/douglascraigschmidt/Android-App-Development).
  1. How can learners understand and learn the material in the videos most effectively?
There is no one rate of speaking that's appropriate for all learners. For learners whose native language is not English--or for any learners 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.

After the MOOCs start 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. In addition, downloading PDF versions of the slides and reviewing them prior to watching the videos may aid with comprehension.

Learners may 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 in the [wiki]() maintained by learners.
  1. When will the final grades and certificates be available after the MOOC ends?

    The final grades and certificates are typically available 2-3 weeks after the MOOC ends. Coursera is responsible for releasing the certificates, not the MOOC teaching staff.

  2. What are "Virtual Office Hours"?

"Virtual Office Hours" (VOH) provide an opportunity for instructors to interact in real-time with learners once a week to answer questions about material covered in the video lectures, quizzes, and programming assignments. Google Hangout on the Air and YouTube are used as the means to engage with learners in VOH. All VOH sessions will be recorded, captioned, and uploaded to the Coursera website so learners can watch them at their convenience offline if they can't make it to the live VOH events. Likewise, questions post to the VOH discussion forums will be answered during the sessions. 

See [this paper](http://www.dre.vanderbilt.edu/~schmidt/PDF/POSA-MOOC.pdf) for more information on VOH. There are YouTube playlists containing VOH videos for the [2013](https://www.youtube.com/playlist?list=PLZ9NgFYEMxp4IcAmAvXPU794VydFkzKeF)and [2014](https://www.youtube.com/playlist?list=PLZ9NgFYEMxp6CV41KZwZGLHo1gD7nbH-l) POSA MOOCs.  The VOH sessions for POA 2015 and beyond are integrated into the weekly videos.
  1. Will there be a Statement of Accomplishment or a "with distinction" certificate for learners who complete this class?
No, the only documented way of receiving credit for this MOOC is via the Signature Track, where learners who achieve the stated criterial receive a "Verified Certificate." Moreover, there's only one track, i.e., there are no "normal" vs. "with distinction" tracks. If you want to be eligible to take the Capstone project course, you'll also need to follow the instructions described in the next FAQ entry below.
  1. Who is eligible to take the Specialization Capstone project course?
Like all Coursera Specializations, the Capstone project course is only available to learners who take the Signature Track for the preceding MOOCs in the Specialization. Moreover, only learners in the Signature Track who receive a "Verified Certificate" in all preceding MOOCs *prior to the start* of the Capstone project course are eligible to enroll. 
  1. Can the software examples shown in this MOOC be used by learners for the programming assignments and/or other projects?
Yes, it's fine to use any of the example code provided by the teaching staff in programming assignment solutions.  Please see the <A HREF="http://www.dre.vanderbilt.edu/~schmidt/MOOC-license.html">MOOC open-source license</A> for details on how to use the software examples shown in this MOOC in other projects.
  1. Why are fields in the example code and assignments prefixed with 'm'?

    This naming convention is used throughout all the Android source code, which is available for browsing online here or for downloading here.

  2. Is it necessary to take the MOOCs in the Specialization in a particular order?

    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. However, the material in each MOOC assumes you've mastered the material in previous MOOCs, so if you don't have this knowledge you may be lost (see FAQ item #7 about for suggestions on what you'll need to know and how to learn it). 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. Moreover, if you want to take the Capstone project course you'll ultimately need to successfully complete all the MOOC in the Specialization, as described in FAQ item #15.

  3. Can Eclipse be used as the development environment for these MOOCs?

You're welcome to use Eclipse as your development environment since the Java code skeletons we provide along with the assignment projects should work with either Eclipse or Android Studio. Moreover, you only need to upload Java source files to the Coursera peer evaluation site, so these Java files should also work fine with either Eclipse and Android Studio during the peer assessment process. Please make sure to use Android 5.1 (API version 22) with Android Studio since there seem to be bugs with the Android Studio emulator for Android 5.0\.
  1. Is there a required textbook?
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 "Suggested Reading" on the [POSA course webpage](https://www.coursera.org/course/posa) for a list of books that are closely related to the topics of the course.
  1. Where can learners learn about how to configure their Android and Java environment to run the examples and complete the programming assignments?
Programming assignments for these MOOCs will use the Android Studio environment. Instructions on how to setup the software development environment is available [here](https://class.coursera.org/posaconcurrency-003/wiki/Installing_and_Using_Eclipse_and_Git). If you're using a different development environment (such as Android Studio) or a different build tool (such as [Maven](https://code.google.com/p/maven-android-plugin/)) you'll need to enlist the help of the Community TAs and other learners on the online discussion forum.
  1. Where can learners learn more about patterns and frameworks?
The best ways to learn more about patterns and frameworks involve:
  • Reading the patterns and frameworks literature (e.g., the GoF and POSA books)
  • Reading lots of pattern- and framework-oriented software (e.g., java.utils.concurrent, Android source code, the examples from these MOOCs, etc.) and mapping the patterns from the literature to the patterns in the software
  • Writing lots of pattern-/framework-oriented software and continually refactoring your code using different patterns to hone your intuition.
Naturally, this process doesn't happen overnight - we've been doing this for 20+ years and we still learn something new nearly every day!
 Other videos about patterns and frameworks appeared in Section 2 and the Appendix of the [Spring 2013 offering of the POSA MOOC](http://www.dre.vanderbilt.edu/~schmidt/Coursera/spring-2013-posa.html). You can find links to all these videos [here](https://class.coursera.org/posasoftware-001/lecture/index), though you will need to register first at [this link.](https://www.coursera.org/course/posasoftware) If you're a Safari online book club member you should check out the [Design Patterns in Java](http://www.dre.vanderbilt.edu/~schmidt/LiveLessons/) video training series that covers the "Gang-of-Four" design patterns.  You may also want to try implementing the assignments given in my [CS 282](http://www.dre.vanderbilt.edu/~schmidt/cs282/index.html#assignments "Link: http://www.dre.vanderbilt.edu/~schmidt/cs282/index.html#assignments") and [CS 251](http://www.dre.vanderbilt.edu/~schmidt/cs251/index.html#assignments) classes at Vanderbilt.
  1. Which versions of software are required for these MOOCs
The following software is required for these MOOCs:

*   Android version 5.1.x (e.g., API version 22), also known as "Lollipop"
*   Java 7 and/or Java 8
*   Android Studio version 1.5.x or later (whichever you prefer)

You're welcome to use whatever Android version works best for you during development, but make sure that your solution works with API version 5.x--and use version 5.x for peer evalution--so that everyone is using the same version to avoid inconsistencies during the assessments.  In addition, Coursera recommends using the Chrome and Firefox browsers to view the course material. There's also a [mobile app](https://learner.coursera.help/hc/en-us/articles/201522945-Recommended-Browsers-and-Devices) for Coursera MOOC, as well.
  1. Can learners use programming language [X] for the course?
The programming assignments in the Android portion of this course are designed for the Java programming language. 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 [peer-grading system](https://learner.coursera.help/hc/en-us/articles/201212339-Peer-Graded-Assignments).
  1. Where are the slides and source code presented in the videos and the code skeletons provided for the programming assignments?
PDF versions of the slides are available for download along with the videos. The PDFs are available below the videos. The PDF versions of the slides have clickable links to make it easy to navigate to the supplemental material referenced in the slides.  The source code examples referenced in the slides can be obtained by clicking on the corresponding links.

We've created GitHub repositories for the MOOC assignments and examples. The repository can be accessed [here](https://github.com/douglascraigschmidt/Android-App-Development). You can either install/use GitHub to access each folder in the repository (as described [here](https://class.coursera.org/posaconcurrency-003/wiki/Installing_and_Using_Eclipse_and_Git "Link: https://class.coursera.org/posaconcurrency-003/wiki/Installing_and_Using_Eclipse_and_Git")) or you can download it in a single zip file. We recommend you learn to use Git rather than downloading the zip file.

You can browse the latest/greatest Android source code online [here](https://android.googlesource.com "Link: https://android.googlesource.com") or download it [here](http://source.android.com "Link: http://source.android.com"). Likewise, you can browse the latest/greatest Java source code online [here](http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src) or download it [here](http://www.mkyong.com/java/where-to-download-jdk-source-code/). For example, if you want to find implementations of the ArrayList class (both Java) simply google "ArrayList site:android.googlesource.com" in your browser and you'll get a list of relevant links containing the implementations.
  1. Is it necessary to watch the lecture videos prior to doing the programming assignments?
Yes, because the lecture videos provide many relevant hints and tips for completing the programming assignments correctly.  Moreover, the teach staff will ignore any questions that could be answered by watching the lecture videos, so make sure to watch them prior to starting the assignments.
  1. Will the source code for the programming assignment solutions be made available?
The source code will *not* be made available, but we'll go over the solutions in Virtual Office Hours.
  1. Can 3rd-party concurrency libraries or frameworks be used for the programming assignments?
No 3rd-party concurrency libraries or frameworks can be used for the programming assignments since that would require the peer reviewers to (1) install these libraries/frameworks and (2) understand these libraries/frameworks.
  1. How can learners get help if their solutions to the programming assignments aren't working?
Although the teaching staff doesn't have the resources to help individual learners debug their programs, if you run into problems feel free to post your buggy code to the appropriate assignment discussion forum so that other learners 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.
  1. How long will the course material be available online after the MOOC ends?
We keep the videos, presentations, discussion forum postings and responses, etc. available as long as Coursera allows, so the existing material should be available unless they remove it for some reason beyond our control. The programming assignments, however, are only available during the period in which the MOOC is active.  When we migrate to the new on-demand system the programming assignments will also be available as long as Coursera allows.
  1. Where is the source code that corresponds to the pathnames embedded in the slides shown in the videos?
All the Android source code referenced by the pathnames in the slides shown in the videos is available for browsing online [here](https://android.googlesource.com "Link: https://android.googlesource.com") or for downloading [here](http://source.android.com "Link: http://source.android.com"). Likewise, you can browse the latest/greatest Java source code online [here](http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src) or download it [here](http://www.mkyong.com/java/where-to-download-jdk-source-code/). For example, if you want to find implementations of the Thread class (both Java and C++ versions) simply google "Thread site:android.googlesource.com" in your browser and you'll get a list of relevant links containing the implementations.

 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 5.x, which is the so-called "Lollipop" release. The code we examine, however, should be largely the same in other versions of Android, as well.
  1. Will there be much flexibility in the schedule of deadlines for programming assignments in these MOOCs?

There is no flexibility in scheduling the deadlines in these MOOCs. However, there is no late penalty for submitting after an assignment's due date - you just need to pass before the session ends. Keep in mind that some Peer Review assignments may have a deadline restricting submission after 7 days past the due date. If you are not able to complete the course in this session a new session should start every few weeks. Your progress from this session will carry over to any future sessions, as discussed in FAQ item #64.

  1. How closely aligned will the programming assignments be between MOOCs in the MoCCA Specialization?
The instructors for all the MOOCs are working together to ensure the projects are properly aligned, though it won't be necessary to have completed the previous 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 learners must take the MOOCs in a particular sequence, so inter-MOOC dependencies will be minimized.
  1. How will the programming assignments be obtained, submitted, and assessed?
Programming assignments will be released via [GitHub](https://github.com/douglascraigschmidt/Android-App-Development). As long as you're using Git correctly you should have no problems merging these changes into your local copies. 

 Every peer-graded programming assignment will be due at least two weeks from when it is released. As the assignments are released (and prior to their due date) we'll use the Coursera Peer Assessment mechanism to do the actual submissions.  The criteria for peer assessment will be specified in the Peer Assessment description and explained in detail in a Virtual Office Hour session [FAQ item #13](#13) held after the deadline for submitting a programming assignment.
  1. Will the links in the MOOC lecture videos be made clickable and/or consolidated into a single convenient location?
Learners in these MOOCs are crowd-sourcing the links from all the lecture slides and adding them to this [wiki](), 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 MOOC websites each week, so you can also access the links that way. Note that the "Introduction" videos have no associated PDF files.
  1. Can learners do extra assignments to improve their grade?
No, the assignments are peer graded and thus require a non-trivial amount of work from the teaching staff and other learners in the class. As a result, there will be no extra assignments.  If you are unable to complete all the assignments please feel free to retake the MOOC the next time it is offered.
  1. How can learners keep informed about important due dates for assignments?
Once a MOOC has begun, there is 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 learners). Ultimately, however, learners are responsible for keeping track of the deadlines and procedures related to properly submitting the MOOC assignments. Given the large number of learners enrolled in the MOOC, there will be_no_ support for individual extensions or special handling of late or improperly submitted solutions to the assignments.
  1. How many hours per week will be required for these MOOCs?
We estimate that a typical learner will spend an average of 4-6 hours per week on these MOOCs. However, there's no 100% accurate way to estimate how long any given learner 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. Be prepared to put in a significant amount of time if you want to get the most out of these MOOCs.
  1. What are some consequences of the "massiveness" of a MOOC?
The massive number of learners in these MOOCs 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 University. In particular:

*   The MOOC teaching staff will not provide individual feedback on learner assignments, so please don't send us email directly. We will, however, present our solutions to the assignments in the weekly "Virtual Office Hours" described in [FAQ item #13](#13). See [FAQ item #65](#65) for suggestions on what to do if you run into problems.

*   Some things will inevitably go awry, e.g., peer graders will undoubtedly not follow the rubric correctly, unit tests will need to change, learners 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.

*   The lecture form and/or content will not be tailored to the individual needs of each learner.

Due to the massive number of learners--coupled with the very limited teaching 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 learners 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 learners with an education that will improve their lives.
  1. How much of the Android software stack is covered by this Specialization?
The MOOCs that comprise this Specialization cover a wide range of Java and Android programming topics. However, this Specialization does not cover the [full stack](https://www.facebook.com/note.php?note_id=461505383919) of Android and Cloud Computing software. For this additional coverage we recommend you take the [Mobile Cloud Computing with Android (MoCCA)](https://www.coursera.org/specializations/mobile-cloud-computing) Specialization.
  1. Can learners use public source code repositories to store their solutions to the programming assignments?
<p>Please do not use public source code repositories (e.g., a freely available <A HREF="http://www.github.com">GitHub</a> accounts, which are public) to store your solutions to the programming assignments. Likewise, do not post your solutions as a pull request to our Github accounts.  Publically available repositories encourage learners to copy each others work, which is a violation fo the Coursera code of conduct that does not allow learners to share work unless explicitly instructed by course policies.  <A HREF="http://www.gitlab.com">GitLab</a> provides freely available private accounts, so you might want to check them out. </p>
  1. Who will define the projects implemented in the Capstone Projects Course?
Learners 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 learners 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, Each learner will own the copyright on his/her solution (which must be completed individually, rather than as part of a team). However, all learner solutions must be available in open-source format to enable peer assessment.
  1. Which videos have in-video quizzes?

    All "non-introductory" videos have in-video quizzes, which pop up periodically (typically prior to the "Summary" segments) and ask learners questions about what they've been watching. All of Section 0 and the intros to each Section 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.

  2. How much of a focus on patterns and frameworks will there be in this MOOC?

Patterns and framework provide the foundation for much of the material in this course. There is a short introduction to patterns and frameworks in these MOOCs and the [Mobile Cloud Computing with Android (MoCCA)](https://www.coursera.org/specializations/mobile-cloud-computing) Specialization focuses on patterns and frameworks applied in Java and Android. Many other videos and other resources related to patterns and frameworks are also available [here](http://www.dre.vanderbilt.edu/~schmidt/DigitalLearning/).
  1. What resources can be used for the weekly quizzes?
You are welcome to use videos or presentation material when answering the weekly quiz questions.
  1. Are there other programs learners can write to get experience with more advanced Java and Android mechanisms if they find the programming assignments too easy?
If you get bored with these programming assignments and want to try writing more interesting programs you might ry:

*   Writing the solutions without using any of the provided skeletons
*   Taking the [Mobile Cloud Computing with Android (MoCCA)](https://www.coursera.org/specializations/mobile-cloud-computing) Specialization
*   Implementing the assignments given in the [CS 282](http://www.dre.vanderbilt.edu/~schmidt/cs282/index.html#assignments "Link: http://www.dre.vanderbilt.edu/~schmidt/cs282/index.html#assignments") and [CS 251](http://www.dre.vanderbilt.edu/~schmidt/cs251/index.html#assignments) classes at Vanderbilt.
  1. Where is more information available on Android internals?
It's worthwhile watching videos on Android's [anatomy and physiology](https://sites.google.com/site/io/anatomy--physiology-of-an-android) and [Dalvik Virtual Machine](https://sites.google.com/site/io/dalvik-vm-internals "Link:
        https://sites.google.com/site/io/dalvik-vm-internals"). Although these are from 2008 they provide a good overview of how Android works internally.
  1. What can be done if the audio is out of sync with the video stream when viewed from the course website on Coursera?
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. 
  1. 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](http://stackoverflow.com/questions/5991745/java-null-reference-best-practice). To avoid cluttering the solutions and distracting from the focus on concurrency and communication, the code examples in these MOOCs 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.
  1. What are rules for choosing the appropriate Android Context?
See the discussions [here](http://possiblemobile.com/2013/06/context/) for an overview of which Contexts to choose for different situations.
  1. How can we convince our colleagues and management of the value of patterns and frameworks in practice?
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).
  1. Is there a way to get the Android Virtual Device (AVD) emulator to run faster?
If you run on an Intel-based development machine we recommend you install the Intel [Hardware Accelerated Execution Manager (HAXM)](https://software.intel.com/en-us/android/articles/intel-hardware-accelerated-execution-manager), which greatly speeds up the performance of the AVD emulator. In order for HAXM to work you'll need an Intel processor with support for Intel VT-x, Intel EM64T (Intel 64), and Execute Disable (XD) Bit functionality, as well as least 1 GB of available RAM.
  1. How long does it take for the post-processed videos, subtitles, and downloadable MP4 videos to appear for live Virtual Office Hours?
One of the innovative aspects of these MOOCs is that the Virtual Office Hours are presented live, which helps keep the material "fresh" and the discussions interactive. Post-processed videos of the live lectures are typically available in the "Video Lectures" page of the MOOC around 6-8 hours after the lectures complete.  However, there's a delay of up to several days while the material is encoded for downloading and subtitled, all of which is handled by Coursera rather than the MOOC teaching staff, who have no control over this process, so you'll need to be patient. The Supplemental Lectures are already subtitled, however, so if you'd like to read transcripts of earlier presentations on many of these topics feel free to watch those videos while the encoding and subtitling of the live lectures is occurring.
  1. What is a "hook method"?
A hook method is a specific point in a framework-based program where developers can customize generic framework components with callbacks that the framework invokes to run application-specific logic. Hook methods in Java-based frameworks (such as Android) are typically defined by extending a super class or implementing an interface & overriding a virtual (possibly abstract) method. The run() method in a Java Thread/Runnable is a good example of a hook method that is discussed in the Week 1 lectures.
  1. What is the meaning of the "Reference:" line in the auto-grader output?

The output from the auto-grader always contains a lines that mention "Reference:", as shown below. If your Rubric Score is perfect (e.g., 50.0/50.0) then you can ignore the "Reference:" line. However, if your Rubric Score is not perfect (e.g., 0.0/50.0) then the "Reference" line indicates what the problem might be, which can use to address the problem with your solution.

    ------------------------------Assignment Evaluation-----------------------------
    
    --------Your solution received points for the following grading rubrics:--------
    
    testResultRange
    
    Rubric Score: 50.0/50.0
    
    Goal: The goal of this evaluation is to test ResultRange
    
    Reference: This Test fails when: calculate returns a value outside the range.
    
    ----------Your solution missed points on the following grading rubrics:---------
    
    testCalculate
    
    Rubric Score: 0.0/50.0
    
    Goal: The goal of this evaluation is to test Calculate
    
    Reference: This Test fails when: calculate returns an incorrect value.
  1. Where can we learn more about the "Mobile Cloud Computing with Android" Specialization?

    There's an overview of the Mobile Cloud Computing with Android (MoCCA) Specialization here. The MoCCA Specialization will start running again as soon as all the MOOCs in the Android App Development Specialization have launched.

  2. What should I do if the overview lessons on Java in Module 1 are too conceptual to understand?

    The goal of the overview lessons on object-oriented programming and Java features in Module 1 are intended to give a "big picture" view of these topics. Don't worry if you don't fully understand all these topics after watching the overview lessons since Modules 3-7 examine each concept and feature in greater depth, analyze detailed code walkthroughs, and reinforce the lessons with assignments that enhance your knowledge of programming Java for Android. You therefore may want to race through these intro videos now and then return later after you've finished the rest of the MOOC to rewatch them.

  3. What field should I use to print a string to the user in skeleton code?

    Please use the mOut field defined in the skeleton code to print a string to the user, which plays the role of the System.out field in conventional Java code, e.g.,

    mOut.print("Hello");
    

    You can use mOut to print a string to the user in any method where the mOut field is visible. You can also pass mOut as a parameter to other helper methods, as needed. Make sure your code does not use System.out to print any data or else the auto-grader will fail!

  4. Why are my submissions to the auto-grader failing?

    The auto-grader runs on servers hosted by the Coursera platform and sometimes you'll get a message from it saying that "Grading failed". The typically reason the auto-grader fails is because your submission takes too long to because you're using the wrong type of Java collection (e.g., an ArrayList instead of a HashMap) or you have an infinite loop in your code. Another reason your submission may run to long is if you have lots of logging messages, in which case the unit tests will timeout and you'll get a 'Grading failed' message. Therefore, make sure to think carefully about your implementation decisions and comment out your logging messages before submitting your solutions.

    In some circumstances the auto-grader may respond with "Please try again after some time while we look at resolving this issue" or "Your solution can't be autograded, try later". The auto-grader will issue these messages when the Coursera servers are overloaded and are unable to handle the large bursts of assignment submissions. These messages may also occur when the Coursera servers are being updated or are undergoing short-term maintenance. To avoid receiving these messages during peak periods please wait for 20 or 30 minutes and then re-submit your assignment. If this problem persists please contact Coursera since they may be unaware of these outages with their servers.

  5. What needs to be done to pass these MOOCs?

    To pass a MOOC learners must complete every graded quiz, auto-graded assignment, and peer-graded assignment at or above the passing percentage, which is 80% of the total number of points per quiz or assignment. Please note that most of the peer-graded assignments are optional so they are just there to provide you with additional feedback and don't count towards your final grade.

  6. Why am I getting weird errors from Android Studio?

    If the files in the Android SDK, Android Studio, or your project are not being found, or you are getting weird errors saying that components or parts of Android Studio itself can't be found, you may be running into limitations with the Microsoft Windows filesystem, which has a hard limit of 240 characters that can make up the full string version of all parent directory names and file name itself. If any file attempts to go over this limit it will be skipped in the installation or copying process. To fix this problem, therefore, we recommend you keep the Android Studio installation directory, the Android SDK installation directory, and the location of your projects as close as possible to the root of your C:/ drive. Switching your development platform to Linux or Mac OSX will also avoid this problem with Windows.

  7. Can we access the quizzes and programming assignments if we're just auditing the MOOCs?

    You can't do the auto-graded quizzes if you're only auditing, but you should be able to download the skeletons and Android Studio project files for the programming assignments and run the JUnit tests locally. You won't be able to use the auto-graders, however.

  8. What are optional peer-graded assignments?

    There are some peer-graded assignments that are intended to provide learners with additional feedback on software design and programming issues (such as programming style and aesthetics) that aren't easily done via the auto-graders. Most of these peer-graded assignments are optional, so they do not count towards your final grade at all.

  9. What happens if I can't complete all the programming assignments by the stated deadlines?

    These MOOCs are self-paced, i.e., even if you miss some deadlines, you can still submit any work until the current session ends and after the current session ends you are welcome to switch to the next session (sessions typically start every couple of weeks) with all your already finished work transferred automatically to the new session so you can continue from where you left off in the previous session. Therefore, if you're not able to complete the programming assignments by the stated deadlines you can automatically re-enroll yourself into the next offering of the MOOC (which restarts every couple of weeks) by "clicking a button," i.e., at the end of the current MOOC you'll get a message with a link to the next offering, which you can simply click to re-enroll. Moreover, you won't lose any of the quiz and assignment credits you have obtained so far.

  10. I submitted my assignment a long time ago, so why have I received only a few "feedback on my submission" email notifications?

    The Peer Review submission system will only send you "New feedback on you submission" email notifications when one of your peer evaluators fills in and posts comments in the "Comments" box at the bottom of the submission form. If your peer evaluators do not fill in this comment box or fail to click the "post" button, then you will not receive the "New Feedback on your submission" email notification, even though the peer has submitted the actual full evaluation. Once Coursera has received all the required peer evaluations for the assignment, you will be notified with your final grade and you can review the results of all peer evaluations by navigating to your assignment's "My Submission" page.

  11. What does it mean when the auto-grader reports "Compile Error: Error 37"?

    "Compile Error 37" means that the project code you submitted does not compile when linked and run by the unit test file contained in the auto-grader. Although you may find that your code compiles and runs on your Android Studio project, this does not mean that your code will compile when run with the auto-grader unit test file. The auto-grader unit test file expects your code to strictly follow the class method and field definitions outlined in the PDF instructions that accompany your assignment. The unit test code will make calls directly into your classes to test your method implementations and if any of your methods and fields do not conform exactly with the specifications in the PDF document, then you will receive this error from the auto-grader. To ensure that this error does not occur, please right-click on the java unit test file in your project test folder and click the

    Run '<NameOfUnitTestFile>' 
    

    menu option (or simply type Ctrl-Shift-F10), which will run your unit tests locally and immediately provide you with feedback if your implementation does not compile due to an error in your method signatures.

Clone this wiki locally