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.

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.