3 Assignments
The assignments are accessed via the course website
Assignments typically open and close at the start of class. For example, an assignment with a one-week window will typically open at the start of class and close at the start of class one week later. The website will give a specific time that the assignment closes.
Because one of the fastest ways to improve your programming skills is to evaluate the code of other programmers, I will make my solution available on the day each assignment is due, while the assignment details are still fresh in your mind. And we will go over any questions that you have on the homework during class.
Because the solution will be shown publicly to the class, late submissions earn only half credit.
This late policy may seem severe but fear not!
You can submit six assignments late—
Or you can browse (from the left panel or through the following links):
How to install the programming environment.
Each assignment will have a detailed description of what is expected on the course website, but this is the high level view.
3.1 Implementation Assignments
You will be walked through the implementation of programming language concepts in video lectures you are required to watch prior to class. You will be required to submit a working and tested implementation of the concept covered in the video by the start of the class.
These video lectures come from a similar course by UofU professors Matthew Flatt and Ben Greenman. Their course closely follows the same textbook as we do which was authored by Brown University’s Shriram Krishnamurthi.
Our course will digress from the book and UofU’s course largely in the second half of the class, and in the assignments and in-class exercises.
compiles
matches the expected interface
has full test coverage
Tips: The video lectures are 20-40 minutes but split into short segments that are 2-5 minutes. Watch one segment, then pause and try to implement it yourself without referencing the video. If you get stuck, you have recently watched the segment and know where to look for help. After that, move on to the next segment.
3.2 Quizzes
Quizzes will have approximately 5 to 10 true/false and multiple choice questions. There will be no trick questions. They will be administered at the start of class each day, and will cover the material from the video lectures.
Come to class on time and prepared, and you should not need to worry about the quizzes.
If you have concerns that a question was a trick question or unfair, please come see me after class.
3.3 Language Extensions
You will be assigned extension assigments where you will add new features to your language.
Come to class, participate and pay attention, as we will walk over other extensions in class to give you a feel for adding features to a language.
If you have thorough tests, but struggle with the implementation, you will still get points for the testing.
compiles
matches the expected interface
has full test coverage
3.4 Programming Assignments
Programming Assignments are designed to expose you to new ways of thinking about languages and language concepts.
You will be exposed to new languages for some of them, and new concepts for others.
For the functional programming introductory assignments you will get partial credit if you pass 50% of the test cases, on a per function basis.
Other assignments are more subjective and will be graded on a case by case basis.
Programming assignments are graded identically to extension assignments, unless the rubric says otherwise.
3.5 Pacing
The pace of the first half of the class will feel accelerated, since we will be covering concepts that are basic and familiar from other programming languages that you know.
In the last half of the class we will be introducing new and difficult concepts and we will slow down the pace of assignments and our in-class exercises and discussions.
Throughout the class you will for the most part only have two assignments in progress at a time, one of which will be easier or largely given to you if you follow along the video lectures.
3.6 Programming Environment
You may use DrRacket, Racket’s bundled IDE. After launching DrRacket, select File|Install Package... and use shplait as the Package Source.
You may use the command line. After ensuring that racket is in your PATH, run the command raco pkg install shplait.
You need to perform only one of the preceding installation methods only once. Each method makes shplait available "globally" so, regardless of the method you choose, you may use your editor of choice to develop programs, including DrRacket. Just make sure that #lang shplait is the first line of your source file. (And, in DrRacket, ensure that Determine language from source is selected.)
To run your program in DrRacket, click the Run button. To run it on the command line, pass its filename to the racket executable.
3.7 Assignment Submission
You will submit each assignment via the course website
which also shows you your grades.
3.8 Group Work
While there are no formal groups nor group projects, you are welcome (and encouraged!) to work with other members of the class. However, all work must be your own and you must make your own submission for each assignment. You may not share code nor may you program by committee, even if each member makes their own submission.
You may discuss concepts and even look at code which solves a similar kind of problem. Of course, the kind of problem should not be too similar. Do not deprive your fellow students of the struggle necessary to expand their way of thinking. (But do try to remove incidental roadblocks that cause needless struggle.)