This section of the document explains how to set up and configure your development environment.
You do not need to submit anything for part 0 and there is no due date, but we strongly recommend you work through this section as soon as possible. Part 0 contains instructions and mini-exercises designed to make sure you're comfortable with your development environment which you'll be using throughout the quarter.
If you run into any issues or have questions about any of these steps, you should ask one of the course staff as soon as possible so you don't run into issues down the line.
First, start by setting up your development environment if you haven't already. We STRONGLY recommend you install and use an industrial-strength integrated development environment (IDE) instead of using jGRASP. The two IDEs we official support are IntelliJ and Eclipse: here are instructions for installing and using both.
You should have recieved an invite to our internal Gitlab server. Go to https://gitlab.cs.washington.edu and log in using using your UW NetID.
Add instructions here
If you are unable to get any of these steps working, talk to the course instructor ASAP.
Once you have finished setting up your IDE and your project, try running the tests we have provided you.
You can do this by right-clicking on the test and selecting the "run" option. You can find instructions and screenshots on how exactly to do this in your "installation and usage" for IntelliJ or Eclipse.
When you try running your tests, your IDE should print out the names of each test, state that they failed, and include some sort of error message and stack trace under each one.
If you are unable to get your tests running, talk to one of the course staff ASAP to get help.
Your "installation and usage" guides for IntelliJ or Eclipse (linked above) should include instructions on how to commit, push, and pull changes using version control. We will now practice following these instructions.
Have partner A make a minor change like adding a comment to your DoubleLinkedList class. Commit then push this change.
Have partner B pull then open the DoubleLinkedList class. You should see the change partner A made!
Switch places and repeat these steps so partner A can practice pulling a change partner B made.
Next, we'll practice resolving merge conflicts: handling cases where both partners ended up changing the same thing in different ways.
Have both partners make a change in the exact same location: for example, try adding a comment to the very top of the file. Make sure your comment is different from your partner's!
Next, have both partners commit and push their change. Have partner A push first, followed by partner B.
Since partner A went first, their push should succeed. However, since partner B went second, they'll get an error message complaining about a merge conflict: Git wasn't sure how to combine your commit with partner A's.
If you look at your DoubleLinkedList class again, you should see Git edited that file so it contains both alternative. It should look something like this:
TODO: example here
Partner B now needs to edit the file and combine both changes. You can do this however you like: keep your change, keep your partner's change, combine them together somehow, replace the changes with something completely new, delete both...
Ultimately, all that matters is you somehow edit the file so it compiles again. Once you're done, commit and push.
Partner A should now pull: they should now see the merged change partner B made.
Switch places and repeat these steps so partner A can practice fixing a merge conflict.
Make sure both partners try pulling once you're done to make sure you're both in sync.
In this course, we will not grade your code for style issues by hand, like we did in CSE 142 and 143. Instead, we'll run your code against style linters — tools that automatically check your code for various style issues.
You can see the output of these tools by logging into Gitlab, going to your project, then clicking TODO: figure out what buttons to press.
If you read through this page, you should see two things: the linters complaining about various style issues, and the output of your unit tests (which should currently all be failing).
Both the linters and your unit tests will be re-run every time you push a change.
Note: you are not guaranteed to get full points on this assignment even if none of the linters complain and all of your unit tests are passing. You may still lose points if:
Design decisions are higher-level decisions you made on how to implement your code. Here are some examples of what poor design decisions look like:
Note: We will cover what exactly it means for code to be asymptotically efficient a little later this quarter. For now, we'll use a simpler definition: a method is asymptotically efficient if it uses as few loops as possible.
Finally, explore the rest of your project with your partner and become comfortable with where everything is located. You do not need to understand all of the code provided to you, but you should at least be aware of where the files you need to modify are located.
We've included some extra info below to help you with your exploration process. (Remember, click the box titles to expand).