Conclusion

Two stories, two universes...

First of all, I'm going to give this talk in reverse, at least as far as it serves my purposes. To conclude, I want to tell you two stories, of two different projects...

The first project is the next RAA. Following the excitement of the brainstorming session at the RubyConf, several people took leadership and it started rolling. Due to the complexities of quantum mechanics (or watching too much Star Trek), two parallel universes were split off at this point, and things progressed very similiarly in both. In the first, a flurry of activity happened, but then, due to some of the participants having a life, and others of them having jobs, the initial work dropped off and languished. Suddenly, a year had passed, and the RubyConf was coming around again, and a bunch of people decided to try to get something ready for it. They went back to the code of those who had started it, and found that it wasn't documented, was hard to understand, and couldn't be used. Of course, nobody was available who orignally worked on it. They ended up having to start over, and weren't able to get anything useful by the time the RubyConf rolled around. A whole bunch of people were embarrased, and only ten people ended up showing up for the conference.

In the parallel universe, a similiar scenario occurs: a flurry of activity, followed by a lapse in development. When the RubyConf approached again, a group of developers decided to pick up the project and try to get something done before the conference. This time, too, those who had done the original development were not around to ask questions of, and there was no documentation in the code. However, the code was clear and easy to understand, and development progressed very rapidly. When the RubyConf finally happened, attendence had doubled, largely boosted by a bunch of PERL users interested in Ruby after seeing how much better the new improved RAA was over CPAN.

Another project also started shortly after the Ruby project, this one code named Rite, and dedicated to rewriting the Ruby interpreter while keeping the existing functionality. Primarily worked on by an obscure member of the Ruby community, the project progressed fairly rapidly, and excitement in the Ruby community was high. An accident at Argon National Laboraties (unreported to the public) caused a split in the universe, and development in both of the parallel universes continued. In the first universe, the initial public release came, and everyone loved it. People started using it extensively, and all seemed right with the world. However, more and more incompatibilities started showing up, and people started complaining. It got so bad, that the author of Rite became discouraged and decided to change careers, opting to leave Ruby and become a rocket engineer, coding Fortran for the rest of their life.

The other parallel universe, however, took a very different path. When the public release first happened, almost all of the incompatibilities in the new interpreter were identified and fixed within a week, and all of the remaining incompatibilities were incredibly minor. Larry Wall decided to stop PERL 7 development in favor of everyone using Ruby, because the new interpreter was so fast and complete that he couldn't figure out a way to further improve PERL without it becoming Ruby.

So what was the difference between the parallel universes working on these two projects? The answer is, "What is unit testing?"

Copyright (c) 2001 by Nathaniel Talbott. All Rights Reserved.