Hacker News new | past | comments | ask | show | jobs | submit login
Notation as a Tool of Thought (jsoftware.com)
57 points by ColinWright on Oct 16, 2011 | hide | past | favorite | 19 comments



The Whitehead quote at the start (from An Introduction to Mathematics, 1911) is a great one, and relevant to programming as well as pure math. But a lot of good came after the one sentence the author quotes:

"By relieving the brain of all unnecessary work, a good notation sets it free to concentrate on more advanced problems, and, in effect, increases the mental power of the race. Before the introduction of the Arabic notation, multiplication was difficult, and the division even of integers called into play the highest mathematical faculties. Probably nothing in the modern world would have more astonished a Greek mathematician than to learn that ... a large proportion of the population of Western Europe could perform the operation of division for the largest numbers. This fact would have seemed to him a sheer impossibility ... Our modern power of easy reckoning with decimal fractions is the almost miraculous result of the gradual discovery of a perfect notation. [...] By the aid of symbolism, we can make transitions in reasoning almost mechanically, by the eye, which otherwise would call into play the higher faculties of the brain. [...] It is a profoundly erroneous truism, repeated by all copy-books and by eminent people when they are making speeches, that we should cultivate the habit of thinking of what we are doing. The precise opposite is the case. Civilisation advances by extending the number of important operations which we can perform without thinking about them. Operations of thought are like cavalry charges in a battle -- they are strictly limited in number, they require fresh horses, and must only be made at decisive moments."


As a research mathematician, I often get annoyed by poor choice of notation, but I (personally) don't ever have plans with ambiguity or lack of precision. Indeed, my favorite authors often use notation that is slightly ambiguous, but is clear in context.

My issues are with math papers that introduce unilluminating notation, too much notation (henceforth write L for log(x)), or (above all) do not go to enough effort to keep their arguments simple.

I speak only for myself, and some of my colleagues would surely disagree with me, but basing mathematical notation off a programming language takes a step in the opposite direction from what I can process most fluently.


I like the idea that notation is a tool of thought, but I think that J (and APL) are actually rather crappy notations.

I FAR prefer matlab for matrix work, as it is closer to actual math than any other language I know. For logic ish programming, Prolog or AMPL or SQL (I like SQL, even though people hate on it all the time).

But, in my humble, J and APL are interesting historically, but rather crappy in comparison to more recent languages


I was surprised to learn, given the inelegance of much of Matlab, that it was explicitly influenced by APL. See the blue callout box at

http://www.mathworks.com/company/newsletters/news_notes/clev...

which shows part of a 1983 plan for Matlab:

"Combining the technology of 1) mice and windows, 2) matrix and APL environments, and 3) direct manipulation, will do for engineers what Lotus 1-2-3 has done for the business world."

Ulf Grenander, the Brown University mathematician who invented statistical pattern theory, once used APL, but moved to Matlab for his expository book on pattern theory:

http://books.google.com/books?id=lxBDcFvFFvsC&pg=PA146&#...

I agree that the vectorized operations in Matlab are good at lifting computational ideas out of the fog of nested for loops. It is more compact to represent some matrix algebra in Matlab notation than in ordinary matrix notation, as anyone who has read Golub and van Loan knows.

It's weird to proclaim, but this concise notation can be as freeing for certain problems as Prolog's declarative transformations, and functional composition in Lisp.


I think "the inelegance of Matlab" is MUCH overstated. It has some weirdnesses, some of which are fixed in Octave (it's gnu cousin). But some apparent bad choices (anything to do with cell arrays, especially) are really quite powerful when you get to know them.

(If you ask me, R/SPLUS is the inelegant language, especially when doing serious matrix -- yuck! But it's trendy....)

Matlab is a lot like SQL -- people love to hate on it because it isn't perfect and they know it really well (because it is ubiquitous and pragmatic).


It has improved a lot. In the late 1990s it was decidedly behind the scripting languages of the time, and that's partly what I was referring to.

And, the weird lack-of-speed issues. It used to be that you could implement a matrix multiply, in an m-file, that would be faster than the builtin *. I benchmarked this myself.


Have you ever used J or APL seriously? If yes, what do you find so "crappy" about the notations? If no, please keep your uninformed opinion to yourself, you have no idea what you are talking about.


I have been charged with maintaining 5000 LOC of J at work, so I use it weekly or so (5-10 hours ... as little as possible...), and I have spent at least a hundred hours or so with it before that.

And my somewhat informed opinion is that J sucks ass. To start with, input/ output suck and it's hard to read and maintain -- it is the least pragmatic language I know. But what I really hate about it is the community -- full of true believers who think it's a cosmic language and "mathematical", even though you can't prove theorems in J (that's what would make it mathematical, duh), who babble about how they can calculate pi to 1000 digits in only 4 characters, as if that is remotely useful or profound (neither)


You're maintaining 5000 lines of J code huh? Sounds like a decent sized project. If you are spending 5-10 hours every week or two maintaining it, why not have a go at replacing it with something you do know? I would love to know how it went.

As for your other throwaway comments, any code, in any language is hard to read and maintain when you don't know what you are looking at. Or, as better stated by Whitehead (whose quote led off this thread), "Of course, nothing is more incomprehensible than a symbolism which we do not understand.".

Concerning the community you "hate" for some small-minded reason, my experience has been quite the opposite, I have not found a more informed, helpful or friendly group anywhere, and this also includes the APL/k/q/A+/NARS/SAC communities (all languages designed or influenced by Iverson).

As for pragmatism, Iverson was probably one of the most pragmatic language designers in history. Don't take my word for it though, here is what Dr. Fred Brooks has to say:

I once asked Kenneth Iverson, Turing Award winner and inventor of the APL programming language, "Why is APL so easy to use?" His answer spoke volumes: "It does what you expect it to do." APL epitomizes consistency, illustrating in detail orthogonality, propriety, and generality. It also epitomizes parsimony, providing many functions with few concepts. - Fred Brooks, "The Design of Design" page 72



Thank you! I think here might be the appropriate place to comment on the irony of a web page espousing good notation having its own notation mangled by a bad PDF->HTML translation.


At the bottom of the page, there are the following instructions: The text requires the APL385 Unicode font, which can be downloaded from https://sites.google.com/site/baavector/fonts .


God bless you.


Read the award winning Babel-17 by Delany for a bit of science fiction that explores this idea that language and particularly the notation of the language affects one's perception of the world.


For another sci-fi novel dealing with language, I'd recommend China Mieville's Embassytown.


Also, the Nebula-winning "Story of Your Life" by Ted Chiang.

Available on Archive.org:http://web.archive.org/web/20081015201424/http://heptapod.or...


From the article:

- Ease of expressing constructs arising in problems.

- Suggestivity.

- Ability to subordinate detail.

- Economy

- Amenability to formal proofs.

I think it would be very useful to improve notation for programming languages as well (we could borrow a lot from mathematics).

With all the advances in display technology and unicode everywhere, you'd say there is no longer a need to limit ourselves to flat 7-bit ASCII in a simple grid. Still, we do. Is it really the best way, as it seems lacking on all the above points, or simply a matter of habit?


I seem to remember someone (Knuth, possibly) saying something to the effect of "Good notation is determined as much by what it leaves out as what it accentuates." I interpret this as meaning that leaving out accidental complexity is at least as important as including all the essential elements of the problem. A good example, then, would be modern notation for the integral of a function.


http://groups.csail.mit.edu/mac/users/gjs/6946/sicm-html/boo...

gerald sussman's course on physics in scheme notation




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: