At 09:37 AM 2/11/2004, Shlomi Fish wrote:
>Forward:
>
>This is an article I wrote explaining why I like Perl so much. I would
>like to
>thank some distinguished people of my Perl Mongers clique that took the
time
>to review it and comment.
>
>Hope you enjoy reading it! Feel free to re-use it and re-distribute it or
>link
>to it.
>
>My Perl History:
>----------------
>
>When I first learned Perl, I was working right after high-school as a
>C/C++ Windows systems programmer in a small startup. The job was very
>interesting, but the pay was very low and so I was looking for a better
>job. My friend introduced me to a Ran Eilam who was about to finish
>his university degree and was planning on starting up his own
web-publi****ng
>firm. The year was 1996, and it was the beginning of the Internet craze.
>
>I went to Tel Aviv university, where I met Ran. He accepted me to the job
>and said I should learn Perl. Having told him I knew about Berkeley
Sockets,
>(from my previous workplace) he said that one can write a sockets client
in
>Perl in 10 lines and a server in 20 lines. He showed a piece of Perl code
>he wrote to handle a client's request, which seemed awfully short. I did
not
>understand what was going on there.
>
>Between Jobs I was given time to adapt to the new workplace. Ran said:
>"Shlomi, it takes 10 years to learn UNIX. I want you to learn it in a
month".
>I set out to install Linux and experiment with UNIX and Perl. When I got
the
>job, I read the Perl man pages (which I downloaded in PDF format), and
also
>was able to experiment a bit with Linux.
>
>Needless to say, I was not able to learn UNIX as thoroughly as Ran would
>have wished to believe I could. (I can testify that my knowledge back
then
>was very superficial in comparison to my current one). But I knew it well
>enough, and learned more as time went by, to make myself useful there.
>
>I can say that the experience was nothing less than revolving. UNIX was
>an epiphany for me. For the first time in my life, I found a system that
>worked and behaved like it should. Until then, during the time I
experienced
>with DOS and Windows 3.x, I knew these systems were bad, but I could not
tell
>exactly why, because I did not have any point of reference. UNIX, on the
other
>hand, was a completely logical (albeit sometimes not entirely consistent)
>system, that was a joy to work with, even with my superficial mastery of
it.
>
>Perl, in a way, was a revelation as well. I finally found a language that
>was not only fun to program with (as was the case with BASIC), but also
very
>practical and usable. It had everything C and BASIC had and more. It
>immediately became my favourite language (and still is).
>
>Back then, I even wrote my "shell scripts" in Perl since I did not took
the
>time to learn shell well. (Since then, I've known of other people who
have
>followed this trend, and learned shell programming only after learning
Perl,
>and I expect this trend to grow.)
>
>My knowledge of Perl was almost as superficial as my knowledge of UNIX.
>I knew a large part of syntax, the constructs, the basic data structures,
>the regular expressions, and even took the time to learn to use
references
>and nested data structures. However, I did not know how to write modules,
>much less objects, and there were many details in the man pages that I
did
>not pay much attention too. Furthermore, my knowledge of what was present
in
>CPAN was inadequate and I often re-invented many wheels time and again.
>
>As I went to a different Windows-oriented workplace, I installed Perl and
>a UNIX-like environment there. In due time, I learned from experiencing
more
>about UNIX and more about Perl. A few years down the road, I learned how
to
>write my own modules and even later on how to write objects
>(both were surprisingly easy). I also became familiar with other details
>and paradigms of the language, and also now know better how to search for
>something in CPAN (and even, gasp, how to use the CPAN.pm module to
>automatically install things) so I don't re-invent too many wheels as
before.
>
>Why I like Perl so much:
>------------------------
>
>I like the fact that Perl is orthogonal and does not force the poor
programmer
>who wishes to learn it to learn too many paradigms. In Java, for example,
the
>"Hello World" involves initializing a class and several methods, only to
call
>the uncivil 'System.out.println("Hello World");'. In Perl, it is simply
>
> print "Hello World!\n"
>
>And you can leave Object Oriented Programming out of it. Furthermore,
while
>you can use closures; map, grep, sort and friends; objects and
inheritance;
>modules, etc. you are not forced to use them if you don't want to or
don't
>know how. Perl is a language that grows with you, and does not force you
>to learn all of it in a day.
>
>Some languages (C and Scheme come to mind) are minimalistic. You can
learn
>them almost entirely after a while and afterwards, nothing will surprise
you.
>Even if you do encounter a new keyword or a new built-in function, you
>are not surprised. Most of the time it was found because you needed to do
>something like that, and figured out it must exist.
>
>This is not the case for Perl. In Perl, I constantly felt (and other
>people shared my sentiments) that I am learning new things all the time.
Not
>only that, but they are very enlightening and immediately prove useful in
>future programs.
>
>Many times I found paradigms in other languages or books and discovered
>they were readily applicable in Perl. For instance, after reading the
>excellent book "Structure and Interpretation of Computer Programs" and
seeing
>how closures could prove to be useful, I tried it in Perl and it
>immediately worked. From then on, I sometimes found myself using closures
>in Perl.
>
>Another thing that is great about Perl is that it is useful for
performing
>practical tasks. In some languages I encountered, like Scheme or Haskell,
>one always get the feeling that while being nice to play with, they
cannot
>be effectively used for anything practical. This is not the case for
Perl,
>that provides both usable and intuitive syntactical primitives as well as
>many primitives and open source API's for calling the services of the
system.
>This is one property that is shared (to a lesser or greater extent) by
>similar languages such as Python, Ruby or PHP.
>
>What makes Perl quite unique among most languages, is its "There's more
>than one way to do it" philosophy. I, actually, am very fond of this. Any
time
>I write a script or a module, (even a very trivial one) I am glad I have
>several ways I can think of to write it. Contrast this with Python's
"There's
>only one way to do it", in which the language designers tried to create a
>unified way for programmers to use it. If you ask me, a programming
language
>in which "there's only one way to do it" is almost as bad as a spoken
language
>in which "there's only one way to say it". Such a language may be easy to
>learn, but it certainly won't be fun to use. Neither are such programming
>languages.
>
>Larry Wall once noted that Perl in essence tries to be the Tower of Babel
>of the programming languages. That you can write Python in Perl, and LISP
>in Perl, and BASIC in Perl, and C in Perl. All of this diversity comes
with
>a cost, as many newcomers will find reading the Perl code of expert
>programmers (or of their peers with a different education) very
difficult.
>It's probably similar trying to understand a text of English by a very
>knowledgeable writer when you've only studied it for 6 months.
>
>However, I believe that despite common belief, Perl code is not hard to
>understand more than other languages. (unless it's purposely obfuscated).
>You just have to be familiar with more idioms, and conventions. It takes
>some time, but it's well worth it. Of course, it is possible that you
won't
>understand what the algorithm of the program is doing. But you can
encounter
>the latter problem in any language regardless of how rich or poor it is
in
>programming paradigms.
>
>Perl is also a no-nonsense language. I'm reminded of a time when a person
>I know from my university was assigned to write a web-based system for
>managing the lab he was working in. He decided that Perl, PHP and Python
>all sucked and would rather use his favourite language: C++. It took
>him over a year and he did not finish, in what I would estimate as a one
>month project using either Perl, PHP or Python. In the midst of this, he
kept
>telling me about the "beautiful abstractions" he built in C++. Every
time,
>I kept telling him that in Perl it was equally or more trivial to do.
>
>In C++, one can be tempted to write templates upon templates and cl*****
upon
>cl*****, trying to accomplish what a Perl programmer takes for granted,
or can
>easily leave alone as a necessary pattern in the code. So, in a sense it
is
>not a no-nonsense language. Java and ANSI C are much better, in that
sense.
>Thus, one does not need to wonder why most compiled open source software
is
>written in C, including the interpreters and back-ends for some highly
object
>oriented languages.
>
>You can hear many complaints about the Perl syntax. (I even heard that
Perl
>is "a syntactical disaster"). However, I actually like it. The reason is
that
>I
>can immediately tell what's going on by looking at the code. If I see a
dollar
>sign it usually indicates that there's a scalar involved. If I see square
>brackets, I know it's an array subscript, etc. Larry Wall said in one of
his
>speeches, that in LISP all the code comes in parenthesis, so all the code
>looks the same. Perl is the exact opposite of LISP, in this regard, and a
>Perl code brings out the data structures and operations that are
performed.
>
>Perl has spawned an interesting culture around it. From countless
>local Perl mongers groups, to mailing lists dedicated to any Perl topic,
>to the many modules of CPAN (some of which are downright useless, but
>still fun), to many web-sites with lots of good resources there. In fact,
>it is very fun being a part of the Perl community, which cares about so
much
>more than writing Perl code for a living. (even though many people do
that
>and there's nothing wrong with it). For the Perl community, Perl is fun,
and
>it keeps trying to find more fun things to do with it.
>
>Larry Wall as a Linguist, tried to make Perl feel like a natural
language.
>And it indeed does, more than any other language I have encountered. I,
>recall an incident that happened to me in high school. In English class,
>we were taught about forming speeches (the standard "First of all,",
>"Moreover/Furthermore", "To sum up" stuff). Then we played the balloon
>game: we were split into teams and given an assignment to write a speech
>together, in which we had to explain why we of all the other people in
>the balloon had to be saved.
>
>Now, most of the speeches given in class were quite mechanical: "First of
>all... moreover... furthermore... to sum up,". I, however, assumed the
role
>of President Roosevelt after the Pearl Harbor attack, and wrote a nice
speech
>in which I don't think I've used any of these key-words once. (I also
>volunteered to give the speech first and so was able to read it from the
>paper). It ended up being the Teacher's favourite, and won third place.
>(because two of the other speeches were funny, but in my humble
>and prejudiced opinion, quite lame as well)
>
>The moral of the story is, that you can't survive with knowing the
technique
>alone when writing prose. You need to know how to make it flow together.
In
>a sense Perl is not about technique alone. Knowing the syntax, the
keywords
>and the functions can only get you so far. But you still need to know how
to
>write beautiful programs that will make the one who reads them say
"Wow!".
>To quote Abelman and Sussman from "Structure and Interpretation of
Computer
>Programs": "Programs should be written for people to read,
>and only incidentally for machines to execute."
>
>
>Recent History:
>---------------
>
>A couple of years ago, life was brought into the dormant Israeli
>Perl community. A web-site was being maintained, monthly
>meetings are now the norm, and there's also an active mailing list. We
>even had a perl conference (YAPC::Israel::2003) and planning to have
another
>one. I am grateful for the people who made this happen.
>
>I don't know how much we were able to introduce more people to using Perl
in
>Israel, but we certainly have a lot of fun learning new things from each
>other.
>
>I now meet Ran Eilam (who as you may remember introduced me to Perl in
the
>first place), in our monthly meetings. Having spent the time we were
apart
>in the industry working for his living, he is now full of various
industry
>trends (and hypes), advocates "Extreme Programming" and calls
user-interface
>geometry managers, "the geometry manager pattern". (I guess that what
>happens during all the time you spend studying in university, and hacking
>on open-source software) He still seems to be very productive, and gave
some
>very good presentations to the local Perl Mongers.
>
>I still did not spend the time I learned in the Technion doing nothing. I
did
>my best to learn as much as possible about UNIX and Perl (which I think
is
>the language that encomp***** its spirit in the best way). I recently
read
>the third edition of the Camel Book which I borrowed from the Perl
Mongers
>Library. I learned so many new things as I have read it (even though
>beforehand, I was by no means a Perl newcomer), that I had to buy it.
(which
>I did)
>
>I don't regret specializing in UNIX and Perl. One constantly hear about
>all those over-hyped technologies: the Java world on one end and the
>Windows and .NET on the other. Don't get me started for my opinion on
>Windows - I don't work on it, except if I don't have a choice. Java is
>a nice language, but ****vers in comparison to Perl. .NET seems like
something
>a bit better than Java, but still closer to it than Perl. I'll take the
time
>to learn it, if and when I need to. (its promises of cross-language
>programming are pretty void, because it's mostly the same language with a
few
>syntactical differences).
>
>UNIX and Perl both seem to have a bright future ahead of them. They may
>not have the hype machine that other technologies have, and nor do they
>desire them. But they are both very rich, usable and functional
>technologies, and their quality speak for itself.
>
>Eric Raymond claims in "The Art of UNIX Programming" this:
>
> Python has risen in popularity as rapidly as Tcl has fallen. Though
the
> Perl community is still twice the size of Python's, a visible
> tendency of
> the brightest Perl hackers to migrate to Python has been rather
ominous
> for the former language, especially as there is no migration at all
in
> the opposite direction.
>
>I'm not sure if I qualify as one of the brightest Perl programmers (after
all,
>the baker cannot testify for his dough). But I know a few very bright
Perl
>programmers who avoid Python like the plague. And I don't see prominent
Perl
>figures like Larry Wall, Tom Christiansen, Randal L. Schwartz, Damian
Conway,
>Mark Jason Dominus, etc. converting to Python. (even though I'm pretty
sure
>they know it well). I think this trend is an indication of a fact: Perl
is not
>for everybody. All the qualities I described can sometimes lure people
away
>from it into the beauty of the much different Python. And that's good,
>because,
>I don't think one language can actually be suitable for everybody, and
I'd
>rather have co-programmers who _love_ the languages they program in. (and
for
>the record, I read something by someone who claimed Java was much better
than
>either Perl, Python or Tcl, so you can't tell)
>
>But Python is not for me. Once a distinguished Haifa Linux Club member
gave
>a lecture about Python, and after looking at his slides, I wrote to him
to
>tell him that they convinced me that Python was not my cup of tea.
Moreover,
>during the lecture I asked him if some of my favourite features in Perl
were
>present there, and almost always consistently discovered that they were
not.
>Needless to say, it did not made me more convinced.
>
>So, I don't think we should feel intimated by Python any time now. Not
anymore
>than Cats should be intimated by Dogs for people's affection. (I'm not
trying
>to make a generalization between the two divisions - there isn't any).
>
>So, keep the ****ft key and the "4" key on your keybords in order, because
>you'll need to use them a lot in your future.
>
>-------------------------------------
>
>Regards,
>
> Shlomi Fish
>
>--
>
>---------------------------------------------------------------------
>Shlomi Fish shlomif@[EMAIL PROTECTED]
>Homepage: http://t2.technion.ac.il/~shlomif/
>
>I don't believe in fairies. Oops! A fairy died.
>I don't believe in fairies. Oops! Another fairy died.
Mark P. Jacobsen
Exec VP, New Ventures/Business Development
O'Reilly & Associates
1005 Gravenstein Hwy North
Sebastopol, CA 95472
707-827-7140 (direct)
707-823-9746 (fax)


|