Thinking About Programming

There Is Still No Silver Bullet In Programming

Posted: 10/13/2008, Readers: 4234 Perm Link


In 1986 Fred Brook wrote an article called No Silver Bullet: Essence and Accidents of Software Engineering (pdf). In it he speculated that there were no "silver bullets" on the horizon that could bring rapid advances to developing software similar to those in hardware. It's an interesting read even today.

So have we made that much progress in 22 years? Despite all the efforts of a lot of smart people I still don't see any silver bullets that guarantee massive gains in productivity, correctness, performance and maintainability. I managed to experience a lot of the changes in programming since I was a kid in the late 70's, yet despite all the advances I've tried, they barely keep up with the growth in demands being made by the "customers".

I always cringe when I hear or read someone who essentially says "if you don't do X your code will suck". It doesn't matter if X is a technology, a methodology, a language, a style or a tool, someone will always promote it as a perfect solution to all problems. Yet inevitably people switch to it and discover that it only works in limited circumstances or provides only marginal improvements at best, and may actually make development worse.

A silver bullet seems like it would slay the development beast and make programming so easy anyone can do it. In all my years I've heard that for everything from OO programming, 4GL tools, graphical programming, modeling tools, methodologies and management techniques. Some of these help but I've never seen anything that universally made programming easy. Programming is still hard and after all these years it seems to be getting harder instead of easier. Much of the reason of course is that much more is expected of the modern software project; the best hope for silver bullets today is to keep things from getting more difficult in the face of more complexity. Making things easy seems a hopeless wish.

Now for me I found PHP to be a silver bullet of sorts for my web development projects, compared to the Java I worked with for the past 10 years. I've also worked for a bit in Ruby-On-Rails and dabbled with Groovy, which both seems to improve on my Java experience yet none of these represents a common solution to all of programming's issues. Many of my irritants in Java projects had more to do with how the projects were run (into the ground mostly) than the language itself. With PHP I am doing things my own way which might be a large part of the improvement.

I've always thought the biggest silver bullets in any project are the qualities of the people working on the team (not just programmers, everyone involved is important). Smart, experienced people who work by consensus or at least in a trusting hierarchy, able to pick the right tools and technologies for the job, and given the right level of support by management, QA, product and everyone else who contributes to the end result. My 10 years of desktop application experience certainly taught me the value of have really good people who work well together. Working on Deltagraph for 5 years, we had basically 6 programmers, 2 QA and one product manager and turned out 5 major releases; the teams at other companies with similarly complex applications generally had much larger teams.

When I've worked in places or on teams which were mismatched, poorly lead, used tools incompatible with the team members, had overly complex methodologies, the result was uniformly bad. The dumbest project I ever worked on had 40 programmers who flew into Mexico (some from inside) every week for months to work on a project trying to customize a product (Websphere Commerce Server) not designed to be customized, led by people utterly unfamiliar with software development, and with a deadline every week. The use of WCS was supposed to be silver bullet to get an online store up quickly; yet the way it was used led to two years of expensive development before the entire company vanished and nothing ever came of it. Sometimes I think people buy silver bullets and then forget to buy a gun!

I am in complete with Mr. Brook's argument that he could see no silver bullets in the future. I won't repeat his discussion of why but I agree in principle that building software is still a complex solution to a complex problem, and that assuming that some magic elixir will be found to make simple solutions for those complex problems to appear is to ignore the many small improvements that do appear to help.

Everyone wants to find a silver bullet (not just in programming, but, for example important today, in things like banking) that make everything a breeze. It's human nature to believe in these things.

Will be still be saying the same thing 22 years from now? Will software development be so easy that anyone can do it? Will software be built by AI without human help? A realist would say no, but like the humans we are, we sure hope so.

mark 10/13/2008 11:05

Take haskell. A very difficult language.

I do not think it is a good language FOR EVERYONE.

But I would love to have a programming WAY FOR EVERYONE.

I guess it would have to be visually somehow, at least as an option for those that dont want to type in huge amounts of text.

andrew 10/13/2008 14:01

