A syllabus is just a list of words they don’t know yet.—Seth Reichelson
At the end of this course you will be able to do two broad classes of things: first, you will learn to write algorithms that create images and animations from models; second, you will learn to effectively understand the capabilities, limitations and vocabulary that underlie common graphical libraries. In addition to these two core classes of learning objectives we will explore a few more specialized topics.
The pain of parting is nothing to the joy of meeting again.—Charles Dickens
It is expected that this class will be in-person in Olsson 011. Lectures will be recorded, but some in-class demonstrations will not make it into those recordings. While I do not grade attendance or participation, experience suggests that presence and attention in class is strongly correlated with grade.
There is no lab or discussion session. I do not schedule review sessions or the like outside of usual class time.
Some college cell, Where muzzing quizzes mutter monkish schemes.—William Roberts
You will be asked to write and turn in five programs:
a basic 2D rasterizer
a basic 3D rasterizer
a basic raytracer
a animation extending 2 above
either an image manipulation tool or a simulation tool (which one TBD)
Additionally, quizzes will be administered online weekly. There will be a final quiz, which will be administered in-person during the university-scheduled final exam period.
I heard a sound; I turned around; I turned around to face the thing that made the sound.—They Might Be Giants
Online forum: Discord (see join link on Collab)
In-person forum: TBD
All course-material questions should be directed to the course forums. Personal matters should be directed to the instructor directly.
Most announcements will be delivered in lecture and/or in the online forum. Only specially urgent notifications will be sent over email.
Luther Tychonievich
Rice 208
tychonievich@virginia.edu
434-243-3789
All course-material questions should be directed to the course forums, not email.
If you email, please include 4810 in the subject line. I get so many emails each day that those that are not obviously related to one of my classes may not be read very quickly.
Clara, Gustavo, James, and Quinn
The TAs are also students with their own coursework, etc. Please be respectful and only contact them about this course in ways and at times that are listed on this site.
Everyone knows that computers are very big, powerful, sadistic, and highly dangerous.—Harry Harrison
Because we allow many programming languages, and because this is a 4000-level elective course in CS, we assume you are able to handle your own coding and we do not plan to offer coding-level assistance. We will help you understand algorithms and might be able to advise matters of code organization, but you should be able to debug your own implementation errors.
When you read books your eyeballs wither away leaving the bare sockets—Yang Wanli
Reading materials will be selected from various web pages, articles, and the like. There is no course textbook. Readings may be roughly categorized into two kinds.
Conceptual readings will provide background and understanding of course concepts, including both how algorithms work at a high level and why they are designed as they are. Conceptual readings are important to the course, should be read prior to class meetings, and may be used as the source material for quizzes. I anticipate conceptual readings will occupy in the neighborhood of 2 hours per week, varying by individual and by week.
Reference readings are more applied how-to
kinds of material that I believe will assist you in completing the coding assignments.
If you really want to understand something, the best way is to try and explain it to someone else. That forces you to sort it out in your own mind. And the more slow and dim-witted your pupil, the more you have to break things down into more and more simple ideas. And that’s really the essence of programming. By the time you’ve sorted out a complicated idea into little steps that even a stupid machine can deal with, you’ve certainly learned something about it yourself.—Douglas Adams
Most assignments will be supported in any language you chose to use. In the past I have supported C, C++, C#, D, Dart, Go, Haskell, Java, Kotlin, Python, Rust, and Scala. You may switch languages as often as you wish. If you want another language added, let me know.
Estimating how long it will take someone to complete a coding assignment is always difficult. The target difficulty is 5–10 hours of focused effort each week, in addition to other course duties approximating 2.5 hours of class, 1 hour of reading, and 1 hour of quizzing per week. This is in keeping with PROV-022 which suggests 3cr ≥ 135 hours of work and also notes that this policy establishes a minimum standard that does not restrict faculty from assigning a greater amount of academic work per credit.
In the past, some students have suggested that they are accustomed to giving less than this minimum standard in other classes and that they had to adapt to this course meeting that standard.
I find that I go up and down, and back and forth as well;
I move so freely left and right, it seems quite dull to tell.
I also can move later; I move hours every day;
But moving former stumps me hard; I cannot find a way.
Of eight directions on the test, I fear that I’ve missed one;
And eighty-se’en percent is just a B, which is not fun.
I think I’m good at motion; I’m a farily agile bloke;
Perhaps the standard grading scale is just a nasty joke.–Luther Tychonievich
Grading is one of the aspects of a course that instructors enjoy even less than students. Still, we are stuck with them, so here goes.
Task | Weight | Comments |
---|---|---|
Quizzes | 20% | Open book, administered online. Late submissions are not accepted, but we’ll drop your lowest score. |
Assignments, required part | 30% | 6% each |
Assignments, optional parts | 30% | Considered as a whole: you can get them all on a few assignments or spread them out. Extra credit will carry over to other categories at 4% weight. |
Final Quiz | 20% | Closed, book, administered in-person, with questions selected from the quizzes given this semester. |
Your final grade is computed based on the percentage of points you have earned and is designed to match the GPA value of each letter. For reasons I do not understand, that is not a linear scale: for example, A-
− B+
= 0.4 grade points while B+
− B
= 0.3 grade points. For reasons even farther from my ken, the most common grading scale I have seen is also not linear but differently spaced than the grade points. Following is a scale spaced like the grade point scale:
You get | if you score | Which is worth |
---|---|---|
A+ | near the top | 4.0 |
A | ≥ 93% | 4.0 |
A− | ≥ 90% | 3.7 |
B+ | ≥ 86% | 3.3 |
B | ≥ 83% | 3.0 |
B− | ≥ 80% | 2.7 |
C+ | ≥ 76% | 2.3 |
C | ≥ 73% | 2.0 |
C− | ≥ 70% | 1.7 |
D+ | ≥ 66% | 1.3 |
D | ≥ 63% | 1.0 |
D− | ≥ 60% | 0.7 |
F | otherwise | 0.0 |
I do not round grades. 92.99999919% is not ≥ 93% and is thus an A−, not an A.
I do not curve grades: if you all fail, you all fail; if you all ace, you all ace. However, rubrics for assignments are not linear: instead, I determine how well I expect a passing student to perform and assign a per-assignment rubric to match.
Quiz deadlines are hard deadlines as I wish to release the key and discuss the answers in the subsequent class session. If you have a reason why you cannot take a quiz or expect not to be able to perform well on it, please let me know before the quiz closes and I’ll excuse the quiz for you.
Homework deadlines are adjustable on a case-by-case basis. The deadlines are in place primarily to keep you from falling behind and to help course staff focus on helping with one assignment at a time. If there is any reason why a published deadline is not good for you (including I had another deadline that day
or I did poorly when graded and want to re-submit a fixed version
), let me know why and we’ll work together to find a new target deadline that will keep you on track.
Class attendance is only required during the final quiz. If you have a reason not to be there then, please let me know as soon as you know and we’ll seek alternative accommodations.
Class attendance is encouraged for all healthy students. Please do not attend class if you are ill with anything contagious (COVID or otherwise).
Behave professionally.
Never abuse anyone, including the emotional abuse of blaming others for your mistakes. Kindness is more important than correctness.
Let our TAs be students when they are not on the clock as TAs.
We always hope everyone will behave honestly. We know we all are tempted to do what we ought not; if you do something you regret, the sooner you tell us the sooner (and more leniently) we can correct it.
If you consult resources other than course material in the performance of any course assessment (including quizzes and homeworks), you must cite any and every source you consult in the comments of the quiz question or program file. Talked to a friend, saw an interesting video, consulted a website, had a tutor? Tell us!
Quizzes may not be done in groups or in consultation with any resource that did not exist prior to the quiz being posted.
Code must be written on your own. Do not show or read your code to anyone other than course staff. Do not seek out or view others’ code, in or out of the class.
Remember: we don’t care about your code or quizzes in and of themselves; we know the answers and have reference implementations already. What we care about is the changes that occur in your mind as you work on them. Don’t cheat yourself out of the gains these assessments are designed to provide.
If we believe you have acted dishonestly, we will communicate this fact to you and propose a penalty. If you have information we lack, please share that with us; we may thereafter change our belief and/or proposed penalty.
If we are not able to come to an agreement, or if the case is particularly egregious and beyond our comfort level handling in-course, we will instead refer the case to the University Honor System and abide by their findings.
If you qualify for accommodations from the SDAC, please let your professor know, preferably in a private conversation so we can discuss how your accommodations will interplay with the content delivery and assessment structure of this course.
We fully support the university’s stance on accommodating religious observances. If such observances or other religious beliefs impact or are likely to impact your work this semester, please let us know as soon as you are aware of this impact.
All communication relies on shared context and understanding. Because no member of our course staff has the same context and experience as you, it is likely we will inadvertently say and do things you find confusing or offensive. Please let us know if this happens! We will do our best to learn and adjust so we can become better and more welcoming communicators in the future, and to do what we can to fix any problems our mistakes caused.
Bad things happen. People forget things and make mistakes. Bad days coincide with due dates. Students and their loved ones get sick. Etc.
If you believe that circumstances warrant an change in deadline, a second chance, or some other accommodation in order to more accurately synchronize grade with knowledge, talk to your professor and we’ll resolve the situation as best we can.