# Our tools

We are going to start working in the [Jupyter Notebook](https://jupyter.org).
This is an *interface* that allows us to interact with the
[Python](https://www.python.org) programming language.

There are many ways of installing Python and the Jupyter Notebook.  The
best way of installing Python depends on many things.  For this iteration
of the class, we installed Python using the [Anaconda
distribution](https://www.anaconda.com/distribution).  We discuss this
more below.

## Python

Python is a [very popular](http://pypl.github.io/PYPL.html) programming
language that is [growing
quickly](https://stackoverflow.blog/2017/09/06/incredible-growth-python).

It is free and open-source.

Among its advantages are:

* Python code is famously easy to read and write;
* As a result, it is a popular language for teaching, in schools and
  universities.  Just for example, the [Raspberry
  Pi](https://www.raspberrypi.org) computer is so-named because many of its
  teaching materials are in Python.
* It has a very wide range of libraries, including many libraries for
  tasks in science, such as data analysis, statistics and visualization.
  For example, there are libraries for designing and running Psychology
  experiments.
* It is widely used in teaching, science and industry.
* Because it has a large open-source community, it is easy to find other
  people working on the same thing as you, in Python.  The community has
  a strong background in good practices for code, such as testing, and
  writing code that is clear and simple.

For a comparison of Matlab and Python, see [this blog
post](http://asterisk.dynevor.org/python-matlab.html).

## The Jupyter Notebook

We will soon here more about the Jupyter Notebook.  It is a particularly
easy interface to run Python code, and display the results.

The Notebook has two parts.  The first is the web application, that you
interact with.  This is the web *client*.   The web client then sends
commands to another process on your computer, called the *kernel*.  The
kernel runs Python.  The client sends Python commands to the kernel, and
the kernel runs the commands, generates the results, and sends any output
back to the client for display.  Outputs include the display of values,
and plots from plotting commands.

The Notebook is just one way to run Python commands; there are many
others, and we will cover some of these later in the course.  The notebook
is a particularly good way of running code for beginners, because it gets
you started very quickly, in a familiar interface (the web browser).  As
you gain experience, you will find that you will outgrow the Notebook,
because it is not a good interface for writing more than a small amount of
code.  When you get there, you be much more efficient using a good code
editor, such as [Atom](https://atom.io).

## Installing Python

As we said above, there are many ways to install Python.

Which way you choose will depend on factors such as:

* How much you are using Python;
* What operating system you are running (macOS, Windows, Linux);
* What method your colleagues are using.

The method that many people use for courses such as this, is to use
[Anaconda](https://www.anaconda.com/distribution/) to install Python and
various important Python libraries.

Anaconda is an application that can install Python and various libraries with a few clicks.  It is built and maintained by a company, also called Anaconda, but they give away the distribution for free, for various reasons.

Anaconda is a good option for Windows, because Windows is a relatively complicated platform for building code, such as Python and its libraries.  As a result, some of the other methods of installing Python libraries do not work as well on Windows as they do for other platforms.   Because Anaconda works on Windows and Mac and Linux, it is easier to deal with installation problems for a class; everyone is likely to have similar problems, and you (the student) will be using the same installation as us (the instructors).
