Syllabus
COSC 225: Algorithms and Visualization, Spring 2023
Basic Information
Instructor Will Rosenbaum
Meetings
- Lecture M/W 2:00–3:20, SCCE A131
- Office Hours, SCCE C216
- Drop-in:
- Monday 3:30–4:30
- Friday 2:00–3:00
- By Appointment: TBD
- Drop-in:
Official Course Description
In this course, we will explore how algorithmic and aesthetic principles can be employed in concert to create interactive graphical content on the web. Topics will include design layout and combinatorial optimization, the geometry of color spaces, graph drawing, computational geometry, generative design, and visualization of data and algorithms. In addition, we will consider issues of algorithmic efficiency in performing computationally intensive tasks. We will investigate topics from both theoretical and applied perspectives. Students will code projects using standard web development tools: HTML, CSS, and JavaScript.
What Algorithms and Visualization is Really About
Algorithms and Visualization is not a course about web programming. Rather, it is a course about applying tools from web programming in order to explore, implement, and illustrate algorithmic concepts. The course focuses on understanding fundamental principles rather than learning the trendiest new JavaScript frameworks. As much as possible, we will develop programs from the ground up by elementary means.
The main conceptual theme that pervades this course is the interplay between algorithms and aesthetics. Many algorithms are beautiful. Yet the traditional means of expressing algorithms—as (pseudo)code or computer programs—often obscures the elegance of a procedure. Modern web programming tools allow us to generate interactive illustrations that depict, rather than describe, an algorithmic process. By creating thoughtful demonstrations of algorithms, we can illustrate their beauty in a way that is more impactful and accessible than traditional formal descriptions of algorithms.
Another dimension of the interplay between algorithms and aesthetics is the use of algorithms to desired aesthetic ends. When an aesthetic principle can be formalized or codified, we may be able to devise an algorithm to achieve the aesthetic end. Throughout the course, we will see examples where algorithms can be employed towards a desired visual impact.
Course Goals
The main goals of this course are:
- To develop technical proficiency with standard web programming tools.
- To learn to apply algorithmic techniques in order to (1) solve geometric problems, and (2) achieve desired aesthetic ends.
- To generate visualizations of data and algorithmic processes.
Readings and Resources
Required readings will be posted to the course website before each class. You will be expected to do the readings before class each day.
Readings for class will be assigned primarily from the Mozilla Web Docs (MDN). MDN offers extensive documentation and tutorials for web development that focus on fundamental principles.
More expansive (but sometimes less systematic) documentation is also available from W3 Schools. Some required readings will be assigned from W3 Schools.
The two resources listed above serve as extensive references and provide streamlined tutorials that cover most of the web programming material we will use in class. The textbook JavaScript: A Beginner’s Guide by Pollock is a more thorough textbook introduction to JavaScript. I recommend this text if you are looking for a more structured exposition of web programming:
Additional readings will be posted to the course website.
Expected Background
You are expected to be comfortable with implementing fundamental data structures in some object oriented programming language (e.g., Java, Python, C++, or JavaScript). If you’d be comfortable with the instruction “implement a binary search tree from scratch,” you are probably prepared for this course.
The course assumes no previous knowledge of web programming (e.g., HTML/CSS/JavaScript).
Topics
The main topics covered in this course are:
- Introduction to web programming
- HTML/CSS/JavaScript
- scalable vector graphics (SVG)
- jQuery library
- Color and color spaces
- Cellular automata
- Recursion and dynamic programming
- generating fractals
- optimal design layout
- Computational geometry and visualization
- convex hull
- k means clustering
- Graph drawing
- tree drawing algorithms
- force directed graphs
- circular graph embeddings
- Visualizing graph algorithms
Additional topics may be included as time allows.
Course Structure
Meetings
The class meets twice a week for 80 minutes. Class meeting time will be divided between a lecture component and small group activities. The activities will require you to program in class, so you should bring your laptop computer with you to class every day. It is essential that you prepare for class by doing the assigned reading as well as any mini-assignments for the class.
Coursework
Graded coursework is divided into the following categories, along with their relative weights in determining grades.
Programming Assignments (40%). There will be two types of programming assignments: mini-assignments and full assignments. Mini-assignments will typically consist of a short programming task to be completed before class. Mini assignments are to be completed individually. Full assignments are larger assignments that ask you to produce a larger program with more functionality. The assignment description will specify if the assignment should be completed individually or in pairs.
Final Project (35%). The course culminates with an open-ended final project. The project should be done in pairs.
Quizzes (15%). There will be occasional quizzes to check that you have internalized the concepts encountered in class. Quizzes may be in class or take-home. The topic and dates of quizzes will be announced the week before the quiz.
Participation (10%). You are expected to actively participate in class discussion. Excessive absences and/or disengagement will result in a lower participation score.
Late Homework Policy
Late homework is not accepted without prior approval, except in extreme circumstances. Mini-assignments must be submitted before class, as they are prerequisite to class engagement. In order to account for occassional absences, the lowest few mini-assignment grades will be dropped from your raw score when determining final grades.
Other Course Policies
Communication
The main course materials (slides, assignments, etc.) will be posted to the course website. Class announcements and discussion will be moderated on Moodle. All assignments should be submitted through Gradescope.
If you have clarifying questions about course material, policies, assignments, etc., that might be pertinent to other students in the class, please post your question to the Moodle discussion board. For individual questions, email and/or office hours are the best ways to get in touch with me. Please include the tag [COSC 225] in all emails sent to me about the course.
Collaboration
You are encouraged to discuss homework problems and work on assignments together. However, individual submitted work should be your work and yours alone. In particular, simply sharing completed work is not acceptable collaboration.
During quizzes, any form of collaboration and/or use of outside resources is strictly forbidden.
Attendance and Illness
You are expected to attend class regularly and actively participate in class discussion.
All students are expected to follow college guidelines and policies regarding COVID testing and masking.
- Unless you are sick or unable to attend, you should come to class.
- If you are sick, you should not attend class.
- If you are experiencing any symptoms of illness, please take a COVID test before attending and (if negative) wear a mask at all times in class.
As much as possible, I will make course materials available online to help mitigate the effects of absences.
Well-being and Accommodations
If you find that you are struggling due to factors that go beyond academic challenges, the Student Affairs office and Counseling Center have a robust set of options to help with your well-being.
If you require accommodations due to a documented disability, please contact Accessibility Services.
Academic Honesty
All students are expected to uphold the Amherst College Honor Code, in particular the Statement of Intellectual Responsibility:
Every person’s education is the product of their intellectual effort and participation in a process of critical exchange. Amherst College cannot educate those who are unwilling to submit their own work and ideas to critical assessment. Nor can it tolerate those who interfere with the participation of others in the critical process. Therefore, the College considers it a violation of the requirements of intellectual responsibility to submit work that is not one’s own or otherwise to subvert the conditions under which academic work is performed by oneself or by others.
Cases in which intellectual responsibility is violated (such as cheating) will result in loss of credit for an assignment and/or a failing grade in the course. Additionally, all suspected cases of academic dishonesty will be reported to the college, which may result in further disciplinary action by the college.