Yesterday I was reading something on "Software Engineering" that talked about improving productivity and it struck me that a lot of academics miss one critical point about building better software: use powerful languages - Ruby, Boo, Python, Lisp, etc. Most academic writing seems to be colored by the assumption that languages are largely interchangeable... But then papers don't seem to be judged much by how useful they are.
Some people hold formal methods as a potential source for improvements in productivity. But I'm skeptical. If you could describe a piece of software completely enough for the formal methods to work, it seems to me you could make it bug-free in the first place. Software is the most sophisticated creation of our civlization. And formal brings to mind rules and procedures and protocols. That doesn't seem to go down well with creating sophisticated systems. Maybe I'm ignorant here and there's some breakthrough just around the corner. Possible, but I'm not holding my breath.
I think that the greatest source of increase in productivitiy in the near future will be better languages. This, of course, is already happening, with the shift from C++ to Java. The most respected hackers - the most productive people - seem to be using the most powerful languages. Do they use formal methods? Doesn't seem that way to me. A better answer would be Lisp or Ruby.
A lot of the material on Software Engineering makes me feel like throwing up. They talk about methodologies and processes and what have you, but do they even mention conceptual integrity? Taste? You'll probably learn more about building software by reading Paul Graham's essays than from the tomes on "Software Engineering". (Is it just a coincidence that the former is orders of magnitude more interesting than the latter?) A lot of "software engineering" seems to miss the point that building software is an art. True, it's engineering, and it's science, but it's also an art. There is certainly a place for methodologies and processes, but it's also crucial to have a masterful designer with a keen sense of taste. To have people who care for the software they're building. All the comparisons of building software to erecting buildings, and the conclusion of that line of thought, I think, paint only a partial picture. Try comparing building software to painting the ceiling of the Sistine Chapel as well, and then you get a complete picture. Today's software engineering sounds like giving a formula to create the Mona Lisa.