A wonderful article by David Wheeler about software innovations created a number of thoughts and perspectives for me on this theme
I have a strong curiosity about computers in general, not only software, but software is a vital part of computing
"Software primarily impacts us because of its ubiquity and changeability, as the computers that software controls become ubiquitous and the software is adapted to changing needs"Philip Armour said it this way:
Software is not a product. It is a medium in which we store knowledge. Historically there have been 5 such media: DNA, Brains, Hardware, Books, Software.Wheeler provides a tantalising outline of a large number of software innovations. I'd love to be savvy about all of these. When I teach and learn about computing I try to reflect on the impact this has on the uptake of "the fundamentals" (for want of a better word).
This is my view of teaching. That it has to have hooks to engage the learner in the modern world. But also at a deeper level it has to mesh with the more fundamental computing concepts that lurk below the surface. Fads that don't mesh lower down are not of much use. One reason I'm slow to catch on to some new ideas (eg.mashups) is that I haven't figured out how to relate them to the "fundamentals". On the other hand Game Making using a programming language can be both engaging and address the fundamentals of programming. Web applications are both interesting and can be related to the fundamentals of markup language, internetworking using datagrams, remote procedure calls, distributed hypertext etc. One reason I'd prefer not to teach some fundamental ideas is that I find them hard to make them engaging (eg. Relational Data Base). But certainly, I acknowledge RDM and Codd as important.
But I'm mainly looking at Wheeler's article from the perspective of my own learning, my own desire to understand computation more deeply. If there are other spin offs from that, eg. I might teach better, then that is incidental to the sense of satisfaction I get from simply understanding computer science at a deeper level. I'm moderately obsessive about this.
So, when Wheeler makes this heroic effort to outline just about all software innovations, including a time line, then I'm very engaged by his list. I see it as a partial curriculum to further direct my own understanding of computation.
For instance, he mentions Object Oriented Programming (1967), Regular Expressions (1968), Remote Procedure Call (1981), Design Patterns (1991) and Refactoring (1993). They are some of the items on his list of which I am already aware but need to know more. His assertion that they are true innovations (not fads) is motivational for me to make the effort for those items and to spend some time there and not elsewhere. It's important to be able to find out what is innovation and what is not and by my reading Wheeler is an authority whose lead I can follow with some confidence.
To become expert in any field requires studying history, the individuals who made that history and the environments in which they worked. Wheelers review provides a thumbnail outline of all of these things. It is a brief contextual history of software innovation, which provides a good starting point for further study in particular areas of interest.
He briefly reminded me of the importance of studying mathematics, that a "mathematical algorithm is fundamentally what any software patent is". I've written about this before in reviewing a Steve Yegge article about using wikipedia to learn maths.
Some things at first appear to be missing so don't forget to check out his "further consideration" list at the end which includes such items as algorithms, complexity theory, recursion, operating systems, googles "page rank" algorithm and open source / free software. I wondered about some of these and thought he was being a bit too exclusive in his main list
Wheeler demonstrates that proprietary interests and patents are very marginal to the software innovation process. I'm glad that the world is like that. Money doesn't have to rule the world and here is a very important field in which money does not rule the world. For me, that's a strong affirmation of the true nature of humans, that we are innovative creatures more so than money making creatures. The history of software innovation shows that!
Wheeler also talks about what is not software innovation but also important, things like:
- hardware innovation (eg. the electronic digital computer, transistors, integrated circuits, ethernet)
- social and legal change that parallels technolgical change, as the original innovation moves into the mass market or non market
- software standards