[Idle-dev] Fix for long delays
Bruce Sherwood
Bruce_Sherwood at ncsu.edu
Mon May 26 18:07:01 CEST 2008
Dave Scherer suggested that I join this discussion, as I represent a
constituency of literally thousands of college students who use IDLE in
intro physics classes at a number of major universities (I'm also a
developer of VPython). Let me offer an explanation of goals, somewhat
independent of implementation issues.
When Dave created VPython (vpython.org) in 2000, he also created a new
version of IDLE which with further development became the standard IDLE
now in use. The main goal was to make programming in Python as
interactive for whole scripts as it is for single statements executed
interactively in the shell. There are very good reasons to want novice
programmers who are writing computational physics programs to be writing
and running full programs at all times, not to be working at the
statement level in the interactive shell. Interacting in the shell can
of course be very useful for expert programmers, but this kind of
interaction with a programming language weakens for our students the
concept that a program is a complete sequence of operations, performed
sequentially. It may sound strange, but this is not a trivial concept to
many newcomers. (Another consideration is that it can be difficult while
working in the shell for a novice to keep track of what the current
state is, especially with respect to what modules are active; when you
run complete programs, you're starting from scratch each time.)
The key element for implementing this goal was single-keypress run/debug
cycle, to make running a full program just as interactive as running a
single statement in the shell. There are two things that can interfere
with this goal:
1) If a dialog box intrudes between pressing F5 and seeing the program
run, that is cognitively intrusive. It breaks into your thoughts in a
way that is not conducive to concentrating on the problem. (Yes, you can
instead teach people to press three keys, ctrl-S and then F5, but that's
just plain more awkward and intrusive.) Our students write small
programs, only a page or two long (thanks to the unusual properties of
Python and VPython), and they make small edits many times per hour. The
strong visual feedback of the 3D visualizations produced by VPython
means that it makes sense to encourage students to run these small
programs immediately after small edits rather than doing a lot of coding
before ever running. Again, the point is to be able to program in a
highly interactive way. For these reasons we deploy IDLE with its
default options set to "No Prompt" and "Open Edit Window".
2) If time elapses between making a edit and seeing the change, that too
is cognitively intrusive. An entirely natural modality when writing a
VPython program is to run, leave the 3D graphics window open on the
screen (possibly with an animation still proceeding) while making
program edits to correct errors that are made manifest by the 3D
display, then press F5 to (a) stop the old run and (b) start the new
run. Imposing a time delay is intrusive. Or to put it another way, it is
a wonderful experience to be able to make a small change and see its
effect immediately. This gives the high single-keypress interactivity
for full programming that otherwise is available only for
single-statement shell operations.
I should mention too that Dave built the VPython environment in such a
way that when your Python code terminates (exit from a calculational
loop, typically), the 3D graphics window stays alive for inspection (and
rotate/zoom navigation with the mouse), which is precisely what one
wants for the default behavior of the program. But then IDLE needs to
kill that window instantly upon pressing F5 to run again (sometimes with
no edits -- you often just want to see the animation again from the start).
Some time ago, there was some change to IDLE that had the very
unfortunate effect of leaving an old graphics window on the screen when
you pressed F5 to run again, with the result that the more times you
ran, the more old graphics windows cluttered up the screen. When Dave
became active again in VPython development, he realized what the problem
was, and that was his original motivation for patching IDLE. In the
process he also identified some related problems, which his patch addresses.
Bruce Sherwood
More information about the IDLE-dev
mailing list