there isn't a silver bullet but there have certainly been advances in terms of best practices e.g.

  • automated continuous integration
  • test driven development (of various strictnesses)
  • managed languages
  • a better awareness of the social/communicative side of software development
  • much better tools (IDE, tooling interfaces into runtime environments)

not silver bullets, but pretty fine ammo all the same

Ray 10/13/2008 14:34

I think people over look the simplicity of solving a problem. Developers can get over worked by code standards or frameworks that simply providing a solution gets a lower priority. I think that is were a iterative development is beneficial. It allows you to solve a problem in version 1.0 and then refactor code for easy reuse in version 1.0.1. This works for most situations. I think the goal for any project is to provide solutions while ending up with software assets (resuable components). Thoughts?

BTW: I like the resizeable comment's box. NICE!!!! I also dig the cancel and remember your text feature......

Thijs Blaauw 10/13/2008 14:46

One of the main points of Mr. Brooks' essay was that coding was but a small part of building a system. More important was understanding the problem, the business requirements. I do believe that modern languages, modern tools and modern development methods are more efficient than those that were available at the time that Mr. Brooks wrote 'No silver bullet'. That means there is even less room for a 'silver bullet' improvement on the technical side now than there was then.

Alex Chacha 10/13/2008 17:09

When you start looking for a silver bullet is when you have already gone down the wrong path. People looking for silver bullets often have software that is based on poor initial decisions (like building a castle on mud). There are many ways to send a project into a tailspin: novices designing software, design by committee (often results in lowest common denominator design), unwillingness to constrain oneself to a platform (resulting in low feature code constrained by low common functionality across various platforms), and so on. A language is rarely a problem, the process is. You mentioned that the best part was doing things your way, which is a start. Discipline and proper management are essential also. It is too often that people managing developers are just business people who do not (and often cannot) understand the basis of software development (repeating the mistakes of Mythical Man-Month and Death March, or treating resources interchangeably). The more non-technical people you have managing software the more of a chance there will be a mess at coding level and more likely they will be looking for this silver bullet only to realize it doesn't exist but they will spend lots of money along the way on consultants, fancy development methodologies and questionable RAD technologies. The sad part is, most will learn nothing from this and will repeat it in the next project because they did not understand that what go them there is how the project is managed and designed. Alas...

MFR 10/13/2008 17:45

AI doing the programming would be super cool. But you have to be careful so they won't take over the world. ;)

Michael Chermside 10/14/2008 05:07

There is one misconception I would like to correct: your definition of "silver bullet" as something that "would slay the development beast and make programming so easy anyone can do it" is a bit different from Brooks' definition.

He defined it as any advance that would give an order of magnitude improvement (factor of 10) within a decade in productivity, reliability, or simplicity.

Brooks' definition is, I believe, far more interesting and engaging because I don't know of anyone serious who claims that their tool, practice or methodology will "slay the development beast", but I DO read serious claims promising 10-fold improvements. Agile development is one -- while I think use of Scrum is a great idea, I don't really believe it will give a 10-fold increase in productivity. Concurrent programming is another; I am sure the machines will run 10x faster, but I doubt that the programs will.

Alex 10/14/2008 12:04

"I am in complete [agreement] with"? You likely missed a word there.

Razor 10/14/2008 14:33

I agree that there is no silver bullet, butI'm sure of few things.

  • SOA is usufull byt far from being a silver bullet.
  • Dynamic languages are cool but faaaar away from being silver bulltes.
  • Agile approaches are good but again not alwaya a winning strategy.

On the other side I think that one of the most important thing that far to often is underrate is the qulity of documentation. An here I must admit Microsoft is rather weak, Sun/Java is quite good, IBM is simply the best: browse IBM documentation and even in PDF you find more easely what you need than in html from others.

I don't know how much Aspect orientation and/or annotations will help. But for sure I would like to be able to use more of literate programming.

silvery and bulletproof 10/14/2008 16:02

of course there's a silver bullet

these days' its called 'Agile'

or 'SOA'

depending on which vendors the suits play golf with