Skip to content

CS 395 FAQ

Douglas C. Schmidt edited this page Apr 12, 2024 · 21 revisions
  1. What are the course objectives?

    Upon completing this course, students should be able to:

    • Recognize the inherent and accidental complexities involved with developing concurrent and parallel microservices in Java running on the Spring WebMVC and WebFlux middleware platforms.

    • Understand how pattern-oriented software architecture and framework techniques can and cannot help to alleviate these complexities.

    • Be fluent in the use of modern Java object-oriented, functional programming, and reactive programming mechanisms, particularly as they pertain to concurrent and parallel microservices.

    • Apply patterns and frameworks to develop reusable and resilient concurrent and parallel microservices using the Java programming language and Spring middleware platforms.

    • Know where to find additional sources of information on how to program microservices on Spring middleware platforms.

  2. What are your assumptions about--and expectations for--students taking CS 395?

    This material is intended for self-motivated students who

    • Know modern Java, IntelliJ, and Git (or can learn them quickly on their own)
    • Want to understand both the concepts and practice of developing concurrent and parallel microservices
    • Are curious about how the Java and Spring software stacks are designed and implemented
    • Are willing/able to carefully read/follow the instructions in the course assignments and announcements.
  3. Can students take this course if they have little/no prior experience programming Java in IntelliJ?

    This course assumes that students are comfortable programming in Java and IntelliJ. If you don't have any Java programming experience you should watch the material available at the Android App Development Coursera specialization website.

  4. What happens if we don't submit our code for instructor review by the deadline?

    Not having your code available for instructor review adds extra work for the course staff. Therefore, if you don't submit your code by the deadline you will receive 0 for the assignment.

  5. How does the graduate material differ from the undergraduate material?

    Students taking this course for graduate credit have additional work on each assignment, quiz, and final exam. This additional work will be clearly indicated.

  6. Who is eligible to enroll in this class and access the material?

    Anyone is welcome to view the programming assignments and lecture material. However, only Vanderbilt students can enroll in this class and access the other material at the course website. Much of this material is available in my LiveLessons tutorial videos.

  7. When will the screencasts and PDF slides of the class lectures be available? The screencasts and PDF slides will be posted later in the day after the class lecture is given. There are typically two lectures a week (Monday and Wednesday), but the lectures aren't always published as screencasts, depending on what is covered that day. In particular, the answers to quizzes and programming assignments aren't posted as screencasts. Moreover, the slides (and topics covered) often change right up to the start of class, so they are not available ahead of time.

  8. What information (if any) is needed at the top of the programming assignment submissions?

    It is not necessary to include comments at the top of your source code files with your name, email, honor code statement, assignment name, date, etc. since

    • We're using GitLab, so the course staff know whose code we're reviewing
    • The Vanderbilt Honor Code applies to everything we do in CS 395, as per discussions in the first class.
  9. How should student GitLab accounts be created and structured?

    Each student should create a single GitLab account and submit the ID to the Google Survey sent via email. The GitLab repository should be private and structured like the assignment folder here, i.e., there should be a separate directory for each assignment. Failure to follow this structure will prevent the course staff from grading programming assignment submissions.

  10. What is the process for initial submissions and resubmissions of programming assignments?

    Please see the instructions here.

  11. Where is the source code described in this course?

    We've created a GitHub repository for the CS 395 assignments, which you can access here. You can either install/use GitHub to access each folder in the repository (recommended) or you can download it in a single zip file (not recommended). You can access all the Java source code here. The PDFs versions of the slides associated with case study walkthroughs in class always include the URL for the particular source code example being discussed. 

  12. How can we learn more about object-oriented and functional programming in modern Java?

    To learn about object-oriented programming in Java please enroll for free sessions of the Android App Development MOOC Specialization by going to the individual MOOCs at

    you can enroll in them without being asked to pay and simply "audit" the courses. In contrast, if you go here you will be asked to pay and receive a verified certificate for the courses, which you probably don't want to do. To learn about functional programming in modern Java please check out this YouTube playlist. Likewise, to learn about sequential streams programming in modern Java please check out this YouTube playlist.

  13. How Do I Pull New Assignments from the Instructor Repository onto My Gitlab Repository?

    The steps to pull changes from the GitHub repository and push those changes to your GitLab repository are as follows (make sure you're in the directory where you have your GitLab repository cloned):

    • Make sure you have a remote (called skeletons or whatever you want) set up for the GitHub repository

      git remote add skeletons git@github.com:douglascraigschmidt/CS395.git

    • Pull the changes in from the GitHub repository

      git pull skeletons master

    • After you've got the changes, you can push the changes up to your GitLab repository using your origin remote (points to your GitLab repository)

      git push origin master

  14. What is the Form and Content of the Quizzes and/or Exams?

    The quizzes/exams will be structured as short written answers (which may include writing small code snippets) to questions that are derived from the lectures, questions asked in class and/or on Piazza, and programming assignments. Each quiz/exam will include topics covered since the previous quiz (up to, but not including topics covered the day of the quiz itself since it wouldn't be possible to study for that material prior to the quiz). A good way to study for the quizzes/exams is to (re)watch the videos, (re)read the slides, and review the material covered on Piazza after the previous quiz/exam. It's particularly important to understand the common programming problems identified in the "frequently made mistakes" videos uploaded to the course website and know how to resolve these types of problems.

  15. How do we find out our grades on the programming assignments?

    You can largely determine your grades on the programming assignments by running the regression tests provided with each assignment project. There's a 5% deduction for each failed test. Please note, however, that the regression tests don't catch all mistakes, so you will also lose points for failing to address review comments that identify other defects with your solution. It's very important that later assignment submissions fix any/all problems identified by the regression tests and review comments in previous assignments. In particular, the goal should be to pass 100% of the regression tests for any given assignment. To incentivize this "cumulative quality" model, each unit test from a previous assignment that is not fixed in a current assignment will also receive a 5% penalty for not passing earlier tests. Moreover, you must run the regression tests prior to submitting your initial solution and push a screenshot of the results in a file named RESULTS to your GitLab repo or your program will not be reviewed.

  16. Since we are to work individually on assignments how we can collaborate effectively or meaningfully with other students via Piazza, with external resources (e.g. tutors etc.), during office hours?

    This class is just all other Vandy non-group-oriented CS courses, i.e., all your work must be your own, which means that you can't collaborate with other students or tutors on graded assessments (e.g., quizzes and programming assignments). Naturally, you are welcome to post general questions to piazza. However, if you have specific questions about your code please don't post your code to piazza, but instead come to office hours or send me a "private" post on piazza. You are also welcome to ask specific questions about your solutions during office hours, just like any other course in Vandy CS.

  17. When (and how) are the final revised submissions due for each programming assignment?

    The date for the revised version of each assignment will be posted here after I have reviewed the initial submissions of that assignment and have thus been able to assess how much time will be required for students to address my comments. Multi-part assignments (e.g., assignment 1a, assignment 1b, etc.) will be graded as a single unit after the final solution for the final part of the assignment has been pushed to the corresponding folder in your GitLab repository. Make sure to integrate your solution(s) for the earlier part(s) of the assignment(s) into your solution for the final part of the assignment, along with your (updated) solutions for all previous assignments. It is not necessary, however, for tests in earlier part(s) of the assignment(s) to work since only the tests for the final part(s) of the assignment will be graded.

    There will be a separate Google submission form for the initial parts of each of these multi-part assignments. However, there will be no Google submission form for the final solution for each assignment. Therefore, you simply need to push any updates to your code by the deadline, after which your program will be graded and the score entered in your Brightspace grade book. If all your tests pass and you have no outstanding comments from me it's not necessary to (re)push your code.

  18. How can we get help on our programming assignments?

    If you need help on your programming assignments please post questions to the piazza discussion forum. If your question requires the course staff to inspect your source code or project configuration please post the question privately after first pushing your code and project to your GitLab repo. Make sure to indicate which GitLab repo belongs to you so that we can review the right project efficiently. Without this information it's nearly impossible to provide useful feedback. Also, make sure you've watched the relevant "Frequently Made Mistakes" (FMM) videos and have addressed all pertinent issues in your solution before asking for help. No reviews will be provided for code that (1) contains problems addressed in the FMM videos or (2) is not commented and formatted properly, as per this guidance. Finally, make sure your code is located in the "main" branch of your repo, rather than on some other branch, so I don't have to search for it.

  19. Is It Necessary to Fix Defects from Previous Assignments in Later Assignments or is Each Assignment Graded Independently?

    It's very important that later assignment submissions fix any/all problems identified by the unit tests in previous assignments. In particular, the unit tests are updated periodically, so tests that passed in earlier assignments may no longer pass when the tests are improved. Your goal should be to pass 100% of the unit tests for any given assignment. To incentivize this "cumulative quality" model, each unit test from a previous assignment that is not fixed in a current assignment will receive a 5% penalty.

  20. What is the Google Survey Form and Why is It Important?

    The Google survey form collections information (such as the link to your GitLab repository) so the instructor and course staff can review and grade your solution. This form also ensures you understand the instructions you must follow to have your program reviewed and graded. A link to this form will be posted on piazza several days before the initial submission is due (see FAQ item #10 above for information on the initial submission process). If you don't submit this form on time your submission will not be reviewed or graded.

  21. How Will We Know When New Programming Assignments Are Available?

    When a new assignment is ready for release (e.g., the previous assignment is complete, the automated tests are installed, and a video walkthrough of the assignment specification, skeletons, and tests is available) it will be announced on piazza. The due dates for all assignments are available here.

Clone this wiki locally