Emacs, eev, and Maxima - now!
Eduardo Ochs - IRC: edrx, http://anggtwu.net/, @eduardoochs on Telegram, eduardoochs@gmail.com
The following image shows where the talk is in the schedule for Sat 2024-12-07. Solid lines show talks with Q&A via BigBlueButton. Dashed lines show talks with Q&A via IRC or Etherpad.
Format: 31-min talk ; Q&A: Etherpad https://pad.emacsconf.org/2024-maxima
Etherpad: https://pad.emacsconf.org/2024-maxima
Discuss on IRC: #emacsconf-dev
Status: Q&A open for participation
Saturday, Dec 7 2024, ~1:45 PM - 2:05 PM MST (US/Mountain)
Saturday, Dec 7 2024, ~12:45 PM - 1:05 PM PST (US/Pacific)
Saturday, Dec 7 2024, ~8:45 PM - 9:05 PM UTC
Saturday, Dec 7 2024, ~9:45 PM - 10:05 PM CET (Europe/Paris)
Saturday, Dec 7 2024, ~10:45 PM - 11:05 PM EET (Europe/Athens)
Sunday, Dec 8 2024, ~2:15 AM - 2:35 AM IST (Asia/Kolkata)
Sunday, Dec 8 2024, ~4:45 AM - 5:05 AM +08 (Asia/Singapore)
Sunday, Dec 8 2024, ~5:45 AM - 6:05 AM JST (Asia/Tokyo)
Description
I teach Calculus in a bad campus of a good federal univeral in Brazil. The main campus of that university is located in a big city and has lots of resources, and I work in a small campus, that is in a small city, and that has few resources - and we get the students that don't get enough points in the entrance exams to go to better places. In this presentation I will show how I've been teaching Maxima, and Emacs, and eev, to my students.
With very few exceptions my students are "beginners" in a sense that is inconceivable in developed countries - they're not people for whom things like spreadsheets, Jupyter Notebooks, and VSCode are "intuitive"... most of them have never seen a terminal in their lives, and many of them have so little familiarity with computers that they don't know, for example, that keyboards have a key called F8.
It turns out that if we define "beginners" in the right way - hint: not by statistics! - then we can find a way to present Maxima, and then Emacs and eev, that makes all sense to the "beginners" in my classes, and that approach lets them install everything and become (sort of) autonomous very quickly. A few students were able to install everything - WSL, Debian, Emacs, eev, Maxima - and run the examples in about one hour; most others took between one hour and two hours, and some others had to plonked.
http://anggtwu.net/emacsconf2024.html
About the speaker:
Eduardo is the author of an Emacs package called eev, that is a way of creating "executable notes" that apparently makes very little sense to people in developed countries. In this talk he will show how he has been using Emacs and eev to teach Maxima to his students in Brazil, who - with few exceptions - have very little experience with computers, and who are not the kind of "beginners" for whom programs like spreadsheets and VSCode are "intuitive".
Transcript
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!
Questions or comments? Please e-mail eduardoochs@gmail.com