I’ve been reading the book “Simply Scheme”, and there is a quote in the introduction to the book that I thought was quite intriguing:
There are two schools of thought about teaching computer science. We might caricature the two views this way:
The conservative view: Computer programs have become too large and complex to encompass in a human mind. Therefore, the job of computer science education is to teach people how to discipline their work in such a way that 500 mediocre programmers can join together and produce a program that correctly meets its specifications
The radical view: Computer programs have become too large and complex to encompass in a human mind. Therefore, the job of computer science education is to teach people how to expand their minds so that the programs can fit, by learning to think in a vocabulary of larger, more powerful, more flexible ideas than the obvious ones. Each unit of programming thought must have a big payoff in the capabilities of the program.
The obvious implication is that Scheme and Lisp are the embodiment of the “radical” view, while C, C++, (and probably Java, although I think this book predates it’s popularity) are representative of the “conservative” view.
I’m going to reserve judgment on that until I’ve had a chance to actually do some programming in Scheme or Lisp. But I do find the idea of these two views of programming quite intriguing. It’s easy to understand why industry would lean toward the conservative view; it sounds a lot like the assembly line method used to produce most goods since the beginning of the industrial revolution. But I’m not sure it works quite that well for software.
More interesting to me, is how these two views of computer science relate to Free Software. Although it’s not spelled out explicitly in the above “radical” view of computer science, I think it seems to be implied that a “radical” view programming environment would be one that allows one developer or a small group of developers to develop large, complex applications.
In other words, that a “radical” programming language or programming environment would allow more to be accomplished in fewer man-hours. Doing more with fewer man hours is good for small development teams, but it’s also good for part-time hobbyist programmers.
While there are certainly some Free Software applications that seem to be developing quite well using “conservative” view development techniques (Linux, Samba, anything from the Apache foundation), I also this it’s next to impossible for a part time developer to make a noticeable impact on one of these projects.
I’m interested in ways that individual part time developers, or small teams of part time developers can develop significant applications or make significant contributions to an application. I’m interested in this for selfish reasons (my programming time is quite limited, I’ve got a full time non-programming job, I’m also a husband and father). But I’m also interested because I believe that anything that makes it easier for individual programmers to make a significant contribution is good for the entire Free Software community.