I had an enjoyable time prototyping optimization heuristics in OCaml, where Arc would have been completely inadequate because it lacks floating point speed.
It's more that "latent" typing (types do not appear in source code) and "structural" typing (types are determined by their structures, not by their names) are very important. Haskell and Ocaml fit both criteria, despite being strongly statically typed.
The reason for both is that you don't know the data types you'll be using when you start programming. It's very common to switch from a string to a hash to a structured record to an ADT, and if you have to change type declarations in every place that datum is passed to, you'll be spending most of your time changing type declarations.
Have a look at http://shootout.alioth.debian.org/gp4/benchmark.php?test=all... - instead of twiddling your thumbs for 20 seconds the way I did, you go and get a cup of coffee or check email/blogs or something else that takes your mind off the task at hand.
The reason I mention this niche (where C libraries you could call do you little or no good) is because things like optimization heuristics and machine learning are the most common form of exploratory computing and programming I know of. The biggest symptom of this is that there are dozens of "machine learning" toolkits, environments, libraries, etc all intended to provide a situation that frees you from worrying about extraneous details (like how to get data out of crappy HTML in order to do some kind of data analysis project), but a lot of people just code everything from scratch in vanilla Java/C/Python/whatever.
The way I write programs, generally, is I do the simplest possible test that still embodies the essential idea behind what I want to do and grow it from there. Thus a language supporting that has to be flexible, and I don't see why dynamic typing is necessary or sufficient for that.
The type system has little or nothing to do with also supporting essential features that support the way I think: closures, combinators, metaprogramming, and other things that often make life a lot easier.
the article itself points out Python isn't that fast either
i can only see speed being an issue in these heavy data type things, for which you should probably be using an APL language (as they are quite exploratory-friendly -- and fast -- for these types of problems)
i've been using Arc for a while and the speed has never been an issue. most of your time developing a program is spent writing it, not watching it run. about the only thing that annoys me is that it currently requires mzscheme
"most of your time developing a program is spent writing it, not watching it run."
This totally depends on the kind of program you are writing.
I just completed a class on Information Retrieval, the exact same kind of tasks and algorithms in the Collecting Intelligence books. One assignment, I spent most of the time allocated trying to get the program reasonably fast enough in Python to finish in less than a day. If a mistake was not apparent until the program had run for a couple of hours, it totally killed all of the exploratory programming advantages that Python has.
I finally gave up and rewrote the entire thing in Java a day before the assignment was due. I got my algorithm to converge in under 2 hours (had left the Python version running much longer with than this with no converging in sight), and was able to get some decent results to turn in.
Maybe I'm just greedy. I want it all. Speed, exploratory programming, lots of libraries. Common Lisp offers the first two, the last, not so much. Java offers 1 and 3, Python 2 and 3.
My next languages to learn are Scala and/or Clojure. Potentially the speed and libraries of Java, with many of the features that make Common Lisp and Python great at exploratory programming.
I do not see Arc on a path that will give it all 3 of these attributes in the foreseeable future.
Well you can always connect a false statement to another simpler false statement to make your idea easier to understand. Or you can show how if something were true, it would contradict with some obvious truth, and so on. This is not a cause, but it helps for your argument.
Otherwise, we could all go pointing random ideas as false, anyway we haven't to explain why they are false, couldn't we?
Edit: also, maybe you don't like blue after all :)
Try to honestly answer the question: "Why is the color of the programmer's shirt not important for his productivity?"
It's hard, because it _could_ be. The only way to properly answer is to take a random sample of programmers and show that there is no statistical difference.
This doesn't say anything about weather speed is important or not, of course. But it does give an idea that statistics (or practical experience) might be involved. Just remember, random sample = good, anecdotal evidence = bad.
I don't see how this relates to the original argument. It doesn't help explain you can or can't say why something isn't true. And anyway, it wouldn't be easier to respond "why is the color of the programmer's shirt important ...?" than its negation.
I think that's kindof the point... it's easier to ask the affirmative form then the negative, ie it's easier to prove then disprove.
Anyways, this meta-discussion has gone long enough anyways. I'm having too hard a time following it. Can't we go back arc and exploratory languages, please? :)
I don't agree. You can explain why something is true, right? (at least in some cases, not for all cases, you know, Gödel and all that). In such cases you can actually explain, it follows that if X is true, !X isn't true, and you have an obvious explaination for that.
Example: why is my shirt red? Because I only have red shirts on my house. Why isn't my shirt blue? Please refer to the previous explaination of why it's red, then it follows it can't be at the same time red and blue, etc etc.
And it's great it's like this, because otherwise we could be saying a lot of random predicates are false and no one could argue with us. So I think asking someone "why x is false" isn't illogical, after all if there is a reason to say "x is false", surely there is a way to prove it's false indeed.
Edit: part of the problem with this discussion, of course, is that there is not a fixed meaning for "why". "Why" is a very ambiguous question, it doesn't specify whether we want to know the intention, the proof, the cause, etc. And even, what is a cause? If you are talking about historic events indeed you can't explain why X didn't happen, but from the same pov you couldn't ever explain why Y did happen at all, if you see history as something deterministic & linear. So whether you're right or wrong actually depends on what you see on the word why...
My thesis for this essay is that the Great Gatsby is not an allegory for animal beastiality. First of all, Gatsby contains no animal characters. Because of this, the likelihood that F. Scott Fitzgerald's work was a veiled reference to man-on-animal love is very low. Second, there is no evidence than any of the characters are attracted to animals. While Gatsby does have an attraction to Daisy, there is nothing in the text to indicate that her character metaphorically embodies animalistic qualities. In conclusion, there is no possible way that the Great Gatsby represents an attempt to introduce zoophilia to mainstream American society. After examining all of the evidence one can clearly see that this simply cannot be the case.
First of all, Gatsby contains no animal characters.
The Great Gatsby contains two dogs and a cat. While none are given names, one of the dogs (an Airedale bought by Myrtle Wilson) appears several times and has some identifiable characteristics.
Second, there is no evidence than any of the characters are attracted to animals.
In fact, it contains this scene:
"She looked at me and laughed pointlessly. Then she flounced over to the dog, kissed it with ecstasy and swept into the kitchen, implying that a dozen chefs awaited her orders there."
In conclusion, although bestiality is not one of the novel's primary themes, there is evidence that at least one character makes out with a dog at some point.
Please note: the only reason I have time to go and grep -iw gatsby.txt for "dog" is that I'm waiting for the program I'm writing to finish executing. This is why speed is important in exploratory programming.
I don't understand this argument. When someone says "Why don't you... X?" are you going to enumerate all the things you'd rather do than X, and then explain that the effort involved in doing those things precludes X? Or are you just going to say "That's a stupid question. Tell me why I should."
Well, enumerating a finite list of things is not something you wouldn't do in a math proof. Now if I say: X="primes are all multiples of three", "why isn't X true?", there are many obvious answers to that. For starters, because there's at least an element of primes (7), that is not a multiple of three.
That should be enough to disprove: "there's never an explanation for why something isn't true", and that's the point. I would have preferred a simple explaination of why PG thinks X isn't true than the assertion that such a thing can't be explained (actually I suspect he was being humourous or something like that, obviously he has to have a reason to think like he thinks).
Also, you can always reply: "because I don't want to!", or "because I have other things to do", or "because I don't see a reason to" (it's like asking "why should I..?"), to "why don't you ... X?" :)
I agree that "why is Boston not in Oklahoma?" is a question without a sensible answer, but that has nothing to do with the fact that it is of the form "why does X not have property Y?" You will notice that "Why is Boston in Massachussetts?" is not a question with a sensible answer either.
Similarly, "why is your shirt not blue" is a silly question, unless there's any reason to suppose that it might be. For instance, if you show up to my "blue shirts only" party wearing a non-blue shirt, it's a perfectly valid question.
Now, as for questions about "Why is X not important for Y?", these can have sensible answers. Why is aerodynamics not important for a lunar lander? Because it never flies through air. Why is peanut butter not important for a lunar lander? Now that is a silly question, because nobody would suppose it might be.
So a question like "Why is speed not important in exploratory programming?" should really have a sensible answer. You could, for instance, say something like "Because in exploratory programming you typically only need to run short tests which don't take a lot of time anyway". To which I'd reply "Oh, I don't know about that, I typically run tests which take quite a long time". To which you could say "Oh, well I'm sure there are some cases where it is, but for most people most of the time it isn't". And I'd say "Yes, I agree with that statement".
No, there's really no answer to the question of why aerodynamics isn't important for a lunar lander.
The answer you give to that, as you imply in a later paragraph, is really an answer to the question "if a typical person thought aerodynamics was important for a lunar lander, why would they be mistaken?" It's fairly easy to answer that, at least with respect to our peers; we're used to vehicles designed with wind resistance in mind. But this is not the answer to the question of why it's not the case that aerodynamics is necessary for a lunar lander.
Similarly, though there is no answer to the question of why it's not the case that speed is necessary in exploratory programming, I could, if I knew why the OP mistakenly thought it was, have explained why he was wrong. But while I could guess why one of my peers might mistakenly think aerodynamics mattered for a lunar lander, I have no idea why the OP might think speed mattered for exploratory programming.
Sigh. What a huge waste of time this thread has been. I feel like I've just spent an hour trying to convince someone that the Monte Carlo fallacy was false.
OK, I accept that if we're going to be pedantic (and honestly, being pedantic is one of my favourite hobbies too) then the question would really be "if a typical person thought aerodynamics was important for a lunar lander, why would they be mistaken?"
In fact, one could clarify the question a little for the benefit of somebody who couldn't see why anybody would be so confused as to think that aerodynamics had anything to do with the moon, by saying: "Given that aerodynamics are important for many [though not all] vehicles, what properties of a lunar lander distinguishes it from those other vehicles in such a way as to make aerodynamics irrelevant?"
So ahem, bearing that in mind, given that speed is important in many [though not all] programming tasks, what properties distinguish exploratory programming from those other types of programming in such a way as to make speed irrelevant?
I'm not convinced yet, but I don't want to make this argument longer. It wasn't my intention to make you or anybody lose time (sorry if I did, truly!), I just thought you were pointing something that failed to be true and that I could correct you in a friendly manneer. Your comment is interesting and I'll think about it, but as far as I could see it seems to work only in particular cases and not in all negative cases, as you had pointed before. But I need to think more about it to be sure. Thanks for your time and for your explainations.
Once, in college, I visited one of my professors and his wife. In the middle of a conversation the wife asked, "Why isn't this ink refill small enough to fit in this pen?" His answer was an amused, "What kind of existential question is that?"
This may be true of facts, but there is no problem with explaining why your opinion is one way and not the other.
Unless you are asserting that speed not being important is a fact of exploratory programming, rather than PG's opinion, I see no problem with answering my initial question.
If it makes you feel better though, I can rephrase:
There's still no answer to that question. If I needed speed, I could explain why. But there's no answer to the question of why you don't need speed.
I need a bottle opener to get the lid off a bottle. I need it because I need to bend the lid. I don't need a scarf to get the lid off a bottle. Why not? There's no reason you don't need a scarf to get the lid off a bottle; it's just not that useful.
This is semantics, it depends on what meaning you give the word "why"... you are talking about why as in causes here, but I don't think that was what you were asked about when somebody said "why isn't speed important?"
"Boston is not in Oklahoma because it's in Massachusetts, and Oklahoma and Massachusetts are two separate states and no city can belong to two states at once (afaik)." Doesn't that sound like an explaination?
Now, an explaination of "why isn't speed important", could be, for example, that it's not important because it doesn't affect your final productivity at all, or at least not in a considerable way compared to some N other factors.
Now, what's the cause of such a difference in the final users' productivity, maybe that can't be answered. But I don't think you were asked about it.
Sorry for wasting your time with this discussion, but I don't really see your point. Maybe I'm wrong after all but until now I don't see how that could be.
Also, I disagree with his criteria. Speed isn't really important for it. And dynamic typing, which he omits, is very important.