

Tour De Babel -- Rant about programming languages - edw519
http://steve.yegge.googlepages.com/tour-de-babel

======
silentbicycle
In an aside about Emacs, Steve Yegge notes, "[...] I type 130 to 140 WPM,
error-free, in Emacs, when I'm doing free-form text."

That explains _so much_.

------
orib
Ugh. again, if you're going to tear on something, please... at least be right
about it.

For example, If your code base is 50 million lines in _any_ language, you're
doing it wrong, and it's going to be a pain to maintain. C++ has little to do
with it.

He also seems to think Python is losing to Ruby -- Sorry, no. They're both
going strong, and growing rapidly. Both of them are winning hard right now.

Also, his convolving of lisp and emacs is quite annoying. Emacs is not Lisp,
and Lisp is not Emacs. Please don't confuse the two.

Overall, I think that this is a rather poor article. Although I've definitely
seen worse.

~~~
silentbicycle
He wrote that article quite a while ago (Sept. 2004), actually, and has a
slightly more recent (Feb. 2005) follow-up that covers several more languages
here (<http://steve.yegge.googlepages.com/language-grubbing>). Oddly, he acts
as if he has no memory of writing the other thing.

He gives a much more informed opinion of Python here, I think. His overall
impression is essentially, "Python is a really good language, but I already
know Ruby, which is good at the same things, so I'll just stick with that." I
feel the same, really, but favoring Python over Ruby.

~~~
ptn
_Python is a really good language, but I already know Ruby, which is good at
the same things_

I was under the impression that Ruby was mostly used for webapps, with really
little use in other areas. Is this not correct? Python is used widely for a
variety of purposes, like system programming.

~~~
silentbicycle
Ruby is a general-purpose scripting language. It just has a reputation as
being used mostly for the web because Rails is its most popular app.

I don't really use Ruby (I already know Python well, and while I've played
with Ruby a bit, I think my studying time is better spent on languages that
are more different), so I'm going to let Ruby-ists provide examples if they
want.

~~~
ptn
Yes, it was _designed_ to be general purpose, but is it? I mean, do people use
it that way?

~~~
sofal
I've used Ruby for quite a while. I don't use Rails, and I haven't touched a
web application in a long time. I've used it for system scripts, GUI
applications (JRuby), game development, data processing, automation of MS
Office applications, testing, prototyping, distributed build and deploy
scripts, middleware, etc. I use Ruby for anything and everything I can think
of programming unless I need to get closer to the hardware or integrate with
something written in a different language.

Ruby can be used and will be used anywhere that Python can. They're both great
languages, but I prefer Ruby for a few small reasons that Yegge seems to
cover.

It's understandable that you might have this confusion, though, since if
you're not a Ruby user it's easy to get the impression that Rails is the
programming language. I constantly have to educate people about that ("Repeat
after me: Rails is not a programming language"). Sometimes I wish Rails wasn't
so popular, because I believe Ruby can stand on its own. I'm tired of
conversations like this:

"Have you heard of Ruby?"

"No."

"Okay, have you heard of Rails?"

"Oh, Rails! That's what you're talking about!"

"No, that is not what I'm talking about."

I get this from the standard folks who never venture outside of their
C++/Java/C# pens, and they've heard of Python only because of Google (tip for
language evangelists: a hot and trendy company does more for your language
than a killer app).

I would expect, however, that people who use Python would realize that Ruby
stands right beside it as a similarly beautiful and productive dynamic
language. In this I am constantly disappointed. Maybe it's a sign that Ruby is
losing the popularity contest and will fade away to the sidelines. There are
too many clueless people who pick up Python and love it and swear by the gods
that there is no language like it, even though their experience with languages
is summed up with C++, Java, and now Python. It's the language that ropes in
all the clueless people that eventually wins. Congrats to my Python brothas.

~~~
jamesbritt
"There are too many clueless people who pick up Python and love it and swear
by the gods that there is no language like it, even though their experience
with languages is summed up with C++, Java, and now Python. "

To be fair, the same seems true of Ruby (mostly via Rails); they come from
Java or PHP and declare Ruby the pinnacle of language design.

(I'd like to think, though, they are a mostly a noisy minority. There are a
lot of Ruby, non-Rails Ruby, developers who just quietly go about their
business.)

------
pmorici
I find it annoying that people's only real criticism against Python is the
white space. I love that feature, it's like high real estate prices, keeps the
rif-raf out.

~~~
schtog
I also don't understand that critic. I have never ever had a problem with it
and it is a big part of what makes Python so readable. I don't think there is
any other language that comes close to Python in terms of readability.

What is the issue people have with it? They write code that writes code? That
is the only issue I can come up with.

And self, yes it might seem a bit unaesthetic at first but it is not such a
big deal.

For me, Python = productivity

~~~
elai
When your working on cross multi-editor / multi-developer projects, you can do
your tabs differently, (one might do tabs, another soft tabs, their soft-tabs
are 4 spaces, another is 2, another is 8 (ack)) and you get irritating
inconsistent tab errors. It can be quite annoying. Having to synchronize on
such an irritating detail is even more irritating.

~~~
pmorici
Exactly, in a language where it didn't matter the code would just look like
crap over time where as python would force you to face the problem.

Not to mention can't you fix that sort of in consistency in vim or Emacs with
a few commands?

------
greyman
Sorry, but I can't take seriously people, who are writing stuff like "C++ is
the dumbest language on earth...". It's not even insulting.

~~~
sofal
That's funny. I have a really hard time taking anyone seriously who fails to
realize the massive shortcomings of C++ as a language.

------
kingkongrevenge
This guy is possibly the worst writer I have ever read. I do not understand
why his material keeps getting circulated.

~~~
bdr
There's interesting content, even if you don't like his writing aesthetically.

~~~
kingkongrevenge
A restaurant review has more content than this. This is just a list of
personal tastes, with virtually no addressable argument. A lot of what he does
say is idiotic. His entire lisp section, for example, is about an elisp
system, which has absolutely nothing to do with the merits of learning real
lisp. "Perl OO never really caught on." Um, have you looked at CPAN or the
core module APIs in the last 8 years?

~~~
omouse
Perl OO never really caught on because it isn't part of the core language.
It's the same with Scheme. It's nothing to be embarrassed about or something
that you want to try and correct.

Also, what pray tell is a "real" lisp? Last I checked, Emacs-Lisp has macros
and much of what makes any lisp a "real" lisp.

~~~
jrockway
> Perl OO never really caught on because it isn't part of the core language.

What?

Perl OO did catch on, and it is part of the core language.

~~~
omouse
Perl OO = library. Scheme OO = library. Library != language. The last time I
tried to use Perl OO, CPAN had to download a bunch of stuff for Moose. That
doesn't sound like it's part of the core language to me.

Has the situation changed? Are there OO things included with the default dist
of Perl?

~~~
jrockway
Perl 5 has had OO forever. Here's how it works:

    
    
      package Class;
      sub new { my $class = shift; bless {} => $class }
      sub method { my $self = shift; $self->{attribute} = 'value' };
    
      package Subclass;
      our @ISA = qw(Class);
      sub method { my $self = shift; $self->SUPER::method(...); ... }
    
       package main;
       my $class = Subclass->new;
       $class->method;
    

This is built into the core.

