MathGroup Archive 2005

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Re: my wish list for Mathematica next major version

It is interesting to hear what things bother students because that is
important information.

I'm not certain that a debugger is the best solution. Rather, I suspect that
students have not learned well enough how to use Mathematica. Specifically
they should learn that it is an interpreted language and not a low level,
compiled language like C. There are certain prices to pay in having an
interpreted language, but there are also certain benefits and easy
development of routines and calculations is one of them.

When users get into trouble they are often trying to do too much at once. I
usually develop a calculation one step at a time and look at the output. It
is not always what I was expecting. One can put a number of steps together
in ONE cell, each step on a separate line. Then examine the output, make
corrections and reevaluate. If I'm satisfied that certain steps are working
correctly I suppress the intermediate output with a semicolon. When that
works I usually construct a routine.

If I have trouble with a routine, usually in the form of a Module, I insert
Print statements to print a location and values of variables at that
location. If I want to stop at a location I insert Print[...]; Abort[].

However, your posting roused me to further investigate the debugging
facilities of Mathematica. I discovered there is something very close to the
debugger that you want. It's called Dialog. It allows you to stop at a given
point, look at the values of various variables, and continue on.

Here is a simple example:

foo[x_] :=
  Module[{y, z},
    y = x^2Mod[3, x];
    z = Sin[y];
    Dialog[DialogSymbols :> {xx = x, yy = y, zz = z, xmod = Mod[3, x]}];
    y + z]


75 + Sin[75]

opened a Dialog, but the result was not yet present. (This is just a
horizontal line in the notebook where you can type commands. You could open
a new blank notebook and type the commands there.) Then entering

{xmod, xx, yy, zz}
{3, 5, 75, Sin[75]}



exits the Dialog and completes the evaluation of foo[5], which appears after
the foo[5] Input cell.

If you have several debugging dialogs you can use the option DialogProlog :>
Print["point1"] to print the location of the particular Dialog.

So, why isn't that a fairly good debugger?

David Park
djmp at

From: carlos at [mailto:carlos at]
To: mathgroup at

I fully agree with the first item.  Each year I normally teach
3  engineering courses (2 graduate, 1 undergraduate)
that use Mathematica  as one of the tools for problem
solving.  Typical undergraduate enrollment: 80-100,
graduate: 35-50, so it is not a tiny sample.

By far the 3 biggest complaints heard year after year:

1) Incomprehensible and untraceable error messages.
2) Lack of a simple debugger.  Doesnt have to be GUI or
     incremental. Anything is better than nothing.
3) Lack of  effective interrupts.  If user commands a stop,
     stop instantly, wherever you are in a cell, and tell
     user exactly where it did.

These are  largely beginner users, not difficult to please.
For 1) they would be ecstatic with  a low-tech  device
called a line number.
In[] and Out[]  baffle beginners since they are dynamic.
Since they serve no useful purpose, as a teacher I  would
be very happy to see that  1980's anachronism removed,
and replaced by invariant markers.

  • Prev by Date: Re: How to assembly a stiffness matrix ?
  • Next by Date: Re: Elementary Calculation
  • Previous by thread: Re: Re: my wish list for Mathematica next major version
  • Next by thread: Re: Re: Re: my wish list for Mathematica next major version