IPython: The Attributes of Software and How They Affect Our Work


In [4]:
from IPython.display import display, Image, HTML
from talktools import website, nbviewer

Front matter


In [1]:
import frontmatter

In [3]:
frontmatter.logos()


Cal Poly is located in San Luis Obispo, CA, half way between LA and SF.


In [5]:
Image('images/slo_map.png', width=500)


Out[5]:

San Luis Obispo is a small university town near the beach with an agricultural history. It is a very nice place to write code.


In [6]:
Image('images/beach.png', width=500)


Out[6]:

IPython Project

IPython is an open source, interactive computing environment.


In [7]:
website('ipython.org')


Out[7]:

IPython was started in 2001 by Fernando Perez, who continues to lead the project. Over the last decade the project has grown to a dedicated and talented team of $\approx12$ core developers and a larger community of $\approx100$ contributors.

IPython has been funded by:

  • Volunteers (mostly)
  • NASA, DOD/DRC, NIH
  • Enthought
  • Rackspace
  • Alfred P. Sloan Foundation
    • 1.15 million dollar grant for 2013-2014
  • Microsoft
    • 100,000 in August 2013

Here are the core developers of IPython in 2013:


In [9]:
import ipythonproject

In [10]:
ipythonproject.core_devs()


Fernando Perez

Brian Granger

Min Ragan-Kelley

Thomas Kluyver

Matthias Bussonnier

Jonathan Frederic

Paul Ivanov

Evan Patterson

Damian Avila

Brad Froehle

Zach Sailer

Robert Kern

Jorgen Stenarson

Jonathan March

Software attributes

In this talk, I will cover many aspects of IPython, especially the IPython Notebook and its surrounding ecosystem. But that is not the main point of the talk. The main point is an argument about the attributes of the tools we use and how they affect our work. Here is the argument:

  1. Computing, and thus software tools, are one of the foundations of modern technical work.
  2. Like all tools, software tools have attributes.
  3. When humans use those tools, these attributes affect behavior and thinking.
  4. The technical work itself inherits those attributes through the behavior and thinking.

What are these attributes?

Fast, slow, cluttered, simple, complex, open, documented, tested, testable, buggy, robust, heirarchical, flat, single-purpose, multi-purpose, opaque, transparent, etc.

How are attributes different from features?

I am not sure, but the attributes I want to talk about today are more conceptual and abstract than most things I label with the word feature. But, maybe they are the same thing.

Can you give an example?

If you are doing science using software that is cluttered, slow and buggy, your science is going to be cluttered, slow and buggy. More importantly, your frustration will affect your thinking and restrict technical progress.

How about a more concrete example?

A sponge is a tool that can be used for washing dishes. It has the attributes of being slow and cheap.


In [11]:
Image('images/sponge.jpeg', width=300)


Out[11]:

A dishwasher is also a tool for washing dishes. It has the attributes of being fast and expensive.


In [12]:
Image('images/dishwasher.jpeg', width=300)


Out[12]:

How do these attributes of slow/fast and cheap/expensive affect human behavior and thinking?

  • If you live with others, using a sponge encourages you to talk to each other ("I'll wash, you dry") as you do the dishes.
  • If you live alone, using a sponge can give you time to reflect and think.
  • If you are really busy, using a sponge can lead to frustration.
  • If you use a dishwasher, you have more time for other activities.
  • If you use a dishwasher, some of that extra time goes into working more to pay for it.

As another example, Edward Tufte has written a beautiful essay on how the attributes of Microsoft's Powerpoint Software affect the quality and nature of presentations.


In [13]:
website('http://www.edwardtufte.com/tufte/powerpoint')


Out[13]:

Attributes of IPython

Conclusion

  • Software tools, through their attributes, affect and influence our behavior and thinking.
  • With IPython, we are deliberately designing for attributes that will improve the character of scientific computing and data science.
  • If you want to change to character of your technical work, have a look at your tools.
  • If you find tools lacking, please join our community and help out!

Styling


In [14]:
%load_ext load_style

In [15]:
%load_style talk.css



In [ ]: