Why SageMath?
Dan Drake
First, I'll say a bit about how I use SageMath: in the first place, I use it for my own research,
and also use it for my teaching -- I've used it in calculus and differential equations
courses, and next semester will use it in a discrete math course. Mostly I use it in my lectures
to do demonstrations, but someday I hope to incorporate SageMath into the homework.
Free-as-in-beer means:
I can install it anywhere I want -- my office computer, my laptop, the computer in the lecture
hall, anywhere. I spend exactly zero time wondering if what I'm doing is allowed by the site
license, wondering when we'll get the next version, and so on.
Free means my students can use it. At the university where I went to graduate school, we used
Matlab and Mathematica for our engineering calculus courses. During the first week, I would walk
around the computer lab pretending not to hear everyone say 'if you want to use it at home,
just go to [whatever site/service is popular for pirated software] and download it.' With
SageMath, *I* say, "if you want to use it at home, go to sagemath.org and download it."
So the students who would otherwise pirate the software benefit by not doing something illegal
(and risking installation of malware) -- but the honest students benefit too. Everyone can
download and use SageMath, so I can take a demo from class, publish it, and *everyone* they can look
at it after class and interact with it themselves, instead of just watching me fiddle with it.
Sure, Mathematica has their "Player" application, but with SageMath, my students can easily
alter the demo for themselves, which isn't possible with the Mathematica Player.
Free also means that students who graduate and go into industry can continue to use SageMath.
Maplesoft may not be interested in suing a student who put Maple on his laptop and whose
university has a site license, but if your company is developing a product and uses a pirated
copy of Maple to do it, they will not be happy.
Python means:
You have some familiarity with one of the best and most popular programming languages out there,
that is available for every platform, and is ubiquitous throughout industry. Students in my math
courses who aren't math majors and will work in industry gain something by learning a bit of
Python.
Free-as-in-speech + Python means:
When students run up against a bug, they might be able to fix it. Instead of just telling them to
sit quietly and be patient until someone else fixes the problem for them, there's a
reasonable chance that a good student can be involved in the solution. In education nowadays we
encourage students to be "active learners" and so on; there is talk of
"discovery-based learning". It is very much in the spirit of these educational
philosophies for a student to discover a bug, realize it is a bug, and go about trying to fix it.
For higher-level students:
Upper division students in mathematics or similar field can participate in fixing bugs on more
meaningful level, since they might understand the algorithms being used or know enough about
programming to fix broken code. SageMath is intended for professional-level real-world use, so for
such students, working on improving SageMath is real-world experience, useful to the students after
graduation. (Who would you rather hire? The guy who did all his assignments, or the one who says,
"I fixed bugs and added features to a large software project used by tens of thousands of
people"?)
Also, undergrad research is super hot these days, and SageMath allows students to be up and running
fast. Students who are not already highly proficient programmers have to spend tons of time
learning, say, C, and then waste a lot of time messing around with pointer arithmetic. SageMath
allows those students who are more interested in math than malloc() to spend more time thinking
about math and less time figuring out why their code segfaults.
The SageMath notebook server means:
The notebook allows network transparency, so I only need to get SageMath working well *once*, then
use a web browser in the classroom. With shared computers in lecture halls, getting things
installed is a pain -- but you can definitely rely on a web browser being installed. (And if the
computer only has IE6, as many around here do, it's easy to get Firefox.) It also means that
if I have SageMath running on a fast computer, I get the benefits of that computer when accessing it
from anywhere else.
Dan
Ted Kosan
William: "If it isn't too much trouble, if you have the time, could you consider
posting a rough list of some of the factors that went into your decision, why you chose SAGE, how
other competitors fared, and what isn't perfect yet about SAGE for your desired
goals?"
The reasoning behind why I chose SAGE was heavily influenced by the unusual nature of the degree
program I teach in. Our Computer Engineering Technology degree is a hybrid degree which is half
computer science and half computer engineering with an overall emphasis on application. The
program's faculty consist of 2 computer scientists, 2 engineers and 1 technologist and the
type of student that the degree is designed to produce is a deep generalist. I am the
technologist and this has placed me in a good position to observe both the algorithm-oriented
computer science approach and the mathematics-oriented engineering approach to problem solving.
I observed that the engineering classes were using software like MathCad and MatLab to great
advantage but, after seeing how the CS classes were solving problems using programming languages,
tools like MathCad and MatLab did not appear to have a general enough design to me. I eventually
decided to try Mathematica because of its more general design and in spite of the fact the
engineers didn't quite understand why I would choose it over a traditional
engineering-oriented software application :-) I worked with Mathematica for over 2 years and I
liked its mathematics capabilities and notebook user interface but I found its programming
capabilities to be somewhat awkward to use, especially when compared to the Python we had started
to use in some of our CS classes. Beyond this, I am a Linux user and many of our students are
too. I found that Mathematica's support for Linux was fairly poor and I was constantly
running into issues that needed to be worked around or fixed.
When we began our distance learning initiative, we chose to base it on open source software as
much as possible and this is when I decided to find an open source alternative to Mathematica. I
think that most people who are searching for mathematics software quickly find this Comparison of
Computer Algebra systems page and so did I:
https://en.wikipedia.org/wiki/Comparison_of_computer_algebra_systems
After eliminating all of the proprietary applications, the short-list of applications I selected
to evaluate consisted of Axiom, Mathomatic, Maxima, SAGE, and Yacas. At that time I was heavily
influenced by Mathematica's GUI notebook front-end along with the GUI front-end of
applications like MathCad. Therefore, I rated having a nice GUI front-end high on my list of
requirements when I evaluated each of the applications on this list. I eventually decided to move
forward using Maxima and Python running inside of TeXmacs and for a while I thought I had found
what I was looking for. Maxima seemed like it was able to handle most of my mathematics needs and
Python was able to handle most of the computing needs I had, even though I was only a newbie
Python developer at the time. TeXmacs was also where I received experience with the concept of
wrapping a wide range of software tools in one user interface and I liked the flexibility that
this provided. The more I worked with TeXmacs, however, the more 'quirky' it began to
seem to me. Beyond this, I began to want maxima and Python to be able to work together more
intimately than they were able to do within TeXmacs. I reluctantly decided that I needed to
continue my search.
Fortunately for me, it was at this point that I experienced a kind of revelation with respect to
Python. The language I had learned just before Python was Java and I came to Java from C. For me,
Java opened a whole new world of programming that I did not know existed before, especially when
I observed the way that computer scientists used it. When I decided to learn Python, however, my
experience with Java put limits on what I expected Python to be capable of. As I dug deeper into
Python, I started to see that Python was even more advanced than Java than Java had been with C.
When I moved from C to Java, it felt like I had moved from manually pounding nails with a hammer
to using a pneumatic nail gun. As I started to grasp the amazing power that a dynamic language
like Python contains, however, it began to feel like moving from nailing boards with a nail gun
to pointing a magic wand and having them appear in a board with no more effort than a flick of
the wrist. As I began to study Python deeper and program in it more, it felt like my mind was
starting to light up and I began to think about programming-based problem solving in a whole new
way. This was the feeling that Python gave me when I started to see how to properly use it. I
found myself wanting to enter this frame of mind more frequently and to hold it for longer
periods of time. I also started to become convinced that this was the kind of thinking that we
should be encouraging our students to embrace.
It was with this new perspective that I reevaluated the list of mathematics applications I had
compiled earlier and when I looked at SAGE again, it was with new eyes. Instead of Python being
just a tool among equals like it was in TeXmacs, in SAGE it was elevated to the position of being
the means of managing the enormous complexity inherent in these other tools and enabling the
power in them to be made available in a way that seemed more natural and effective than the other
approaches that I had looked at. I am also changing my thinking on the worth of entering
mathematics using a rich graphical front-end vs. entering it using typed source code. When I was
using Mathematica, I use to enter almost all of my input though the graphical notebook front-end
because I thought it was somehow superior to entering input as ASCII text. I continued this
thinking while I was using TeXmacs but as I have studied SAGE's documentation further, and
started to work with it more, I am beginning to form the opinion that it is much more efficient
to work at the Python source code level because staying at the Python source code level tends to
keeps one's mind in the 'light up' state that I referred to earlier. Therefore, I
went from thinking that the best approach for teaching newbies mathematics software was to hide
the source code as much as possible behind a GUI front-end to coming up with a way to teach
newbies how to program as easily as possible so that they would be able to effectively use a
source code interface.
Anyway, I know this answer is somewhat abstract, but that is how I made my decision :-)
As for what isn't perfect yet about SAGE itself for my desired goals, I am still learning how
to use SAGE properly ( and I am also still learning how to use Python properly ) so I am not
quite ready to provide suggestions yet, but I will probably be coming up with some in the future.
What I currently see a need for is a SAGE tutorial that is targeted at the programmer/mathematics
newbie. I am going to try to develop a tutorial like this but it would be helpful if I could
periodically ask some dumb questions on this email list about SAGE and mathematics in general.
Thanks,
Ted