Your Task

For this project, you are to design your own CPL-style programming assignment.


  • The programming portion must be in Python, JavaScript, Go, Julia, or Elm.
  • The premise of the assignment must be different from any previous assignment.


  1. A homework post
  2. Starter code
  3. A complete solution
  4. A brief grading plan

The Homework Post

Your homework post must…

  • articulate learning objectives for the assignment.
  • list relevant resources.
  • motivate the program with a story.
  • detail expectations for the design and behavior of the program.
  • provide hints and tips to assist with implementation.
  • assign point values to requirements that align with the learning objectives.

Feel free to refer to previous CPL assignments to help form an outline. You can use the same header titles (Takeaways, Relevant Resources, etc.).

Your assignment post must be written in Markdown using the Wiki tool in your Build Your Own Assignment GitLab project. You should not place your homework post in the actual repository.

The Starter Code

Your starter code must contain…

  • relevant project files.
  • a

Your starter code should be in your Build Your Own Assignment repository on a branch called starter-code1. We should be able to clone your repository, checkout the starter-code branch, and start working on the assignment.

Your Solution

Your solution must contain…

  • a complete, well-documented solution to the assignment.
    • Essentially a filled-in version of the starter code.
  • a file named that outlines your plan to grade the assignment.

Your solution should be on the master branch of your repository.

The Design Process

Eventually, you’ll have to sit down and figure out what you’re doing. It’s fun, but it’s not easy. This is the process I usually use to develop a new assignment:

  1. Choose learning objectives
    • Start with lecture notes and identify a handful of conceptually important takeaways.
    • Stare at them and have a small existential crisis.
    • Have some coffee.
  2. Invent hypothetical problem that needs solving
    • Think about input and output, user interaction, etc.
    • Consider how your chosen concepts will work together in the same program.
    • Try using a framework or library that’s used in real life. For example, Hubot, Flask, and Leaflet.js are all used in industry. See if you can find one of your own.
  3. Write a program to solve the hypothetical problem
    • As you write the solution, you’ll likely want to change the problem. That’s totally fine.
    • Ensure that your chosen concepts make sense to use in your solution. Don’t force it in there “just because”.
  4. Write the homework post based on your problem and finished solution
    • Document all functions you expect students to complete.
    • Link to any third-party references (docs, tutorials, etc.) that you used to write your solution.
  5. Strip your solution down to starter code
    • Check out a new branch with git and strip out the parts you expect students to write.

Your assignment should be geared toward students who have just learned about your chosen learning objectives. It should be conceptually challenging, in that they’re working with tools they’ve just learned about. However, it shouldn’t be impossible. The reaction you should aim for is “that was hard, but I learned a lot”.

Getting Feedback

To ensure you maximize the number of points you earn, you should communicate with me about your assignment. I’m happy to brainstorm project ideas with you to help you develop something great. If you have questions about whether your assignment is too easy, too convoluted, etc., just ask.

Of course, you’re welcome to work independently, too.

Credit where Credit is Due

Let’s say you develop an assignment that really packs a punch. One that’s an excellent demonstration of new concepts and gives students something to talk about in an interview. With your permission, I would be happy to share it with the next instructor to teach CPL.

If they like it too, your assignment could be part of the next CPL. And giving credit where credit is due, you’d receive proper recognition for your efforts.

Further Details

Point Value

You can earn up to 100 points for this project. It will replace your lowest 100-point-homework grade. It cannot be used to replace your homework 1 grade.

The quality of your post, starter code, and solution will be evaluated independently, but it’s important to note that there’s a significant amount of dependence there. Without the homework post, we won’t know what your solution is supposed to do. Without the starter code, we won’t know what you’re expecting the student to complete. Without the solution, we can’t be certain that the assignment is even possible.

The evaluation of this assignment is more subjective than regular CPL assignments. It is in your best interest to talk to me about your idea before you spend a ton of time on it. If it’s (including but not limited to) too easy, too sparse, or too similar to past assignments, your score will suffer.

Feature Points Possible Nah/Oof. (0% of points possible) Needs serious help (50% of points possible) Looks good, needs some help (75% of points possible) Nice work. (100% of points possible)
Homework post 50 0 / 50 25 / 50 37 / 50 50 / 50
Starter code 25 0 / 25 12 / 25 18 / 25 25 / 25
Solution and grading plan 25 0 / 25 12 / 25 18 / 25 25 / 25
Points possible 100        



11:59:59 PM CST – Friday, December 8, 2017

11:59:59 PM CST – Thursday, December 14, 2017

This deadline is subject to change. Depending how the semester schedule pans out, we may move the deadline to finals week.

It’s not subject to change anymore. Thursday is the furthest I can realistically push the deadline.

Note that this is not a normal homework, and the late submission rules do not apply. If you plan to submit an assignment, it must be in by the deadline.

Submission Procedure

Refer to the assignment submission page on the course website for details on submitting your code to GitLab.

In your Build Your Own Assignment repository, we expect to see…

  • Starter code on the starter-code branch
  • Solution code on the master branch

Be sure to include your on your master branch with your solution code. There’s no need to include on your starter-code branch.

Additionally, we expect to see a complete assignment post in the wiki for your Build Your Own Assignment GitLab project.

Grading Procedure

… is subjective.

I’ll thoroughly read your homework post, starter code, solution code, and grading plan. Then, I’ll run your solution through your grading plan to see if it does what it’s supposed to. It’s really up to you what happens there.

  1. Don’t worry about how your git log looks. Just ensure your starter code looks the way you want it to.