Hi! My name is Eduardo Ochs. I'm the author of
an obscure package called eev and I
think that it's better to start this
presentation by the middle of the story -
by this word here: Maxima.
Maxima is a computer algebra system
that has several interfaces. One
of them is WxMaxima, that looks very
modern and is very pretty, and it
looks like this...
it's a cell based interface. We can type
an expression here and execute it...
here's the result.
But I don't like that interface
because my memory is very bad, and I type
very slowly and with lots of mistakes...
so for me this ugly interface that
I'm going to show now is much better -
and here I'm going to show how I am teaching
that ugly interface to beginners.
If I type f8 on these three lines here
it creates a Maxima running inside Emacs -
I mean, using a terminal and running inside
a shell buffer in Emacs...
and if I type f8 on this other the lines here
the 'f8's send lines to Maxima, and, ta-daaa,
this small program drew this.
I live in Brazil and people in
developed countries cannot imagine
how are the beginners that we have here...
in a sense Brazil is another planet.
Let me explain why, and also let me
explain why Maxima, why Emacs... because
people always say "you should use
programs that everyone finds intuitive,
like VSCode"...
well, I teach Calculus in a bad Campus
of a good Federal University in Brazil.
My university is called UFF, for
Universidade Federal Fluminense.
The main campus of UFF is in Niterói,
that is a big city near Rio de Janeiro,
and I work in a city called Rio das Ostras,
that is is a small city 200 Kms away
from Rio de Janeiro.
I started working there in 2009.
My campus gets very little funding -
that's a long story that I don't have time
to tell now - and we get the
students that don't get enough marks in
the admission process to go to better places.
Also, my campus has two institutes -
I call them The Institute of Humanities
and The Institute of Inhumanities.
Each of our institutes has a small building...
the Humanities building has lots of plants and
lots of graffittis - I call it the Good Building -
and the Inhumanities building has lots
of rules and prohibitions, and I call it the
Evil Building.
I heard that the Inhumanities building
has a laboratory with computers, and that
it doesn't have any machine that runs Linux...
but the Inhumanities building is
shrouded in mystery, and basically
humans avoid it - only inhumans go there.
I only discovered how much "another planet"
Brazil is a few months ago. In May and June
of this year the federal universities in Brazil
paralyzed their activities in a nationwide
strike for two months, and during the strike
the humanity students occupied the
Humanities Building and organized lots
of activities there.
They asked me if I could give some workshops
and I offered two hands-on workshops
on Free Software for beginners -
basically on Emacs and eev, with
tutorials with lots of "try this"s...
and, as usual, the students of
Computer Science and Engineering ignored
the workshop completely, and didn't come...
but some students of psychology and of
Producão Cultural, which is basically
techniques for producing cultural
activities, came to workshop... and they LOVED
the workshop - they found it FUN.
And after the workshop I told the
students that there are lots of things
that, uh, "everyone knows and I don't",
and I would like to learn them,
but I find them too hard to learn by myself
because I'm a dinosaur - I'm only used to
interfaces that are very old,
and that are not graphical... and one
of the examples of the things that I
would like to learn was Canva.
And then the student of Produção Cultural
taught me Canva in 10 minutes,
AND THAT CHANGED MY LIFE.
Anyway, again, I'm working in that place,
Rio das Ostras, since 2009,
and the Computer Science students
here know lots of programs and languages
that I would like to learn, but in all
these 15 years the Computer Science
students only helped me twice.
It turns out that our Inhumanities
students don't have a culture of sharing
and helping - but our Humanities students do.
Another detail about how much Brazil
is another planet...
well, I only discovered this very
recently, too... my research is in Logic,
I sometimes go to conferences, usually in
Brazil, very rarely outside, and people
here don't bring their laptops to the
conferences - we don't have a culture
of sitting together with friends
or colleagues to learn with them how to
use the programs that they use...
for example, many of my friends
are logicians, so they have to draw
lots of diagrams, and I don't know how
they use their programs to draw diagrams...
I don't know how things are in
universities with good computer labs but,
anyway, consider these sentences
sentences that sort of everybody says...
"Everyone knows VSCode",
"Everyone knows Jupiter Notebooks",
"Everyone draws diagrams with Quiver"...
Here these things are not true -
and they are not relevant -
here knowledge about programs does not
propagate... and
one of my goals in life is
to become friends with some people who
know how to use for example, code blocks
in Org, and JavaScript, and learn some of
their workflows... or, rather one of my
goals is to become someone who deserves
help.
More on Maxima for students...
remember: our inhumanities students
don't have a culture of sharing and helping
but our humanity students do...
I've been telling my students - I teach
Calculus 2 and 3 here -that they will learn
much faster if they learn Maxima,
and that people who learn Maxima can take
an optional test and earn extra marks
in the course, but if they behave
as typical inhumanities students -
I mean, not asking questions and
not helping their colleagues -
then I won't help help...
Actually it's even worse. I've
told my students that my documentation
is not good enough yet and every
question helps me a lot, so PLEASE ask
questions, and I've bagged on my knees...
and now I can treat students
who don't ask questions as people who
won't help someone that they know
who is begging on his knees!
Now let me explain another word of
the title of this presentation.
The title of this presentation is
"Emacs, eev, and Maxima - Now!"
The "Now!" in the title means:
in less than one hour and even for people
who have never seen a terminal in their lives.
Well, my title is a slight exaggeration...
it only took less than one hour
for one person, who is a school kid
from a small City in the North of Brazil,
who didn't know anything about programming,
but who was competing in the local
Math Olympiads, so not a typical person...
Now let me tell a story based on
real events and based on a real student.
The student said: "I have Linux on my
laptop, can you help me to do blah1?"
I answered: "Sure, do blah2 and blah3..."
this was all by chat, I don't remember if
by WhatsApp or by Telegram...
then one week passes, and the student
talks to me again, and the student says:
"It doesn't work!", and I answer:
"What happens when you do blah4 and blah5?"
another week passes, then the student reappears,
and he says: "It doesn't work!"
and I answer: "Type blah6 and blah7 in
the terminal, press ENTER, take a
photo of your screen... remember, not a
screenshot, it's a photo of your screen...
and send it to me." Then the student
disappears again, another week passes and
the student reappears and says:
"How do I open a terminal?"
Well, then...
PLONK.
According to the Jargon file "plonk" is
the sound of that a newbie makes as he
falls to the bottom of a kill file.
I prefer this simpler definition here...
for me "plonk" is the sound
that a person makes when he, or she, or they
hits the bottom of my list of priorities.
I've been using this slogan with my
students - it sounds much better in
Portuguese, sorry... "I am not a telepath,
and for me it is 100 times harder to
discover the doubts of people who don't
talk to me than to discover the doubts of
people who do talk to me.
There's an interesting thing here in
this presentation by Abelson and Sussman.
Let me explain now this word of
my title, "Emacs"...
and the idea is that learning Emacs can
mean many things, learning Lisp can mean
many things, and in this presentation...
oh no, one second...
sorry, back.
In this presentation they say...
"anyone can learn Lisp in one day,
except that if they already know Fortran,
then it will take three days".
And I would add: and if the person
is starting with Doom Emacs then it would
take take five years.
Why? Because the person is using
a different notion of Emacs,
and a different notion of Lisp.
The person is starting by spending five
years learning how to configure Emacs, and
the person is using Lisp as a very weird
configuration language.
Usually the people who start by Doom Emacs
they start by configuring Emacs,
and only then they learn things like
defun, etc...
and another slogan that I use a lot
with my students is that there are
many cases in which learning just the
thing B takes 200 hours but learning
A and then B takes just 20 hours.
Here are some kinds of beginners
that I do not want to help.
First example: a person who says "I can't
read that page - it has too many links".
Second example: a person who says
"I don't want to read anything and
I don't want to learn anything,
I want something that just works".
And third example: "I don't want to
look at examples, you need to summarize
everything to me in one paragraph".
There are more explanations on
these kinds of beginners at my page
about this presentation - here.
And here is one kind of beginner
that I really want to help.
Beginners that are nerdy kids
who are used to:
reading materials that are too advanced for them,
understanding only a few percent of what they read,
remembering just a tiny fraction of what they read,
going to back to these materials later,
and taking notes about what they read...
and who are also always interested in
experimenting with new ways of taking notes,
transcribing, summarizing and saving links
to primary sources.
I'd like to say something about how
I've been plonking the paragraph people...
who are the people who say:
"I don't want to look at examples,
you need to summarize everything to me
in one paragraph".
Well, I'm a mathematician...
I work with lots of things
that can only be summarized in a paragraph
if we choose the level of who
we are talking to...
so we have many different
one-paragraph summaries,
one for each level...
and in many cases this sentence,
"you need to summarize it
in one paragraph", is WRONG -
the person means I want to learn a lot
in 10 minutes - and this needs diagrams
animations, AND EXAMPLES.
This is an example of something
in mathematics - in category Theory -
I only understood after too many time -
after zillions of years...
It is called The Yoneda Lemma.
This is the general case -
this small thing here...
but I only understood it after
understanding many particular cases, and
then organizing them in a way in which
different figures had similar shapes...
and the textual explanations
for the Yoneda Lemma - the one paragraph
explanations, or the many paragraph
explanations - never helped the much...
they contained formulas...
in mathematics, but written linearly...
that had too many symbols...
and my mental buffer is very small...
and I had to find several tricks to reduce
the cognitive overload of all these ideas.
For example, I had to name the symbols
consecutively, like A, B, C,
so there's a kind of a temporal order
in which the symbols that appear first
have initial letters...
I had to find a way to put
an archetypal case and the general case
side to side -
they have the same "shape"...
I had to find good conventions
for fonts and types...
I had to choose good meanings
for what it means...
sorry, for what are vertical arrows,
what are horizontal arrows, and so on...
and what is "above without an arrow"...
So, how much detail should we include
in our technical explanations?
Well there are many measures
for cognitive (over)load...
For example, I asked many technical questions
on the Maxima mailing list
that got answers that included
snippets and names of of Lisp functions...
in Common Lisp, because Maxima is written
in Common Lisp... and I liked that...
and I asked some some technical questions
on the Org mailing list
and on the Hyperbole mailing list,
and usually I got answers
that avoided the technical details...
note that I chose the term "avoided"
to denote frustration...
by the way, if one of my students panics
on this part here...
"After setting the user and password
you will get a Unix prompt"...
if the student panics on this
and does not know what to ask
and just gives up, then...
plonk.
So... I was talking a lot about
plonking people...
What's left after plonking many people?
Well, several kinds of beginners
that I want to interact with...
note that "kinds" is plural...
Also, I get a definition for the term
"beginners"... think on books...
technical books, that start with
"This book is written for the persons
of the types such and such"...
Maybe several definitions
for the term "beginners"...
also, a metric that lets me choose between
options A, B and C when I'm trying to
write material for my beginners...
for example, here, again...
should I explain what is a Unix prompt?
No!!!
Why "no"?
Well, let me use another example.
This one I took from a discussion on IRC...
we were helping a certain beginner
that was there...
and one person suggested to the beginner
to do this: type M-:, and then this
thing here, and then ENTER.
And I suggested this instead.
Copy this expression to your notes,
and then type C-e C-x C-e...
and the mnemonic for C-e C-x C-e is
C-exe, for "execute".
And then... for me the option 1,
this option here, is very costly,
because the person has to type a lot
without errors,
and then after running that
and reading this page here...
the way of going back to that page is gone.
So the person has to commit lots
of information to memory -
either the person learns from this page
everything that she needs or the person
memorizes how to go there the next time....
and for me the option 2 - this one:
put this in your notes and then
execute it with C-exe -
is much better, because the person
commits information to notes,
and the person learns a way to return
to this node of the manual later...
and with this the person learns
another way to use her notes.
I have a lot of material about that...
see for example this page here -
there's a link to it
in my page for this talk...
also, I live in a place in which
the people who find my instructions
too complex or too boring
disappear - either for months or forever...
So if I give an instruction
that the person cannot understand
and the person gives up
I lose the person...
Now let me do some things in a weird order.
In a normal presentation this would be
the conclusion, and it would be presented
at the end...
but I will present it now,
before the technical details.
So, I was teaching Emacs, eev and Maxima
for students... did it work well?
Well... sort of, but in a weird way.
Many students decided to take my test
on Emacs, eev, and Maxima...
let me consider only the 35 students
in the two last semesters that were able
to do what I asked, that was to use a link
like this one to go to my notes...
they had to go to a specific small program
in Maxima, copy that program to their notes,
modify it a bit to make it solve
a slightly different problem,
and then save the new program.
So it was mostly a test on the interface,
and to test if they knew some
very basic things on Maxima...
but of these 35 students only 10 students
asked questions on the Telegram group...
Mostly they discussed
with other students...
sometimes live - they would bring
their laptops to the university to discuss...
they only do that very rarely,
but they brought it...
other times they would discuss
with their colleagues on Discord...
but I got very little feedback
for my usability test.
So my experiment failed - in the sense
that I didn't get the feedback
that I expected - I only got a fraction
of the feedback that I expected...
...but I learned lots of things.
Well, I got very angry, very frustrated,
but I saw that I can't invest a lot of energy
on students who... how do I say?
who "won't talk to me".
then I decided to make contact
with some schools - secondary schools -
and to make a long story short...
in one of the schools I was
very well received...
the students asked lots of questions,
and in the middle of the discussion
we were discussing this little program here,
that splits the the frame in two windows
and displays the file ~/HELP
in the window at the right...
and I showed them Elisp tutorial,
that starts... here...
and right in its third section
it explains 'quote'.
So, I had to explain to them
how we can use quote to pass...
to avoid evaluating a program...
we can use quote to pass unevaluated
programs as arguments...
and quote blew their minds,
and I was amazed by their questions,
and I saw more clearly that the campus
in which I work is a hole,
and that I need to do more things outside.
Now let's see some technical details.
What exactly am I teaching to
these students?
Basically, my old tutorial for eev
was this one... it started with a
section on installing eev, and then it
explained Lisp, and how to use
elisp hyperlinks...
and then lots of other things...
but I'm using this new tutorial here,
that I am not announcing in many places
because I wanted to test it a lot
before making it very public...
and it starts with other installation
instructions, that start with
instructions for installing WSL
on a machine with Windows,
and then installing Debian there
and then after that people have to install
Emacs, and then they have to install eev...
And I'm also using this map here,
that I'm reorganizing,
so it's going to change a lot
in the next days...
it has a 2-dimensional map here,
and it has lots of things that I'm putting
in a single place to make it easier
to answer questions, and to show
to the students that I have answers
for the most common questions...
Remember, my target audience
is mostly composed of beginners who have
never seen a terminal in their lives,
and that get bored very quickly...
and when they get bored they disappear.
What are my main goals for the first day?
I want them to "install everything",
where "everything" means WSL on their
Windows machines, then Debian, Emacs, eev,
lots of Debian packages that they install
with this block here...
After that they need to run
some Maxima programs, and some test blocks...
and configure Emacs, and create a first set
of executable notes, and I consider
that after that the person is
autonomous.
I said that the students
learn how to "Run some Maxima programs".
Let me be more precise about that.
The first step is something
that I call "The 5-minute workshop"...
it happens in the classroom,
on my laptop, and I make the students
run this.
Actually in a first moment I run
this thing here, and then I ask them
to run it themselves.
So: I type f8 on these three things here,
we get a target buffer running Maxima,
then I type f8 several other times here...
when I type f8 here it opens a GNUPlot
window, that I have to close
by typing 'q' here...
and that's it. And then I say:
now it's your turn. And the students go there,
they type f8 three times, and then they
type f8 f8 f8 f8 f8 f8 f8 q f8 q...
The second step is similar -
is another individual workshop,
also just a few minutes long,
in which they learn how to access my notes.
My notes on Maxima are here -
I mean, this is the HTMLized version...
it starts with a header, then a huge index,
then many blocks like this...
and this is a specific block that corresponds
to the thing that we we ran
in the first 5-minute workshop.
And in this second 5-minute workshop
they run the instructions in this section...
usually I skip this thing in the first moment,
then I explain it to them...
and they run something like this,
that downloads a copy
of my notes on Maxima,
puts that copy in a temporary buffer...
and they can run the thing here
exactly in the same way as before...
And I also ask them to run the small
Maxim programs in other blocks,
like this one, for example...
if we run this it calculates the solution
of a question that I put in a test
one or two semesters ago...
it starts by calculating several integrals
and then it organizes all the solutions
in a big Matrix like this...
I said that at one point the students
have to install lots of Debian packages.
This happens after they have installed
Debian, then Emacs, and eev...
and they already know a bit about eepitch,
so they are in this section of the
instructions, and they just have to type
f8 here several times and watch what
happens...
after that we have many options,
and I have this map here and I usually
choose a path according to the interests
and the questions of the students...
and there are many things that can go wrong,
so this page also works as as a place
in which I put all my troubleshooting
instructions...
and if a student has a question...
I mean, suppose that the student is
talking to me by WhatsApp or Telegram,
and the student is saying:
okay I installed the things such and such,
and I tried the thing blahblah, and
something went wrong...
and I say: ok, can you send me a screenshot
or a photo of your screen?
And then we can troubleshoot that
by using a section of this page here.
This is a work in progress,
I'm reorganizing this thing for
the 10th time...
and the rest of what can happen
with these students can't be explained
clearly in a video... so I'm going
to put the all the other stuff in the
page of the video, and I'm going to stop
the video here.
So: thanks, and bye!