From J Wiki
Jump to navigation Jump to search

Dyalog APL contest, GTK, grid, symbolic versus visual math, motivation to learn, simulation as alternative to symbolic manipulation, GTK graphics example, Life, Ad-hoc example

Location:: ThomasNet

URL for Video-conference


             Meeting Agenda for NYCJUG 20110614
[Puzzling error - see next page]
1. Beginner's regatta: some thoughts on motivation - see
"MotivationToLearnJ.pdf" and "One-WordDescriptionOfJ.pdf".

Also, see "Dyalog Programming Contest 2011.pdf".

2. Show-and-tell: Grid using GTK in J - see "GTKGridInJ.pdf".

Also, see "JHS Plot and Logic.pdf".

An example of a complete GTK program in J: see "LifeCellularAutomataGTKIJSmain0.pdf".

3. Advanced topics: possible project (see "BitcoinExplanation.pdf")?

Alternative to symbolic teaching of math - see "SimulationAsAPracticalTool.pdf"
"InteractiveExplorationOfADynamicalSystem.pdf", and "KillMath.pdf".

4. Learning, teaching and promoting J, et al.: a call for examples - how
could this be better: see "Example of Quick Ad-hoc J.pdf"?

Puzzling GTK Errors

I get errors like the following in the GTK console window:

 C:\Program Files\j701\bin>"C:\Program Files\j701\bin\jconsole" gtkide
 (jconsole.exe:3240): Gtk-CRITICAL **: gtk_file_chooser_default_set_current_name:
 assertion `impl->action == GTK_FILE_CHOOSER_ACTION_SAVE || impl->action == GTK_

 (jconsole.exe:3240): Gtk-WARNING **: Could not find the icon 'gtk-file'. The 'hi color' theme
was not found either, perhaps you need to install it.

You can get a copy from:

Does anyone else get this?

Apparently messages like this are common, according to NYCJUG members.

Beginner's Regatta

We discussed the following exchange, largely between Neville Holmes and Ian Clark, about motivating learners. Among the areas we felt should be addressed were some of the common beginner's concerns like how to read in data, e.g. from .CSV files or Excel spreadsheets.

Any "can't stop reading it tutorial" for J?

Topic: Any "can't stop reading it" tutorial for J ?! Neville Holmes < > Jun 08 01:33AM -0700 ^

Pardon me for getting into this thread a bit late in the piece.

> person has things to do that J is handy for getting done. Motivation can
> take other forms, too, but without something that makes J
> independently appealing, it likely won't get learned.

Motivation is indeed very important, and that will often boil down to having an interesting area of application. I've had some experience teaching tacit J some time ago (see and in that case the so very necessary motivation was that the students wanted to pass the unit, and I let them choose an application of their own to apply what I was trying to teach them so that it would interest them.

At about the same time I wanted to get the delights of tacit J out to a wider audience and I fastened on the generation of integer sequences as a topic that people of all ages who played with numbers would maybe find interesting. This was partly motivated by my discovery of the Online Encyclopedia of Integer Sequences ( that seemed to attract a fairly wide readership.

Therefore I started writing a book on the topic to exploit OEIS and to introduce tacit J in an area that could use simple and plain tacit J in a way that would be independent of the complexities of the J system itself (these could come, I thought, after the reader had got sucked in).

I got a fair way into this, and linked the text closely with entries in OEIS. When I got onto a sequence that wasn't in OEIS I submitted it, and I got quite a few accepted. The problem was that OEIS seemed to encourage submission of generating code along with the sequence itself, but whenever I sent in the ultra-simple (by comparison) tacit J code it was rejected, once succinctly as "goobledegook".

Eventually this discouraged me to the degree that I gave up the effort. I thought then, and still think, that such a book might be accepted as a book on integer sequences in its own right, despite the curious J code, and so get people into J who wouldn't otherwise have the opportunity.

However, I am now busily occupied in retirement, and haven't used J since teaching it, so taking up the book again (if I can find it) is too daunting.

If anyone is interested in taking it over, I'll be happy to send them a PDF of the incomplete book to look over.


Ian Clark < > Jun 09 05:21PM +0100 ^

The late Eugene McDonnell refers a lot to OEIS in his book "At Play With J" (APWJ)

He calls it: N. J. A. Sloane’s magnificent website, On-Line Encyclopedia of Integer Sequences (OEIS):

Eugene too successfully contributed new sequences, but reading between the lines it seems Sloane preferred algorithms in a more widely-known reference language than J. :-)

APWJ uses OEIS mainly to simplify algorithms, resulting in some natty J solutions to tough-looking practical problems. For example "Blists in OEIS"

"-171" referring to Vector vol 17 no 1 in which it was first published, not the chapter number in the book, which is 24.

Eugene's approach bears careful study, especially by anyone setting-out to do math(-related) research. Graduate students take note.

APWJ is unusual in that it's published both as a paperback and as a collection of J Wiki pages. The wiki pages were used to revise the book, but have been kept in-step. They're not meant as a Walled Garden. I'm hoping an APWJ fan-club will develop, adding comments to the APWJ wiki chapters, which is something you can't do of course with conventional paperback.


Let me invite you to attach your OEIS/J work, plus the PDF, as a Discussion Topic to one of the APWJ wiki pages. I suggest "Blists in OEIS"

Copy/paste what you've posted here. If you can't straightaway see your way to doing this, send me the PDF and I'll do it for you. I've put it on my list to attach obvious Discussion sections to every Play*** wiki chapter.

BTW the Vector links at the head of each page are broken, following a recent site makeover, but the Editor assures me they will be reinstated.

Ian Clark

for Undead Tree Publications, 'acting as agents for: Vector Books, British APL Association,

One-word Description of J

This exercise, as shown below, started with an overly restrictive premise but evolved into some suggestions about crafting short, compelling arguments to highlight the strengths of J.

from      John Baker
to        Programming forum <>
date      Tue, Jun 7, 2011 at 10:28 AM
subject   [Jprogramming] One word description of J

I've been thinking about what's a good single word description of J. Something that suggests the important features of the language and conveys the spirit of J programming. I offer the word: feral. Here's a footnote I recently added to the upcoming JOD 0.9.3 documentation.

Coming up with an accurate description of J is a challenge. The language is definitely array oriented and contains an almost pure functional tacit sub-language. However J also contains substantial imperative features and its clever use of locales and locale paths simulates most of the useful features of object oriented languages.

Waving your hands and declaring a language multi-paradigm or agile is the standard way out but unfortunately this does not distinguish J. I think J is a *feral* programming language. The word feral sounds like a mixture of functional and imperative and the established meaning of feral: almost wild, wily, able to survive on your own but willing to cooperate – on your own terms - conveys the independent free thinking character of J programmers.


from Joey K Tuttle
date Tue, Jun 7, 2011 at 9:39 PM

I like feral... Certainly if you say, "j is a feral computer language." They are almost certain to ask what you mean. Some of us can relate to the implications of "feral" - it does invade one's mind...

- joey iPh


from Henry Rich
date Tue, Jun 7, 2011 at 9:46 PM

"Feral" means "having reverted to a wild state". Assembler language is feral. Writing loops is feral. Swinging a club is feral. J is a lightsaber.

Henry Rich


date Wed, Jun 8, 2011 at 12:01 AM

OK here's a beautiful word that's obscure enough for J lovers to appreciate: Argute

Ar*gute"\, a. [L. argutus, p. p. of arguere. See Argue.]

1. Sharp; shrill. [Obs.] --Johnson.

2. Sagacious; acute; subtle; shrewd.

The active preacher . . . the argute schoolman. --Milman. Webster's Revised Unabridged Dictionary, © 1996, 1998 MICRA, Inc.

I like both meanings :)



from Dejun Guo
date Wed, Jun 8, 2011 at 5:24 AM

How about "razor"?

1. razor implies Array in pronunciation: J is a razor to manipulate multi-dimensional data (arrays/cubes) both easily and efficiently

2. J dictionary is a razor to attack both syntactic and semantic problems of PL intensely (1-2 char primitives, amazingly composable syntax/semantics through monad/dyad/*operator/trains, interesting locales...)

3. J is Occam's razor to program*, the ultimate form of *Occam's razor***with concrete math origins: succinct, sharp, thoughts-provoking ...


from Viktor Cerovski
date Thu, Jun 9, 2011 at 8:06 AM

Here is another one: pert


from Anthony Camacho
date Fri, Jun 10, 2011 at 3:59 AM

What about omnipotent?



from Yuvaraj Athur Raghuvir
date Sat, Jun 11, 2011 at 2:34 PM

How about "inJenious" as a play on ingenious?

  • in·gen·ious*/in?je-ny?s/Adjective

1. (of a person) Clever, original, and inventive.

2. (of a machine or idea) Cleverly and originally devised and well suited to

its purpose.

~Yuva --

from Devon McCormick
date Fri, Jun 10, 2011 at 9:59 AM

My favorite adjective to describe J is "succinct". However, the limitation of this single word fails to capture other important features of the language such as its power and clean, careful, extensible design.

Perhaps a more interesting exercise is to assemble a 30-second or a 5-minute introduction to the language. My own attempt (introduced at, presentation .JPGs at suffers from trying to cram too much into 5 minutes. I doubt more than one person in a hundred would actually understand the bulk of this talk.

It's a lot more work than coming up with a single word, but the J community would benefit from having an arsenal of short presentations like this.


from Roger Hui
date Fri, Jun 10, 2011 at 11:30 AM

I think the premise of this discussion is flawed. Why is the description restricted to one word?

There is an alternative, the "elevator conversation". You know, you've met a stranger in an elevator and you have to sell your idea during the elevator ride. What would you say? I've had some success using the +/x example. If there is more time it can easily extend into +/"r x . If there is more time still I might use avg=:+/%# and avg"r x .

In January 2000, I was at the Iverson Software booth at the AMS meeting at Washington DC, giving people who dropped by 10 minute presentations on the computer. The presentation was later codified as the lab "An Idiosyncratic Introduction to J". Ken later expanded that into the lab "A J Introduction", 14 chapters of which the first is the "Idiosyncratic Introduction". (Ken was so verbose!)


from Roger Hui
date Fri, Jun 10, 2011 at 4:23 PM

Ø On Fri, Jun 10, 2011 at 3:52 PM, Dan Bron wrote:

Ø … if in 140 characters your goal was to convince a stranger to investigate J, what would you write?

I thought that's what I did.

I might have tried to shoehorn "" into the 140 characters. However, I note that Googling "J programming language" gets as the top hit, so that's probably not necessary.

From :

An elevator pitch is often used by an entrepreneur pitching an idea to a venture capitalist or angel investor to receive funding. Venture capitalists often judge the quality of an idea by the quality of its elevator pitch and will ask entrepreneurs for their elevator pitches in order to quickly weed out bad ideas and weak teams. Elevator pitches are also used in many other situations. Personal uses include job interviewing, dating, and summarizing professional services.

Having thought about it for 3 additional hours I still wouldn't change a thing. The following is a bit shorter and could be used if I had to fit in additional stuff (could also use "e.g." instead of "For example"), but I want to sound conversational, as if I am not constrained by the 140 chars.

jtweet1=: 0 : 0
J is a programming language that works with arrays, verbs, and adverbs.  For example, +/x sums array x and /:~x sorts it.


I will start an Essay in the Jwiki. Y'all can put in your own versions.


from Brian Schott
date Fri, Jun 10, 2011 at 5:18 PM

I like the idea of having such an Essay which encourages alternative elevator conversations/tweets.

My desire has been to get more folks into the elevator or "following" tweets via screen casts. I have noticed that relatively few folks view my screen casts which are titled with some variation of ,"J Programming Language - xxx, " where xxx is like "Installing", or "Introduction", or "browsing locales". But when xxx is, "a simple openGL screen robot," there are almost 1500 views (still not many, but by comparison, magnitudes more.

I infer from this that videos are much more sought after if they appeal to a specific interest of a user than to a specific programming language. So I believe potential J users could be found with videos or communications which describe a specific application like something neat done in J by an astronomer, a stock market investor, a mathematician, a professor, etc.

Again, this is not to negate the purpose of this thread, but another perspective on what is important.


We continued our efforts to better understand the capabilities of the new GTK graphics for J by looking at this essay about using a grid widget in J.

Along the same lines, we also looked at this brief exploration of using plot under JHS.

from      Brian Schott
to        programming@jsoftware
date      Sat, May 7, 2011 at 1:24 PM
subject   [Jprogramming] JHS plot and jgc

Having played a little I have discovered a few abilities and inabilities of these programs.

JHS's plot works nicely for xy 'line' plots if its y argument contains a box of sorted x values appended to a box of (possibly laminated, if multiple) corresponding y values. The sorting is necessary to get the plot axes correct (at least with x and y values between 0 and 1 -- untested otherwise), and plot itself applies the boxed x values to each set of y values before showing its result. [plot handles a single list of boxed or unboxed values, as if the values are y values.]

However, as is, plot does not produce different colors for each of multiple lines, and produces a stinky color of all lines without some hand holding. This handholding is especially noxious in a Lab because plot always contains a 'reset', and that reset undoes any color (etc) options produced after the previous plot. Thus, as is, to get decent colors one must produce an "ugly" plot and then a second '<option> show' jgc '' to produce the desired <option>. A workaround for this is to alter the last line of the plot script as follows, so I am recommending that change.

 ('reset ',type,'               &chtt=',t,' show')jgc y
 ('reset ',type,' &chco=<COLORS>&chtt=',t,' show')jgc y

Another discovery is that a "scatter chart" type of xy plot (with no lines, only points) works nicely with no change to plot, but with an "ugly" plot followed by the following command changing to plot type to s. The ugliness is due to the reset embedded in each plot.

 '&cht=s show' jgc ''

As is, the left argument of JHS plot attempts to deal with a very few options in the original plot routine and cannot work with the &-style options of google charts. I wonder if the JHS plot could be rewritten to deal more with the latter, than the original plot routines options? Does that appeal to others?

It might also be nice to add an assert which checks on the sortedness of the x values of a line plot.

Advanced topics

We considered the intriguing, though perhaps unsophisticated, arguments put forth in the following essay for the notion of replacing symbol-based teaching with simulation. This essay also argues the same point. The idea of introducing simulations to teach physics seems promising but begs the question of how one would write a simulation accurately (and verify it) without knowledge of equations using symbols. Also, the author appears unaware of the power of a good notation and the usefulness of being able to apply it mechanically, at a superficial level.

Simulation as a Practical Tool

. by Bret Victor / October 19, 2009

Mathematics, as currently taught, consists of the manipulation of abstract symbols. For most people, the level of abstraction makes math unpleasant or unusable as a practical tool for exploring the problems of their lives.

I believe that software makes possible a new form of practical mathematics, based on concrete modeling, simulation, and visualization. I believe it is possible to design a tool that enables people to pose and answer their mathematical questions in an entirely concrete domain, without having to invoke abstractions, symbols, or arcane rules. This tool would eventually displace many symbolic forms of math, in the same way that the pocket calculator has displaced manual arithmetic methods. SimulationPic0.png

This interactive essay is an early step towards justifying and motivating the development of such a tool. I take a typical school problem which is intended to be solved with equations and geometric reasoning, and present a solution using physical modeling and simulation. This inspires the posing and solving of more interesting problems. The simulations represent the problem concretely, without abstractions; provide a broader context, allowing a deeper understanding of the situation; easily handle problems which are difficult or impossible to solve analytically; and can be used to actively create, not just passively understand.

Their Least Favorite Subject

The recent book What's Math Got To Do With It? (subtitle: How parents and teachers can help children learn to love their least favorite subject) opens in the real-life classroom of an "amazing and unusual teacher". Her class is tackling a math problem as a group challenge. The atmosphere is animated and jovial, the students jump up eagerly to offer ideas and debate approaches, and "within ten minutes, the class has solved the problem by drawing from trigonometry and geometry, using similar triangles and tangent lines". The book goes on to describe how most students despise mathematics, and grow up to become math-illiterate adults who use only "folk mathematics" instead of anything they were taught in school. The author presents the enthusiasm-building activities of the "amazing and unusual teacher" as the ideal form of math education, and suggests that if everyone were taught in such an engaging social environment, the public would come to love math and integrate it into their lives. File:Html"

I disagree. I suggest that students are right to recoil from trigonometry and geometry, similar triangles and tangent lines. This style of mathematics is about translating a problem into symbolic abstractions, and then performing meaningless symbolic manipulation to get an answer. Regardless of how it's taught, most people will never be comfortable entering this level of abstraction in order to explore the problems of their lives.

They may not need to. Symbolic methods were invented in another era, tools intended to interface with pen and paper. We now live in an era of machines that can depict concrete visual representations of a problem, machines that can quickly iterate through enormous systems of differential equations, machines that can instantaneously draw plots for visual inspection, machines that can recalculate and redraw at the user's whim.

Why are we stuck teaching symbols?

Imagine: Instead of writing abstract equations, we draw a model to simulate in software. Instead of trying to make sense of algebraic results, we interactively explore parameter spaces using graphical visualizations. Instead of getting "an answer", we get an understanding. And instead of limiting our scope to that tiny subset of problems which can be solved analytically, we let our curiosity run wild, asking "what if" about anything we can model.

Such software will enable people to answer questions that affect their lives, without having to construct arcane abstractions. My hope is that this software will become as ubiquitous as the pocket calculator used to be. It will be the calculator of the next century.

Similar Triangles and Tangent Lines

The math problem which enraptured the classroom above is as follows: A skateboarder holds on to the merry-go-round pictured to the right. The platform of the merry-go-round has a 7-foot radius and makes a complete turn every 6 seconds. The skateboarder lets go at the 2 o'clock position in the picture, at which time she is 30 feet from the padded wall. How long will it take the skateboarder to hit the wall? Set aside for a moment that nobody would ever be faced with this particular problem as stated, nor care about the result. We will use the situation it describes to explore more interesting questions. BookFigure1.png
But first, the conventional solution, as provided by the book. You do not need to read this — merely note how abstract, arcane, and contrived it is. The first step is to find out how far the skateboarder travels after letting go. In other words, we need to figure out the distance AB in the drawing to the right. To do this we first need to work out what the angle θ is so we can use the properties of right triangles. To do this, draw the line h that passes through the center of the merry-go-round and meets the padded wall at a right angle. Since the skateboarder is at the "2-o'clock" position, whcih is 1/6 of the way around a clock, the angle α is 1/6 of 360°. So α = 60°. The angle β = 90°, since a tangent line of a circle always meets BookFigure2.png

the radius at a right angle.

Finally, α + β + θ = 180, since they are same-side interior angles between the parallel lines h and l. Therefore θ = 30°. This means that triangle ABC is a 30-60-90 triangle! Using the side relations of 30-60-90 triangles, we find:

BC = 30/sqrt(3) = 10 sqrt(3) feet


AB = 20 sqrt(3) feet

So now we know how far the skateboarder travels. The next step is to figure out how fast she is traveling. The merry-go-round makes a complete turn every 6 seconds. In a complete turn, the skateboarder travels the entirety of the circumference, which is

C = 2π (7) = 43.98 ft.

So the skateboarder is traveling at 43.98 / 6 = 7.330 feet per second.


(distance) = (rate)(time) then

(time) = (distance)/(rate)

So the time it takes the skateboarder to reach the wall is

20 sqrt(3) / 7.330 = 4.726 seconds

Abstract. Our picture, which used to depict only objects that were meaningful to the problem (carousel, wall, skateboarder), has become cluttered with extraneous lines and symbols, like a diagram in an anatomy textbook. The solution is performed in terms of these symbols, not meaningful values. Arcane. Mysterious rules are recited like sacred edicts: A tangent line of a circle always meets the radius at a right angle. Same-side interior angles between the parallel lines sum to 180°. Contrived. Behold the convenient appearance of the 30-60-90 triangle. BrainFigure.png

All this, and still — the solution is wrong. The three-decimal-point precision is already laughable, given the precisions of the lengths and velocities in the problem. But what about the size of the skater herself? (An arm length of 2 feet adds a lot to the carousel's 7-foot radius!) What about deceleration of the skater due to friction? (Can she really coast for 30 feet without losing most of her momentum?) What about the non-constant velocity of the carousel, which is presumably being pushed by a friend at some interval?

We conventionally ignore such "non-idealities". Not because they aren't important, but because they complicate our symbolic manipulation, or even render it impossible.

Model, Watch, Learn

My solution to the problem is as follows. Click it to watch.

This is a software simulation of the situation described in the problem. This gives the same result as the analysis above, so it clearly must be a valid solution.

Furthermore, this solution is not abstract: only concrete, meaningful objects are shown. It is not arcane: the only "rule" used is that the skateboarder maintains her speed and direction after letting go of the carousel; the rest of the model is physically obvious. It is not contrived: adjust any parameter of the original problem, and the simulation will provide the correct answer just as easily.

Because this solution was intended to match the analytic one, inaccuracies and all, it doesn't incorporate any "non-idealities". But it could, and could easily. Many non-idealities, such as gravity, friction, and drag, are fairly simple to incorporate into iterative models. (This is because iterative methods mimic how nature itself solves these problems, by integrating forces.) We traditionally avoid these non-idealities only because we have trouble "shortcutting" to the solution with symbolic trickery.

I implemented this example by "writing code". But to be clear, I am absolutely not advocating "code" as the means for solving such problems. I envision a tool that allows people to model the situation directly and concretely, perhaps by simply drawing a picture. The examples in this essay are only meant to show what a solution might look like, not how to make it.

Now, let's make the problem more interesting.

A Solution in Context

The simulation above gives a wonderfully visual interpretation of the solution. But one can't help but notice that there's not much solution to visualize — the result is just a number. This implies that the question isn't very interesting.

An interesting problem should bring delight when the solution is revealed, like a mystery story. As with a mystery story, the delight comes from achieving an understanding. How does "4.72 seconds" help us understand anything about the skateboarder's situation? Why is that number even meaningful?

Here's a characteristic that is intrinsically interesting: optimality. Even when it doesn't objectively matter, people care about finding the fastest route home from work, or the apartment with the most square footage, or the best deal on orange juice in the grocery store. People like to optimize. So, let's ask this question:

In order to reach the wall as quickly as possible, where should the skateboarder let go?

Astonishingly, the standard approach to this problem requires calculus, which few students learn and fewer use outside the classroom. Optimization is one of the most important uses of mathematics — shouldn't even our most elementary mathematical tools support it? Click to see a conventional solution.A conventional solution:Consider the figure at the right. We want to find the θ that minimizes the time to the wall. Because the velocity is the same no matter where she lets go, that's the same as minimizing the distance the skateboarder travels, which is AB. Optimal.png

We know that

AC = h - DA


DA = r sin θ


AC = h - r sin θ

Because there's a right angle at C, we know that

AC = AB cos θ


AB = (h - r sin θ) / cos θ

. AB = h sec θ - r tan θ

In order to find the θ* that minimizes AB, we take the derivative of this expression with respect to θ:

dAB/dθ = (h sin θ / cos^2 θ) - (r / cos^2 θ)

and solve for the θ* where the derivative vanishes:

(h sin θ* / cos^2 θ*) - (r / cos^2 θ*) = 0

Multiplying both sides by cos^2 θ* gives

h sin θ* - r = 0

And we have

θ* = arcsin(r / h)

Plugging in the values from the earlier problem, r = 7 ft. and h = 33.5 ft., we find:

θ* = 12.06°

which corresponds to a clock position of about 2:36.

My solution to this problem is as follows. Watch the plot fill in, and then try moving your mouse around the plot to see different trajectories. This solution required no changes to the model — we merely sweep one of the parameters and find the minimum. But look at the beautiful result. The result is no longer just a number — it's a point on a plot. And every point on that plot is tied to a visual trajectory. We have context. We aren't merely given the optimal angle; we are presented with why it's the optimal angle, because we can see all the trajectories for all the angles. We can understand the situation. Notice that if the skateboarder lets go anywhere on the left side of the carousel, Optimal.png

she'll never reach the wall at all! (This is the red half of the plot.) Did you realize that this would happen when you read the problem statement? Would you have noticed it in the analytic solution's pile of equations?

Most likely, you would have only noticed it if the problem explicitly asked us to solve for it. Modeling broadens our view of a situation, allowing us to see things that we don't yet know to look for.

Now, look at that optimal trajectory again:

There's a symmetry here which is very conspicuous. The trajectory appears to hit the wall directly above the carousel's center. And after bouncing off, it appears to pass tangent to the other side of the carousel.

There's a lot that we could explore here. But upon seeing this, a real skateboarder would naturally think of a sweet trick: let go of the carousel, bounce off the wall, grab back on to the carousel on the other side, and go around again: [see diagram above].

Let's take that idea and make the problem more interesting.

A Freehand Problem

Contrived school problems are filled with straight lines and simple curves. But real life is more varied, more fun. What if our wall had a more artistic shape? With curved wall below, where should the skateboarder let go so that she can bounce and grab back on? The solution: This is a fascinating result. There are now three places where the skateboarder can let go and rejoin the carousel! Furthermore, those places correspond to local minima and maxima of the time to the wall. Would you ever have predicted that? FreehandProblemSimulationEG.png
Note that this problem cannot be solved analytically. Why? Because there is no formula for the shape of the wall. I simply drew it so it looked good. And so it is with many phenomena that we care about in the real world — their properties are what they are for artistic or natural reasons, not because they can be conveniently expressed analytically. If our mathematical tools can't deal with the objects we care about, then we are stuck in the land of artificial, contrived problems. No wonder people find math irrelevant! The unexpected multiple solution to this problem inspires a new problem, the most interesting one of all. In the previous two problems, the skateboarder could only bounce off the wall at very specific spots if she wanted to rejoin the carousel. Can we make it easier on her?

Can we design a wall such that the skateboarder can let go anywhere, bounce off, and perfectly rejoin the carousel?

This might be easy if we fully understood the criteria for bouncing and rejoining. But we don't yet — we only have hints. So let's allow the simulation to design the wall for us: It's a circle. But why? Let's look at the three examples — the straight wall, the curvy wall, and the circular wall. What do the bounce-and-rejoin points all have in common? SimulatingCircularWall.png
[Same simulation, further along] SimulatingCircularWall2.png
With a little thought, we can see that these are the points where a perpendicular line from the wall intersects the center of the carousel: Perpendicular.png

Because every point on the circular wall has a normal which goes through the center of the carousel, the skater can hit the circle anywhere and bounce back to the right place.


The four problems above, respectively, are examples of how a simulation tool might allow people to solve problems in a way that is:

Concrete. Modeling lets us set up and solve problems in a concrete domain, without translating to and from abstractions. Keeping the solution grounded in the problem domain makes it palatable to many more people, makes it easier to reality-check, and encourages exploration of related problems.

In context. Simulation and visualization give us a broader understanding of the situation. Simulation shows us not just the final answer, but the path taken to get there. Visualization encourages us to see the solution as a point on a plot, not a number in isolation.

Unrestricted. Simulation handles non-analytic situations with ease. The conditions of a problem do not need to be contrived or compromised for a convenient symbolic representation.

Generative. A simulation tool can be used for design, not merely analysis. Guided by human creativity and insight, the tool can construct designs and help explore their implications.

To Do

There are four critical issues that are not addressed by this essay.

The tool. I am proposing a software tool that allows people to pose and explore problems directly and concretely, a tool that should become as ubiquitous as the pocket calculator. What is this tool? What would its interface look like? How could it be designed so problems can be posed and solved quickly and casually?

Relevance. The tool and these methods should allow people to explore problems relevant to their lives. The example I followed here was almost a straw man, in that it's a school exercise — a problem that nobody would care to solve anyway. We need to compile a corpus of real, motivating problems — problems that people desperately want to explore, but currently cannot.

Universality. The example I explored here was a physics problem, which has a convenient visual representation and physically intuitive rules for evolving the system. Most of the problems in people's lives cannot be expressed as physics problems. How can non-physical problems be modeled concretely, visually, tangibly? How can we specify the rules for iterating these systems without succumbing to abstraction?

Benefits of symbols. Many scientific disciplines currently strike an uneasy balance between symbolic and numerical methods, aware of the pitfalls of both. The benefits of analytic methods can be:

Practical, such as finding with certainty all possible solutions to a problem.

Cognitive. Some teachers claim that automated solvers can be crutches that impair students' ability to reason.

Social. You can discuss or google a formula to learn from others who have navigated similar territory, but how do you look up or make reference to a plot or a process?

How relevant are these analytic strengths to the sorts of problem-solving we are concerned with here, and how can a simulation tool match or make up for them?

And on the other hand, how much does it matter if simulation falls short of symbolic methods in some respects? Most people use no mathematical methods at all beyond arithmetic. So, any high-level mathematical tool that could gain any following could be considered a success. Anything is better than nothing.

But I believe that a truly revolutionary simulation tool can beat symbolic methods at their own game.

Meeting Materials


File:Dyalog Programming Contest 2011.pdf

File:Example of Quick Ad-hoc J.pdf



File:JHS Plot and Logic.pdf