With colleagues, have been working on languages, programming, environments, and education for 20+ years.
The first time a met Fernando, I mentioned that the notebook must have a spelling checker. So that was our first contribution. (BTW, the world's first spelling checker was written by a Bryn Mawr College graduate, Martha Evens).
%lsmagic
Available line magics: %activity %cd %connect_info %conversation %dot %download %edit %get %help %html %include %install %install_magic %javascript %jigsaw %kernel %kx %latex %load %ls %lsmagic %macro %magic %matplotlib %parallel %plot %pmap %px %python %reload_magics %restart %run %scheme %set %shell Available cell magics: %%activity %%brain %%conversation %%debug %%dot %%file %%help %%html %%javascript %%kx %%latex %%macro %%pipe %%processing %%px %%python %%scheme %%shell %%show %%simulation %%time %%tutor
Need to force students to write text. Very different from writing small, short comments.
When used in the writing seminar, students forgot how to write. The notebook interface was a shock. I was hoping to build on their knowledge of writing text/markdown to bootstrap into "computational thinking."
I have a vision that our firstyear writing seminar could embrace some data visualization, if not computational thinking. Imagine elevating computing the the level of reading and writing. For everyone!
Telling a story comes more naturally to Data Science (including Physics and Biology). Not so much for computer science students.
%%tutor
numbers = list(range(10))
for i in numbers:
numbers[i] += 1
%activity /home/dblank/activities/activity3
Received: Results
%activity /home/dblank/activities/learning
Jupyter is very hackable. JavaScript on the front end; Python on the backend.
Students can't write using the notebook without explicit instructions. Making analogies with writing can build on what they know about text (cut and paste, top to bottom, etc.) Student writing can give insight into their lives.
Physics and Biology professors are interested in different stories than computer scientists.
Consider:
data = [[1, 2, 3, 8],
[4, 5, 6, 7],
[5, 2, 7, 2]]
Non-CS instructors likes to write:
import numpy as np
np.mean(data, axis=0)
array([ 3.33333333, 3. , 5.33333333, 5.66666667])
Computer scientists like to write:
def mean(data):
avgs = [0 for i in range(len(data[0]))]
for row in range(len(data)):
for col in range(len(data[row])):
avgs[col] += data[row][col]
avgs = [num/len(data) for num in avgs]
return avgs
mean(data)
[3.3333333333333335, 3.0, 5.333333333333333, 5.666666666666667]
Why the difference? Computer scientists want to tell complexity stories, and see the loops. Non-CS users often just want to get the answer, and get it fast, in order to tell the resulting story. This translates into learning library interfaces, rather than general techniques. They are different stories, and there are pedagogical consequences.
Computer Scientists typically hate the notebook. Why? Mixes up time and dependencies. Very different from the idea of an IDE. State is hidden, and dependencies can be broken.
Consider:
x = 56 + 78
If you then edit that cell to:
y = 56 + 78
But x
is still defined!
A general CS resistance to notebooks:
Jupyter is a seed. It needs thoughtful educators to help build it into a pedagogical platform.
JupyterLab is on the horizon. Can we keep all of the benefits of the notebook?