tl;dr old curmudgeon flaming on about the dead past, not "getting it" about Sage.

Robert Bradshaw wrote:


In terms of the general rant, there are two points I'd like to make.
The first is that there's a distinction between the Sage library
itself and the many other spkgs we ship. By far the majority of your
complaints have been about various arcane spgks. Sage is a
distribution, and we do try to keep quality up, but it's important to
note that much of this software is not as directly under our control,
and just because something isn't as good as it could be from a
software engineering perspective doesn't mean that it won't be
extremely useful to many people.  Even if it has bugs. We try to place
the bar high for getting an spkg in but blaming the Sage community for
poor coding practices in external code is a bit unfair. I hold the
Sage library itself to a much higher standard.
The point that "software is not as directly under our control" is not really valid.

This is a *design* decision of Sage, not a necessary evil. Sage specifically chose to build on dozens of other pieces of software. Once you make spkg functionality
part of Sage functionality, you own it.

The statement that Sage tries "to place the bar high for getting an spkg in" isn't actually much of a claim. I've watched the way spkgs get voted onto the island and it usually involves a +1 by less than half a dozen people. Would you really consider this to be placing "the bar high"? I'd consider developing a test suite,
or an API function-by-function code review, or a line-by-line code review to
be placing the bar high. At the moment I see Sage writing test cases for python code but I don't see the same test cases being pushed into the spkgs. Even where external test cases are available (e.g. the computer algebra test suites for Schaums
and Kamke) I don't see them being run.

From a software engineering perspective there are some things that *are*
directly under Sage control such as the pexpect interfaces. How carefully
are these designed? Just yesterday I saw comments about the gensym
(question-mark variables) connections to Maxima not being handled. This
syntax is not a new Maxima feature so a pexpect interface design could have
taken this into account but it did not. Each pexpect interface should be designed
to be automatically constructed from the BNF of the underlying spkg. This
would eliminate the mismatch by design and be good software engineering.

The conclusion that "blaming the Sage community for poor coding practices
in external code" as being "a bit unfair" is not valid. While it is grossly unfair to assume that spkgs are of poor quality, if your *design* calls for using materials of "unknown quality" it seems that a very large portion of your effort *must*
involve quality reviews of spkgs. End users just see Sage.

Still to come will be the "code rot" issue. Open source packages tend to have a very small number of active contributors. Projects tend to stop when those people
drift away. Once a package is no longer maintained it stops working due to a
lot of factors such as incompatible standards like python 3.0, operating system changes like include files, architecture changes like parallel builds, loss of primary development platforms like the implosion of open solaris, etc. Recent examples of this in Sage might be the Atlas 64bit issue (architecture), the Sympow issue (author loss), the loss of pointful effort due to the death of open solaris (platform death), the python GIL issue on multicore (software architecture), the rise of python 3.x
(software standards change), etc.

Now that the wave of new spkg adoption has slowed I expect to see a growing
need for maintaining "upstream" code. By *design*, their problems are now your problems. Who will debug a problem that exists in 500,000 lines of upstream code?
Who will understand the algorithms (e.g. sympow) written by experts, some of
whom are unique in the world, and debug them?

Writing new code is always fun. Maintaining old code you didn't write is painful. But from an end-user perspective "it is all Sage" so all bugs are "Sage bugs".
That may seem unfair but the end-user won't know or care.

The belief that Sage will gradually rewrite the code pile it has (5 million lines?) into higher quality seems odd. For comparison, Axiom is about 1 million things-of-code (lisp doesn't have "lines"). It took over 20 years and over 40 million dollars of funding. Scaling linearly, Sage would take 100 years and 200 million dollars to be rewritten into "all python". Frankly, I think the spkgs are going to be around for a very long time.
The second point is that much of the older, crufty code in Sage was
put in at a time when standards were much lower, or even before there
was a referee process at all.
When Axiom was written we were using Liskov's ideas directly from the primary papers. I believe that we were the first system to dispatch not only on the type of the arguments but also on the type of the return (something that is still not common). But Axiom was developed as research software, not with the intention of being brought to market as a
product (free or commercial). Sage is being developed with this intention.

Our choice of "standards" was to build on abstract algebra. There were a great many debates about the right way to do things and we always went back to the touchstone of what abstract algebra implied. At the time (40 years ago) there were no existing examples of computational mathematics for many of the ideas so we had to invent them. Axiom set the standards (e.g. integration) and they were quite high (Axiom still has the most
complete implementation). Sage has existing examples to guide it.

So at the time Sage was being developed there *were* standards in place. You seem to feel that Sage was started "pre-standard" (2005?) and "pre-referee" (ISSAC?).


I think this was necessary for the
time--Sage would have gotten off the ground if it couldn't have been
useful so quickly. This includes in particular many of the spkgs that
have been grandfathered in and wouldn't make the cut now, but it takes
time to remove/replace/clean them up. Of course there's room for
improvement, but do you think the current review process is
insufficient and lots of new bad code is being written and included?
If so, what should we do better?

I *do* feel that the current review process in Sage is insufficient (see my earlier diatriabe).

I see reviews of bug fixes but I don't see reviews of spkgs. We are now over 50 years into the development of computational mathematics and Sage has the goal of competing with systems developed in the 1970/1980s, over 30 years ago. This would be a great thing if Sage were to deeply document the algorithms, develop the standards, and/or prove the code correct but I don't see anyone advocating any of these. I don't see anyone advocating alternative ideas that would "raise the bar" in computational mathematics.

Even in the area of education I don't see anyone hammering on the NSF to fund more efforts in computational mathematics. I don't see pushback to NIST to standardize the algorithms. Obama wants to bring science back to life and encourage research. As the largest group of academics I would wish that you would petition the funding sources. Even if all of the funds went to Sage I'd still feel that this was worthwhile.

In short, I don't see *change*.

Tim Daly
(curmudgeon and rjf wannabe)

--
To post to this group, send an email to sage-devel@googlegroups.com
To unsubscribe from this group, send an email to 
sage-devel+unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URL: http://www.sagemath.org

Reply via email to