This page lists web sites, PDF documents, Jupyter notebooks, and Python packages that have been mentioned during the course.

It’s not an attempt to list everything related to each of those topics; just to collect those resources that have already been mentioned into one place.

It is a companion to the Recipes page.


Stack Overflow is a community of programmers, and a knowledge base of programming questions and answers. You can search it directly from its site; it also shows up in Google search.


Python References

Learn Python

Python Style Guides

Python Packages


Atom Reference

Atom Tips

These have moved to Atom recipes.

Atom Packages is like Google Docs for Atom. It enables real-time collaborative editing of a single Python file from two or more computers.

Command Line



Also see Git recipes and Reading Journal instructions.

Git Reference

Learn Git

Git Tutorials From Past Semesters

Git & GitHub presentation (thanks: Chris)

One-page cheat sheet (PDF, thanks: Celine)

Digging Deeper



UML Diagrams

Diagram Types

There are a number of types of UML diagrams. For this class, the most useful are:

Depending on your project, these may also be helpful:

Diagram Type Directories

These online references variously include examples, text descriptions, and discussions of when to use each one.

UML Distilled, by Martin Fowler, is more involved reference that also has a lot of good material for how to think about programming in general. It’s available at the Olin Library.

Making Diagrams

Drawing by Hand

Any of the Olin printer/scanners can mail a scan to you. For a diagram, taking a photo from a recent phone will probably work just as well.

Slide Tools

For simple diagrams, you can get by with the draw tools in PowerPoint, Keynote, or Google Slides.

Diagramming Software

Text-based diagram tools.

PlantUML produces an image from a text description. It can create a variety of different kinds of diagrams, shown on its home page.

Mermaid is (IMO) easier to install and use, and produces several useful diagram types, but not class diagrams.

There are Atom plugins for PlantUML and Mermaid, that display the image in one pane while you edit the text in another. I’ve used the Mermaid plugin.

GraphViz is a general-purpose text-to-graph program. It’s not specific to, and doesn’t know about, class diagrams or UML, but can be used for this. It’s a useful tool to have in your toolbox.

“Reverse-Engineering” Tools

These are tools that create UML diagrams from Python sources.

The PyCharm Python IDE (Integrated Development Environment) has this feature. I’ve heard that quite a few students in the Olin community use PyCharm; I don’t know that any use this feature.

Standalone tools include Epydoc, Pyreverse, and Allen’s own Lumpy. A longer list is here.

These appealing, but I’ve found it more helpfully for understanding a pile of code that has been left, without adequate docs, or your doorstep, than for designing of documenting your own code. Done properly, a diagram is expressive and reflects intent: how you position elements, what you leave out, focus on and emphasize different elements in your design. Just as writing prose documentation for your code can lead you to realize how you should have written it (and cause you to go back and revise it, if you’ve got time), the process of creating a diagrams can help you design your system. Tools that run on code that’s already written, and make diagrams mechanically, don’t come out as well, and deprive you of those benefits.