| I'm 40 years old, and I've been programming since I was 8. (Which always makes me wonder how should I reply to the question "how many years experience do you have"... saying "32" does seem like cheating ^_^, yet any other reference point I might choose is also arbitrary). How good a programmer am I? At one point I was actually able to measure this... following an emotionally wrenching and exhausting startup failure, which also left me buried in Visa credit card debt, I went to work for Visa for a while. It was a soothing experience, I worked in my little cubicle and wrote Java code to design patterns... and in that environment, I was three times as productive as anyone else working there. (After a while Visa had paid off my Visa credit card debt, I had recovered my emotional equilibrium, and I left). Now, I'm pretty sure anyone reading this forum would have been as productive as I was, if not more productive (assuming that they had like me suffered some kind of life trauma so that they wouldn't have immediately run away screaming). Comparing me to an "average" programmer working in the bowels of a large company, I was demonstratively, measurably three times better than average. Compare me to programmers who hang out on a language design forum... I am probably at most average, probably below average. (I have yet to grok the Y combinator, for example). If you are still reading, I give this background to provide some context for my remarks. I've tried both Haskell and Scheme for real-life projects. Both projects were a failure, despite my having invested a serious amount of time reading all the available books and documentation I could find, hanging out in forums and asking questions, reading research articles by Oleg Kiselyov... The project using Haskell failed because I spent all my time wrestling with the type system, and the project using Scheme failed because I spent all my time wrestling with writing hygienic macros. This does not make these "bad" languages. I use lots of products that were made by people smarter than me who built them using systems that I don't know how to use. I am holding in my hand a pen made out of a plastic that I could spend a year learning chemistry and probably still not be able to make without generating some kind of poisonous chlorine gas and killing myself. I can imagine that I might be very happy if I were using an operating system written using a provably correct type system, even if I'm not smart enough to write such code myself. Yesterday I wrote a (very small) program in Arc, which in turn is a fairly thin wrapper around the powerful engine of MzScheme. This makes me happy, since now I'm able to use those powerful features of MzScheme, even though I'm not smart enough for it to be practical to write my own Scheme code which uses them directly. People complain that Arc0 lacks features needed to write good libraries. No doubt Arc will get those features sooner or later, as various people write Arc programs and want to publish libraries and start implementing the needed features to be able to do so. But, just for the sake of argument, what if Arc was a bad language for writing libraries in? What if that wasn't the point of Arc? I mean, arc> (let self "me me me!"
(each x '(a b c)
(prn self)))
#<procedure: self>
#<procedure: self>
#<procedure: self>
nil
arc>
bad, right? No self-respecting library would be publishing a macro that trashed my lexical environment. (This particular interaction might get fixed in the future in one way or another, so the details aren't important, this is just for just for illustration).I write Perl applications which make use of many of the excellent Perl libraries available in CPAN. Some of those Perl libraries are wrappers around C++ libraries when the C++ library was the best library available for the task. In one case the only working library available was a Java library, so I did most of the work in Perl code which called out to a tiny Java program I wrote which called the Java library. Do I want to be writing code in C++ or Java? No. Am I happy that I can make use of good libraries that happen to be written in C++ or Java? Yes. I am happy to be able to use Perl to call a C++ library. Writing that library in Perl might be a bad idea (for performance reasons or whatever), but I don't care, because I can call it from Perl anyway. If Arc were able to call out to Perl libraries (in the same way that Perl can wrap C++ libraries)... and, while I'm putting together my fantasy wish-list, was able to call the best libraries in Scheme, Haskell, Ruby, Python, Java, C++... :-) I think I'd probably be happier writing my applications in Arc. I find myself reasonably productive in Perl, but I do get frustrated with being able to do Lisp-ish things only rather awkwardly. I think I might be a little more productive in Ruby, but I haven't seen enough of an advantage to get me to switch. (I might for a new project). I am not, of course, actually proposing that we don't worry about features that would be needed in Arc to enable writing good Arc libraries. Still, when I think about the things that attract me to Arc, it's not being able to write libraries in Arc that I care about so much, as the thought of writing programs in Arc. Scripting, if you will. |