I'm not usually a grand fan of the latest and greatest fads'' in
programming. The only C# I know is the black key next to D#, and I
loathe coffee. An IDE in the hands of a poor programmer will
still result in crap code. While I do think that agile methods (such as
XP) can do well in certain development environments, I certainly don't
subscribe to the notion that XP can solve all the world's software
production ills. And so on.
I do know quite a number of programming languages, and tend to pick up new
ones out of intellectual curiousity (although Ada
did put a severe
dent in that habit) or because a bit of research tells me that the language
might be particularly suitable for a particular task (although I've since
learned that the actual purpose of PHP isn't dynamic websites so much as
bringing the security levels of Linux boxes in line with Windows-led
industry standards). I also learn languages because I want to hack on
projects written in them, which is motivational, but not a particularly
good way to get a deep understanding of a language.
Why all of this introspection in a blog? So you have the background to
understand how
everything about Ruby is different for me,
including how I'm getting started using it. I have no interest in hacking
on a Ruby-implemented project, and -- although Rails proponents give me an
impression similar to that of a horny teenager with a shiny new unlimited
broadband account -- I don't have any particular
use for Ruby at
the moment (I want to write
less webapps, FFS, not more!).
So, why the hell did I fork out $90 hard-earned South Pacific pesos for a
copy of "Programming Ruby: The Pragmatic Programmers' Guide"? A couple of
reasons:
-
I'll admit it, Ruby caught my attention because of the hype surrounding
it. What made this hype different was that it was coming from people who
I knew as being (a) intelligent, and (b) usually immune to the typical
hype machines. This suggested to me that the hype about Ruby might be, at
the very least, a different sort of marketing bollocks, if not evidence of
actual utility. Worth a look, at any rate.
-
I had previously read a fantastic book on the general concepts of
programming, entitled "The Pragmatic Programmer: From Journeyman to
Master", by Dave Thomas and Andy Hunt. I had enjoyed the style of the
book, and respected their ideas, and so when they were advocating Ruby as
"the language that made programming fun again", and they had a complete
tutorial and reference book out on the topic at hand, it seemed natural
that I would look at their Ruby book as my "book of first refusal", as it
were.
I'm glad I got "Programming Ruby". The book is superbly organised, reads
very easily, and gives you all of the love as and when you need it.
Surprisingly for me and a technical book, I read the first section of the
book "cover to cover". By the end of it, I came away with a real (if
naturally superficial) understanding of the language, and a feeling that I
was ready to tackle the world in Ruby.
It is a sad state of affairs when the first piece of new programming you
can sink your teeth into is some four days after finishing your initial
studies into a language, but this afternoon I wrote my first Ruby program
in anger. It's quite simple -- just take stdin and rewrite it all on
stdout with the lines in a random order. But I wrote it in a new
programming language, in about 3 minutes, with nothing more than
ri (Ruby's answer to firing up python and typing help(xyzzy), more
or less) and "Programming Ruby". I think I also produced a suitably
reasonable result:
#!/usr/bin/env ruby
lines = []
while line = gets() do
lines << line
end
while ! lines.empty? do
idx = rand(lines.length)
puts lines[idx]
lines.delete_at(idx)
end
(Any Ruby afficionados out there, feel free to
e-mail me and tell me what egregious
sins I've committed).
I think it looks reasonably neat and clean, it's certainly simple, and the
use of
real Object Orientation makes for a certain readability (I
think the method call
lines.empty? is particularly cute, although I
did initially consider the use of a question mark in a method name to be a
crime against humanity).
So, will I be using Ruby more in the future? I think so. There are some
features in Ruby which I'm hoping to get a lot more cosy with -- the idea
of "blocks" looks particularly interesting, and I don't think the utility
of languages that have been designed, top-to-bottom, to really
live the OO ideal has been explored enough (you SmallTalk bigots
can stop glaring at me now -- really, I mean it -- stop it!).
It's far too early to tell whether Ruby will become my "go to" language for
random development tasks, but anything that stops the nightmares (where I
start thinking about using PHP as a general scripting language) cannot be
all bad. And, if I continue to make new webapps, Rails will probably come
in handy.
Update: HTML
<pre> tags don't like having < inside
them unescaped. Also, Philipp Kern pointed out that the Ruby documentation
browser is called
ri (not
ir as I originally wrote).
Philipp was also kind enough to provide a much shorter version of my
original script, which shows the power of Ruby
so much better:
lines = []
STDIN.each_line line lines << line
lines.sort_by rand .each line puts line
Now tell me
that isn't a language worth using!