University of Pennsylvania
Speed reading techniques base on Rapid Serial Visual Presentation (RSVP) have gained popularity recently
thanks to a proliferation of speed reading apps such as such as Spreeder and
Spreed and companies such as Sprtiz
that are bringing speed reading to a variety of devices and platforms.
However, while some people espouse the benefits of these apps, their actual
effectiveness is questionable as there
has been little in the way of substantial research that investigates their effectiveness.
Thankfully, RSVP speed readers are simple applications that we can prototype and play with. In this assignment,
students build their own prototype speed reader applications, extend their speed reader in various ways, and then
assess the effectiveness of their speed reader by running small-scale experiments on themselves and their friends.
Sample write-up. This version of the write-up (for a CS1 class employing pair
programming) corresponds to the python2-tk solution below. The write-up also includes instructions to the
students to perform small-scale usability studies assessing the effectiveness of their speed reader. The evaluation
is a nice perk of the assignment if you want to explore some HCI concepts but is not essential.
Sample implementations in Python: python2-tk/speed_reader.py,
python2-curses/speed_reader.py. Brief notes on the curses-specific
bits can be found in python2-curses-notes.txt.
Students build a speed reader that displays text files using Rapid Serial Visual Presentation (RSVP) and test the
effectiveness of RSVP by running small usability studies on themselves and their friends. Students practice core
CS1 skills (file IO, string processing, graphics) and gain exposure to interface design and evaluation and the
science of speed reading.
||File IO, string processing, graphics, animation
Intermediate. The core speed reader with several extensions served as a reasonable weekly homework assignment for
my summer CS1 course.
Relatable: Everyone knows how to read, and most people like reading and wish they could read
faster. This is especially true of undergraduates that are likely inundated with required reading while they
are working on this assignment.
Engaging: After implementing their own speed reader and trying it out, my students were
amazed that (after some practice) they are able to read at high WPM rates. They then naturally ask the
question "am I actually comprehending what I am reading?" which leads nicely into the evaluation portion of
Extensible: The basic speed reader is simple to implement. The base program can serve as a
lab assignment or in-class exercise. However, various extensions give it more depth. Also, after students
try out their speed reader, they tend to brainstorm even more ways to make their speed reader better which
gives ample opportunity for bonus credit.
Plentiful Data: By design, the speed reader works over plain text so students can pull in
data from a variety of sources to test their speed reader, for example, from Wikipedia or Project Gutenberg.
The can also convert their own PDFs and ePUBs to plain text using Calibre
or a free online document converter.
Requires Graphics Libraries: The speed reader itself is a graphical application and requires
some way to display text and animation, for example, a GUI or TUI library (examples of which are provided in
Python). Skeleton code can alleviate the boilerplate that commonly bogs students down with these libraries,
but the application is already fairly small as it is (60-70 lines of Python code) so providing such support
may not be desirable.
Some Hackiness: Depending on the library used, different tricks are necessary to achieve the
effects required for the speed reader. These tricks tend to not be particularly elegant—using monospace fonts
in lieu of having a way to measure the size of a rendered string—and may feel fiddly and tedious to the
A GUI or TUI library to render and animate text, for example, Tkinter in Python, Swing in Java, or an
The evaluation portion of the assignment can be minimized or cut altogether in the interest of time. Note
that students will naturally want to know if what they built is actually effective for real-life reading, so
it is worthwhile to have some discussion about usability even if you don't make it a formal part of the
The are numerous extensions for students to implement and test on top of their basic speed reader. Some ideas
are given in the sample write-up. Some additional ideas:
- Indicators for paragraph breaks.
- Pruning of citations from Wikipedia article text.
Students can also be tasked with creating a more elaborate interface, for example, controls for starting and
stopping the reader or changing the font size.