Anybody wanting to advance perl 5 seriously, should consider starting from scratch!
Though I too would love to see that, I doubt it is realistic.
Remember, both Topaz and Ponie were attempted and abandoned.
The best we can hope for is probably a slow, relentless refactoring.
Of course, the "old, huge, tangled code base problem" is not
specific to the Perl 5 internals.
It is a chronic problem in the software industry,
even afflicting the blessed Perl Monks code base. :)
The problem isn't an infrastructure issue, however -- and speaking as one of the handful
of people who've had a hand in developing the site's software: It's our own gosh-darn fault.
Perlmonks is WAY more complex than when it originally launched.
It does a crapload of perl evals and sql queries per page.
It's vulnerable to resource hogs. Searching can cripple the database.
And right now, I don't think we're gonna fix these problems any time soon.
... It's not a matter of computer resources, as much as human engineering resources.
-- Re: perlmonks too slow by nate (original co-author of the Everything Engine)
Some relevant quotes from Nobody Expects the Agile Imposition (Part VI): Architecture follow:
Have you ever played a game called Jenga? The idea behind Jenga is that
you start by making a tower of blocks. Each player removes a block from
somewhere in the tower, and moves it to the top of the tower. The top of
the tower looks tidy, but it's very heavy and the bottom of the tower is
growing more and more unstable. Eventually, someone's going to take away
a block from the bottom and it'll all fall down.
I came into Perl development quite late, and I saw a very intricate,
delicate interplay of ideas inside the Perl sources. It amazed me how
people could create a structure so complex and so clever, but which
worked so well. It was only much later that I realised that what I was
seeing was not a delicate and intricate structure but the bottom end of
a tower of Jenga. For example, fields in structures that ostensibly
meant one thing were reused for completely unrelated purposes,
the equivalent of taking blocks from the bottom and putting them on the top.
-- The Tower of Perl by Simon Cozens
The perl5 internals are a complete mess. It's like Jenga - to get the
perl5 tower taller and do something new you select a block somewhere in
the middle, with trepidation pull it out slowly, and then carefully
balance it somewhere new, hoping the whole edifice won't collapse as
-- Nicholas Clark
I remember one company that has about 120 engineers, developers of all
kinds of whom 10 are still able to work on the core functionality.
The other 110 are working on new stuff.
We brought all the engineers into the room.
We said, okay, the product manager for the first area and the
lead engineer for the first area come on up here.
Now select the people you need to do this work over the next
month, including, of course, the core engineers.
And they did and we said, okay, now leave, get out of here and start working.
... when we got to the fifth product manager and the lead engineer and
they said we can't do anything.
There's no core engineers left.
We looked around the room and there were 60 engineers left.
They were thoroughly constrained by the core piece of functionality.
If you have enough money, you rebuild your core.
If you don't have enough money and the competition is breathing down your neck
you shift into another market or you sell your company.
Venture capitalists are into this now, buying dead companies.
-- Ken Schwaber, Google tech talk on Scrum, Sep 5, 2006 (38:40)
Netscape 6.0 is finally going into its first public beta. There never was a version 5.0.
The last major release, version 4.0, was released almost three years ago.
Three years is an awfully long time in the Internet world.
During this time, Netscape sat by, helplessly, as their market share plummeted.
It's a bit smarmy of me to criticize them for waiting so long between releases.
They didn't do it on purpose, now, did they?
Well, yes. They did.
They did it by making the single worst strategic mistake that any software company can make:
They decided to rewrite the code from scratch.
It's important to remember that when you start from scratch there is absolutely no reason
to believe that you are going to do a better job than you did the first time.
First of all, you probably don't even have the same programming team that worked
on version one, so you don't actually have "more experience".
You're just going to make most of the old mistakes again,
and introduce some new problems that weren't in the original version.
-- Joel Spolsky on not Rewriting
Now the two teams are in a race.
The tiger team must build a new system that does everything that the old system does.
Not only that, they have to keep up with the changes that are continuously being
made to the old system.
Management will not replace the old system until the new system can do everything
that the old system does.
This race can go on for a very long time. I've seen it take 10 years.
And by the time it's done, the original members of the tiger team
are long gone, and the current members are demanding that the
new system be redesigned because it's such a mess.
-- Robert C Martin in Clean Code (p.5)
That's not to say it can't be done though.
The great Netscape rewrite (ridiculed by Spolsky above) -- though a commercial disaster --
metamorphosed into an open source success story.
Another example of a successful rewrite is the Perl 5 rewrite of Perl 4.
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.
| & || & |
| < || < |
| > || > |
| [ || [ |
| ] || ] ||