And many computational notebooks were created after the Maple and Mathematica notebooks. This section, however, will focus on the notebooks that have contributed to the rise of data science notebooks. You’ll see that some of these notebooks are still very popular among aspiring and more seasoned data scientists.

Other AJAX applications that you might know are, for example, Gmail, Google Maps, Facebook, Twitter,… As you can see, almost everything is AJAX.

This is, for example, true when you fill in a form on a website: without AJAX, you’ll be redirected to a new page, with new information from the server, when you hit the submit button. With AJAX, JavaScript will make the request to the server, get the results and update the screen. You don’t need to refresh, nor are you being redirected.

The creators of the Sage notebooks have confirmed that they were avid users of the Mathematica notebooks and Maple worksheets. Other motivations or drivers that were important when you consider the development of the Sage notebooks were the following: firstly, the developers had close contact with the team behind IPython, also because the terminal-based version of Sage used IPython. Secondly, there was “a failed attempt” by two students to provide a GUI for IPython, and thirdly, the rise of “AJAX” (a pseudo-acronym for “Asynchronous JavaScript And XML) web applications, which didn’t require users to refresh the whole page every time you do something.

The Sage notebook as a browser-based system was first released mid-2000s and then in 2007, a new version was released that was more powerful, that had user accounts and could be used to make documents public. It resembled the Google Docs UI design since the layout of the Sage notebook was based on the layout of Google notebooks.

IPython and Jupyter Notebook

In late 2001, roughly twenty years after Guido van Rossum began to work on Python at the National Research Institute for Mathematics and Computer Science in the Netherlands, Fernando Pérez started developing IPython. The project was heavily influenced by the Mathematica notebooks and Maple worksheets, just like the Sage notebook and many other projects that followed.

In 2005, there was a first attempt at building a notebook system with Wx, a widget toolkit and tools library for creating graphical user interfaces (GUIs) for cross-platform applications. Two Google Summer of Code students worked on the prototype under the direction of Robert Kern and Fernando Pérez. After, Robert put some more work into the problem. It was less of a notebook system prototype than a cleanup of the core IPython code with an eye towards making it easier to write a wxPython GUI frontend to the IPython shell. It was also those cleanups that helped to make a clean notebook system and some of these were merged in piecemeal to IPython as the finally-successful notebook effort got underway.

The second prototype for IPython was built in the summer of 2006 by Min Ragan-Kelley and advised by Brian Granger. It was web based and had an SQL database backend but work was discontinued because the implementation of it eventually proved to be too complex with web technologies of the day.

The third prototype of the IPython notebook came in October 2010 and was done by a third party on a few-day hack. Finally, as of the Spring-Summer of 2011, Brian Granger was working full time on the prototype of the web notebook, based on work that he did in 2010, where he created the IPython kernel architecture and message specification with Fernando Pérez and PyZMQ with Min Ragan Kelley.

PyZMQ is a library that provides Python bindings for ZeroMQ; This library was needed for IPython’s parallel computing features, qt console and notebook.

PyZMQ and websockets were the main technologies that made the notebook possible. By the Fall of that same year, other contributors (such as Matthias Bussonnier, Min, and Fernando) were contributing to it as well. By December 21, 2011, it was released as the first version of the IPython Notebook (0.12).

In subsequent years, the team got awards, such as the Advancement of Free Software for Fernando Pérez on 23 of March 2013 and the Jolt Productivity Award, and funding from the Alfred P. Sloan Foundations, among others.

Lastly, in 2014, Project Jupyter started as a spin-off project from IPython.

The last release of IPython before the split contained an interactive shell, the notebook server, the Qt console, etc in a single repository. The project was big, with components that were increasingly becoming more and more distinct projects that happened to pertain to the same project.

But note that the size of the project was not the only reason why Project Jupyter was started: from 2011 to 2014, the IPython notebook started to work with other programming languages. The first one to come through was Julia, and then later R. The fact that IPython notebook, which implied the notebook was solely Python based, was also working with kernels of other programming languages such as Julia and R, puzzled people.

Why was the name “IPython” if there were also other programming language involved?

The name “Jupyter” was inspired by thinking about the leading open languages for science (that is, Julia, Python, and R), and even though it might seem like any other acronym, it never meant that other languages weren’t welcome. What’s more, the name was a better representation of the project that the developers had been working on and nodded towards the project’s scientific roots!

After the Project Jupyter started, the language-agnostic parts of the IPython project, such as the notebook format, message protocol, Qt console, notebook web application, etc. were put into the Jupyter project. You can find the main Jupyter GitHub organization here.

In the Jupyter and IPython communities, this is called “The Big Split”.

IPython has now only two roles to fulfill: being the Python backend to the Jupyter Notebook, which is also known as the kernel, and an interactive Python shell. But this is not all: within the IPython ecosystem, you’ll also find a parallel computing framework. You’ll read more about this later on!

And just like IPython, Project Jupyter is actually one name for a bunch of projects: the three applications that it harbors are the Notebook itself, a Console and a Qt console, but there are also sub-projects such as JupyterHub to support notebook deployment, nbgrader for educational purposes, etc. You can see an overview of the Jupyter architecture here.

Note that it’s exactly the evolution of this project that explains the confusion that many Pythonistas have when it comes to IPython and Jupyter: since one came out of the other (quite recently), there are some who still have difficulties adopting the right names for the concepts. But what might be the even more complicating factor is the evolution: since one came out of the other, there is a considerable overlap between the IPython and the Jupyter Notebook features that are sometimes hard to distinguish! How to distinguish between the two will become clear in the next sections of this post. If you want to know more details about how the development of IPython came about, check out the personal accounts of Fernando Pérez and William Stein about the history of their notebooks.