Source of the famous “Now you have two problems” quote
regex.info
regex.info
The sentiment I see from most hackers I know these days is exactly the opposite: the Java language is not well-liked, but the JVM is.
From Java sucks (2000) http://www.jwz.org/doc/java.html
"The fact is that there are four completely different things that go by the name ``Java'':
A language;
An enormous class library;
A virtual machine;
A security model.
Sun would like you to believe that these are all the same thing, and that the name ``Java'' implies all of them, but this is marketing fiction. Worse than that, the fact that Sun has tried so hard to push this idea has done grievous damage to the acceptance of Java.
Java-the-language is, overall, a very good thing, and works well.
Java-the-class-library is mostly passable.
Java-the-virtual-machine is an interesting research project, a nice proof of concept, and is basically usable for a certain class of problems (those problems where speed isn't all that important: basically, those tasks where you could get away with using Perl instead of C.)
Java-the-security-model is another interesting research project, but it only barely works right now. In a few years, maybe they'll have it figured out or replaced. If Sun hadn't tried so hard to conflate these four completely different things, if they had first shipped native-code Java compilers, then the VM, then the security model, then Java probably would have completely displaced C++ by now."
and
"Today, I program in C.
I think C is a pretty crummy language. I would like to write the same kinds of programs in a better language."
These days learning Java, with all the stuff that has been added to the language (J2EE, beans, annotations, what have you), is mostly pointless. Lots of better alternatives. Unless you know you are going to be working on some big pre-existing codebase, or want to get a job working on one.
I've managed to get a bit off-topic. Maybe I should write a blog post on this instead.
I define UNIX as “30 definitions of regular expressions living under one roof.” —Don Knuth
Edit: simple googling reveals that David Tilbrook took credit for a variant of the line in 1989 (http://grosskurth.ca/bib/1989/tilbrook.pdf, search for "awk"). Since that's long before anyone would have had reason to misappropriate it, I'd say that's pretty convincing.
Friedl, as the author of a (the) book on regexes, is only interested in the regex version of the quote. But that one is obviously just a derivative.
Edit 2: I attempted to email Tilbrook to see if he wants to comment on the joke. If I get a reply I'll post it here. Silly, perhaps, but this kind of folklore is fun.
Edit 3: The email bounced. Is there an HNer with a premium LinkedIn account who wants to message him for us? I found his profile but it won't let me do that without paying (no way in hell). If so, email me (address in profile) and I'll send over what I wrote.
The point is that the end of Friedl's post shows that the quote antedates JWZ, but he's not really interested in tracking it down any further, presumably because it was JWZ who applied it to regexes, which is Friedl's area of interest. Personally, I'd rather know the origin of the quote itself. I like knowing the sources of things.
As for what I was "claiming to have discovered" (though I hope not nearly so pompously as that), I would have thought that was obvious too: additional evidence that the line was Tilbrook's. I noticed later that a commenter to the OP cited the same link I did, so it's pretty findable.
But, in fact, Friedl did track down the source of the original quotation - to a reasonable degree of certainty. It's the same source you found. So I guess I don't see what Friedl didn't track down.
(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|(//.*)
(source: http://ostermiller.org/findcomment.html )I recently wrote a lexicasl analyser for a language that uses C++-style comments. My first attempt used regular expressions, but I later scrapped them for something I could understand. Here is the relevant bit:
# //... comments
if ss.isNextSkip("//"):
ss.skipPast("\n")
return
# /*...*/ comments
if ss.isNextSkip("/*"):
ss.skipPast("*/")
return
I will leave it to the reader to decide which is clearer.