I've decided it's time to start learning how to use a computer to do calculations... I've used Singular to some small extent so far, but I want to start relying on computer algebra systems more.


### Question


Which computer algebra system is best for what, and what is the easiest/most fun(?) way to learn how to deal with them?


I should mention that I do (arguably) Arithmetic Geometry. So, ideally I should invest my time in learning something that is capable of making the abstract existence theorems in that field explicit (see for example: [How to get explicit unramified covers of an elliptic curve?](https://mathoverflow.net/questions/52125/how-to-get-explicit-unramified-covers-of-an-elliptic-curve), or another example is normalizations).


P.S. I don't have access to Magma. How powerful is their "online calculator", and is it worthwhile to learn Magma just to use the online version?



Roadmap to Computer Algebra Systems Usage for Algebraic Geometry
Your question is "Which computer algebra system is best for what, and what is the easiest/most fun(?) way to learn how to deal with them?" 


* Regarding *community*, I think Sage (<http://sagemath.org>) is the best CAS, since Sage is completely open and free, and there are about a dozen mailing lists, and thousands of subscribers and messages a month. There is also a forum like mathoverflow for Sage: <http://ask.sagemath.org/questions/>. Also, Sage builds heavily on Singular, so it may feel familiar. See this 1-page article I published in the Notices for more about motivation: <http://www.ams.org/notices/200710/tx071001279p.pdf> For a sense of the capabilities of Sage, skim the reference manual: <http://sagemath.org/doc/reference/>. There is also an optional package of more unstable code for arithmetic geometry here: <http://code.google.com/p/purplesage/>
* Regarding raw interpreted speed, it's been claimed that the Magma interpreter is often faster than the Sage interpreter (=Python). However, Sage has Cython <http://cython.org>, which can produce code that is much faster than anything one can produce using the Magma (or any other CAS) interpreter.
* Magma is the only existing CAS that has well developed capabilities for computing with function fields of transcendance degree 1 over $\mathbf{F}\_p$, i.e., the function field analogue of algebraic number theory. Chris Hall and I are working on something similar for Sage right now, but this will take a long time.
* Magma is also the only CAS that can compute fairly general spaces of Hilbert Modular Forms (again, work is also under way to add this to Sage, but it is a nontrivial project). Someday you might care about this.
* Regarding elliptic curves, Sage has much more related to $p$-adic $L$-functions and Heegner points, but Magma has 3 and 4 descent.


The answer to your question: "Is it worth learning Magma?" is definitely still *yes*, since there are still many algorithms today in arithmetic geometry that are only implemented in Magma, and available nowhere else (definitely not in Macaulay2, Singular, Mathematica, Sage, etc.). It will only take a few days, and you will have a better sense of what is possible. The exact same argument applies to Sage as well. Learn both. For Sage, you basically should: 1. learn Python, and 2. go through the Sage tutorial, which takes 2-3 hours. 


Another point: Sage and Magma have a huge overlap in functionality related to arithmetic geometry, but the overlap in code bases is almost zero (and in many cases the people who implemented the algorithms in both systems are disjoint too). Thus there is some nontrivial value in comparing the output of both systems. See, e.g., this trac ticket about implementation of a function for computing all integral points on an elliptic curve for a nice example of this <http://trac.sagemath.org/sage_trac/ticket/3674> This ticket also illustrates how the code that goes into Sage is all publicly peer reviewed (unlike this case with Magma). 


