Much has been written about ease of use in software, but I think that ease of programming has an even bigger effect. Clay Shirky has a written an interesting post about situated software. Situated software is apparently social software written without certain ‘Web Software’ characteristics, and has some other unique traits. These include
1. not being as technically rigorous
2. capitalizing on ‘real world’ group knowledge without including that
knowledge in software
3. lack of generality
4. planned small number of users
5. accepted physicality
6. short lifespan
7. lack of scalability
His post simply acknowledges that social software (that is, software intended to be used by and relying on the strengths of groups) is becoming, much other software, easier and easier to write. This is due to a variety of factors:
1. Increasing awareness of computers. The PC has been around for 20 years, and is featured in more and more facets of life. This means that even folks who aren’t computer geeks have a basic understanding of how applications work and can be expected to use any applications that are interesting.
2. Open source and costless software reduce the cost structure. If you have to spend thousands of dollars (or hundreds of hours building) for a crucial infrastructure component (for example, a database, or a web server, or a set of client GUI libraries), it’s hard to justify if you’re just whipping something together for a small group. But if you have MySQL, Apache, and IE already provided free of charge, it’s a lot easier to build something interesting on top of these components. This also applies to technical knowledge. I’m on a mailing list for computer book authors and have seem quite a few lamentations about technical content being available for free on the web and cutting into book sales.
3. Programmers are expensive. Methodologies are expensive. Repeatable process is expensive. And all these are unneeded, if it’s going to be a small application used by a known and finite number of people.
4. Increasing ease of use. Tools like perl, MS Office, VB and PHP are made for throwing together quick applications. Sure, you can build large scale applications with these tools if you want, but that takes rigor and discipline. The reason it takes discipline is because these languages were designed from inception to make ‘easy things easy’ even for non programmers. Microsoft deserves plaudits for realizing this and developing their applications with the idea of a non-programmer building applications in mind. (Have you seen some of the wicked Excel spreadsheets your accounting department has?)
This trend is nothing new. In the 1960s, you had to control your video display system in your program; now you just call on MFC or Swing to handle the guts of the GUI. In the 1990s, you had to build your own state machine for each web application; now you just download one of the many frameworks out there and you get a state machine for free.
My question is, what does it do to society when everyone has some kind of understanding of software? To lean on the analogy with cars, I think you’ll end up with a similar division: a highly skilled, specialized, small workforce that builds software that’s easy to use, and a large class of users, who have varying degrees of understanding of the software, but use it in ways that the designers can’t imagine (how did you dent that?) in all facets of their lives.