No Silver Bullet Debunked
Sunday, 28. October 2007, 02:24:54
So we hear desperate cries for a silver bullet--something to make software costs drop as rapidly as computer hardware costs do.
In the past two years developing Project V in my free time and in past projects before that, one of the main things I've noticed is that asking the wrong question is usually much worse than finding the wrong answer. A wrong question will never let you reach the correct solution and right here, the NSB paper is off to a bad start. The rest of the paper is invalidated at only the third sentence.
Here, Brooks is asking if there isn't something to make software costs drop as much as hardware costs do. Costs are one thing, but what each product does is another. Let's look at the Intel PIII 550 released in May 1999. It cost $744 each for 1000 units. By Feb 2000, it cost $193 each for 1000 units. In 9 months, the price went down by $551. By Feb 2001 (two years later), you could buy a 1.5GHz PIV for $637 and 1.7Ghz PIV a few months later for $701, which dropped to $352 the very next month. So the price drops are quick. Within a few months, the prices drop a lot and within a few years, that product is likely to have been replaced by something else.
Next, we get to software. You can look around, but prices don't fluctuate that much. If you look at NewTek's Lightwave 3D package, it used to be over $1000 many years ago, but for the past several years, it's stayed constant at around $800 for several versions.
Unfortunately, this is an incorrect comparison. We're only looking at the costs. It looks like costs of hardware are getting cheaper while getting faster. But software seems to remain constant even with these hardware advantages. But that's the wrong question. It's the wrong thing to look at.
Let's look at the functionality. Processors do the same thing as they've always done. Since the 8088, it still does those same operations. Some were added over time. The 286 added 16bit protected mode. The 386 added 32bit operations and registers. The Pentium added MMX and the PIII added SSE. But these are all the same thing. Registers and opcodes. More cache, more registers and more opcodes that operate on those new registers. Ultimately, there is nothing new there. What is new is the speed. And that's admirable. But there's no extra functionality other than that speed. There's nothing in those new opcodes that you couldn't do before. The doubling of transistors is more of the same. If we apply this doubling of resources to software, we can already do that. How many images can a drawing package handle? 10? Then you've just achieved a ten-fold increase in functionality within seconds. 10 * 2years * 365days * 24hours * 60minutes * 60seconds = 630720000. So we have here a 630720000 times increase in productivity or reduction in costs compared to the two years that it takes for hardware. But we don't think that way. Brooks picks and chooses what he wants to compare. Take into account the reproduction costs. Hardware can decrease costs because there's actually a cost involved. In software, how do you reduce costs of reproduction when that cost is near zero already? Again, invalid comparisons.
The fact that software is slower than hardware speeds up could be an indication that we can insert functionality faster than hardware speeds up. It could mean that we don't optimize our code very well, but that's beside the point. If we talk about features of speed in hardware vs. functionality in software, software clearly has more abilities than ever before. If you look at just the amount of features included in software, there's a clear indication that software is using whatever resource is available. The multi-core crisis is another indication of this. If there's extra resources to be had, programmers want to use it. As for doubling the amount of features, I don't think that's necessarily a goal either. So Brooks goes to the opposite end and asks if we can't reduce the costs just as hardware. That's a trap one must be very careful not to fall into. Because when you go there, you forget exactly what it is you're comparing. The costs must be attributed to the same things. In hardware, it's number of resources (transistors). In software, we already outpace hardware by several orders of magnitude (in the billions or trillions). Show me one programmer that cannot use most of the resources on a machine within seconds! So the cost comparison is invalid as stated.
Here's a reference to CPU price charts used for the pricing info above.
Not only are there no silver bullets now in view, the very nature of software makes it unlikely that there will be any--no inventions that will do for software productivity, reliability, and simplicity what electronics, transistors, and large-scale integration did for computer hardware.
I'd like to use a favourite technique and to replace words in quotes to remove any preconceived notions. When you label things as A and B, you don't get the same attachment as you do for terms like hardware and software. So let me requote that.
Not only are there no silver bullets now in view, the very nature of A makes it unlikely that there will be any--no inventions that will do for A's productivity, reliability, and simplicity what X, Y, and Z did for B.
Note that it's an EXACT duplicate of the original except for replacing some terms with capital letters. Now I'll requote the above, but add a phrase at the end.
Not only are there no silver bullets now in view, the very nature of A makes it unlikely that there will be any--no inventions that will do for A's productivity, reliability, and simplicity what X, Y, and Z did for B even when A possesses all the power and functionality of B.
If you read the above for the first time, would you not say there's some logical fallacy in that statement? How can A be less reliable than B if A can do everything that B can do? And we know that software can do everything that hardware can do. We can simulate it if we wish. There is no setup found in hardware that cannot be replicated in software for use by software. So there's zero reason that we can't use the same techniques that make hardware so reliable in our software. At least, not on a technical basis. Other reasons will come up later.
The next line in the paper is this:
We cannot expect ever to see two fold gains every two years.
What can't see a two fold gain? Reliability? Nope, we can replicate hardware techniques. Productivity? Nope! Simplicity? Nope! If it's found in hardware, we can replicate it in software. The "two years" is what's key here. Brooks doesn't say, but it seems to indicate Moore's Law where the number of transistors doubles every two years. Software can double its usage of transistors right now. Today. Yesterday. 50 years ago. So the above statement is false. It's tempting to compare the number of transistors for hardware and reliability in software, but it's not a fair comparison. They're different things. Look at the above quote again and see how there's no qualificaition of what gains are made.
Please note that I'm showing how Brooks' arguments are false and am NOT going to the opposite spectrum. I don't need to show that there is a Silver Bullet. Not having found one does not mean that it does not exist. Ironically, I think Brooks has mentioned several times what this silver bullet is, but doesn't want to admit it.
Again, about hardware:
No other technology since civilization began has seen six orders of magnitude in performance-price gain in 30 years. In no other technology can one choose to take the gain in either improved performance or in reduced costs.
We get a little bit of qualification, yet it still falls short. Are we comparing performance or reliability? These aren't thing you can compare and then put a price tag on and say there's something out of whack. These are two different topics. If Brooks wants to talk about performance, then so be it. But if he wants to talk about reliability, that's fine too. He can even talk about both. But he must talk about each item as they relate to both software and hardware. Note that in the above quote, he does NOT talk about software. This leaves the impression that there is some equivalent in software that is somehow inferior or that hardware has some magical property. The kinds of statements above serve only to inject a preferred state of mind into the reader. Also note the issue of cost again when it doesn't belong. Mass production of software duplication is already at zero. Software already has hardware beat in terms of cost as it relates to duplication.
The essence of a software entity is a construct of interlocking concepts: data sets, relationships among data items, algorithms, and invocations of functions. This essence is abstract in that such a conceptual construct is the same under many different representations. It is nonetheless highly precise and richly detailed.
Now we get to Brooks famous essential complexity. These are things that must be dealt with no matter what. Brooks says that software has essential building blocks that cannot be avoided. Essense is the word he chooses. And the above quote shows the items he believes are essential to a software entity. Different tools can reduce accidental complexity, but software must always DO something. So that part, the DOING and how it is constructed, is essential and is where much complexity comes from according to Brooks (quote found below) and cannot be removed, hence No Silver Bullet. More on this below.
I can use Project V or simply nodes as in Lightwave to disprove the above quote where software must have the concepts mentioned. The quote is totally false and I've shown it with two examples. An algorithm is an imperative construct. It's a set of operations that must be done in a certain order. Even in functional programming, there is an order to the sequence of functions through its nesting mechanism though there is potential for more flexibility. This is not the only way to describe software. You can look at my previous blog entry for an example where I demonstrate no algorithm and no invocations of functions. None! Not one function can be seen. Yet, it's still software. This means that algorithms and functions are not essential as Brooks thought, but are accidental. Also look at the node system in NewTek's Lightwave 3D package. It is definitely software construction usable by artists. This means that Brooks' essence of software is misguided at best. You can indeed use the things he says to build software, but you don't have to. It's not the whole picture. Any assumptions made on the quoted claim must be tossed aside.
He does try to say that these things can have different representations, but just lumps it in with the rest without as much of a comment. As a professional developer, this is a statement that I cannot endorse. If different tools yield better results depending on the circumstance, then Brooks' statement about what he believes are the essense of software cannot hold up.
I believe the hard part of building software to be the specification, design, and testing of this conceptual construct, not the labour of representing it and testing the fidelity of the representation. We still make syntax errors, to be sure; but they are fuzz compared with the conceptual errors in most systems.
If this is true, building software will always be hard. There is inherently no silver bullet.
This all sounds good. When you take into consideration everything I've mentioned before, it makes for a weak argument though. I too believe that the hard parts are the things that come before implementation. These lump in both necessary and unnecessary components though Brooks doesn't see it that way. The best people can reduce and choose the best ways to accomplish the task. I also believe that the best way to implement this task is difficult. Not the typing part, but deciding what to use. It's difficult to tell what part Brooks is talking about. To me, it seems like he's saying that anyone that knows a language can deal with it. The higher level thought processes that form your design are not considered. I would agree with the notion that once you know a language, this isn't what is going to stop you. What I have a problem with is that it's not clear what point he's trying to make and then jumps the gun to use this to support the biggest conclusion in computing history.
What he seems to be basically saying is that representing and inserting the software onto the computer is easy. I agree with that. This is the typing part. Anyone that knows a language can type stuff in. What goes into that software is a different story. And the tools you have that enable this also affect what you do and with what ease. So the conceptual errors are indeed one factor, but the tools you use that enable these concepts are also involved. If we have tools that better suit the concepts, then we'd have more reliability and simplicity, no? So these tools are not fuzz compared to the concepts. Brooks says that high level languages pretty much resolved any accidental properties of inserting software and can't get much better. I disagree. How can he know? How can a man who believes that function invocation is an essential part of software know? Here, it's not so much that what he says isn't true (and it isn't), but that there's a credibility problem and that's there's nothing supporting his argument. His argument is shown to be false in further topics below.
Now, we get to his four pillars of the software holy grail. Complexity, conformity, changeability, and invisibility.
Complexity. Software entities are more complex for their size than perhaps any other human construct because no two parts are alike (at least above the statement level). If they are, we make the two similar parts into a subroutine--open or closed. In this respect, software systems differ profoundly from computers, buildings, or automobiles, where repeated elements abound.
First, don't let Brooks type in vehicle recall in Google. I realise the paper is from the 80's, but if you're going to quote an example, you should look it up. And he shouldn't look here either. That leaves buildings and computers. Let's not tell him about the Pentium divide bug. I've heard of a few other recalls as well in different hardware. Didn't the XBox have a faulty power supply at one time? And finally, there are buildings. I've worked in construction in the past year as my blog readers know and I can tell you building codes are ridiculous. Tell anyone in any large city if they can get competent people to do work. Large buildings used to fall down for numerous reasons. In the past, it was because the land was not inspected properly and the type of weather in the area was not taken into account. This includes frost levels and earthquakes. Buildings are ONE type of "things" that humans have been doing for thousands of years at least. And anyone that has tried doing repairs will laugh at anyone in software trying to say that it's so much easier in construction.
I also object to Brooks' assertion that software components are different. What usually happens is that we need to reuse something, but in a slightly different way. Functions don't allow for this flexibility. That's where generics come in. You can use the same functions for different data types. Even so, it'd be nice to have more flexibility. This means there is still more we can do. I'm working on that right now. It's still up in the air how this will turn out, but giving up is not the answer. In any case, it's been shown over and over again that reuse is and can be done. Again, Lightwave has shown this and you can read this chapter in J. Paul Morrison's book. It'd also be curious to know why people like extensive libraries which are often attributed to Java's success.
Likewise, a scaling-up of a software entity is not merely a repetition of the same elements in larger sizes; it is necessarily an increase in the number of different elements. In most cases, the elements interact with each other in some nonlinear fashion, and the complexity of the whole increases much more than linearly.
The irony knows no bounds. If that's the problem, then fix it. If it's possible in hardware, it's possible in software. Perhaps it's the tools we use to connect these different parts that are at fault. Brooks gives no consideration to this option.
The complexity of software is an essential property, not an accidental one. Hence, descriptions of a software entity that abstract away its complexity often abstract away its essence.
Almost every sentence can be disproved. How can Brooks say that complexity is an essential property of software? He makes an assumption. There is nothing in the paper backing up his claim. I already showed that you don't need to use functions. Something Brooks thought was an essential part of software. How then can we take his claim of software's essential properties at face value when we know he's been wrong about this before? We can't.
We can go further though. We can show that his claims are false. Let's assume that complexity is NOT an essential property, but an accidental one. This would mean that abstracting away complexity would not abstract away its essence, but rather its accidental properties. That would be a huge plus. Is it possible to show that there is some accidental complexity in software? Yes. It's rather easy too.
Take a function that calls or invokes two other functions where the data from the first function is passed to the second (A is the primary function and B and C are the two delegate functions). This primary function A must know properties of two other functions (B and C). The two delegate functions (B and C) must also return to the invocator A either in execution or in data (or both). Is it possible to simplify things? What we can do is not use functions and instead of having the first called function B return values, it could pass it on directly to the second function C. This isn't possible in conventional languages. What we have is A->B->C in a linear fashion. There are two connections instead of four. A also need not know anything about B. It can connect to anything that supports that kind of data. In function form, A must know the name of what it calls. Not so when we chain the functionality in this manner. A has no clue who it connects to. And it doesn't care. It also only connects to ONE entity, not two. So its complexity is reduced in half just with that. And since it need not know what it connects to, then complexity is driven down even more. What's more, in some languages, the only use for A is to connect the two called functions. With our new scenario, we can dispense entirely with A and only use B and C with B->C thus simplifying things further. Some languages have names for this kind of data flow construct like arrows and monads. That's where those things come from.
There's a real reason why these constructs are starting to appear. There is more on the horizon too. Brooks perhaps had no way to know, but these things did exist over 30 years ago. Maybe the popularity was at fault. Still, excuses aside, it ultimately means that there's a lot of complexity in software that is not essential and that Brooks' claim is wrong again.
Another thing to note which is very important is that software can be built in two different ways. There are only two fundamental properties of software. Imperative and data flow. Everything else is built on top of these properties. You can read up on it here. What Brooks talks about is the imperative way. Data flow is like the hardware way. They can both coexist in peace. Unfortunately, Brooks' paper is more of an attack on imperative than anything else. It does not consider data flow.
About conformity,
These differ from interface to interface, and from time to time, not because of necessity but only because they were designed by different people, rather than by God.
This is a weak argument. We had the same problem with DOS. Too many hardware interfaces. MacOS, AmigaOS and other OS's didn't have these problems. Today, even Windows API is usable. The problem mentioned by Brooks does show up all the time though. It's a matter of getting together and resolving the issue as we did in the past. The web is one such case that is in dire need of a cleanup. As Brooks says, it's a human problem, not a necessary problem. We've solved it in the past and can solve it again. It's just a matter of doing it. Does this mean conformity is solvable? Absolutely. It's been done in the past on numerous occasions. Next.
About change,
Buildings do in fact get changed, but the high costs of change, understood by all, serve to dampen the whims of the changes.
Brooks' argument amounts to physical things costing more than software. Isn't the NSB supposed to argue the opposite? That physical things can cut costs? Arguing on both sides of the fence is not impressive.
At point in this section is how software can live forever, but physical things cannot. There's one thing that Brooks misses though. With the side effect of physical things breaking down, the people who build them must come up with ways to reproduce the thing they are building from scratch. If we were to do the same with ONE particular piece of software, I can guarantee that prices would drop rather fast and that reliability would go up. The problem is that initial costs would be grossly disproportional to the gains. With hardware, you don't have a choice. Look at what it costs to build a fabrication factory. It's in the billions of dollars. Who in their right mind would do the same for software? There's an issue of perspective that's missing in Brooks' arguments.
Software is invisible and unvisualizable.
This is clear evidence that Brooks has never heard of data flow programming. While not currently popular, it is gaining a LOT of traction. And it is visual. Again, NewTek's Lightwave 3D node editor is very visual. It's used for 3D, but can be generalised quite easily by providing your own nodes. I couldn't find a good Lightwave screenshot, but Blender has added nodes, so here's a preview of that. So that's one very concrete example where Brooks is wrong and that's enough for this point. Perhaps he was talking about representing the current way of programming and converting that into something visual. If so, that's a really shortsighted view.
I just have to say something about the following.
The reality of software is not inherently embedded in space.
This shows a clear indication that Brooks does not understand the fundamental concepts that make computing possible. If he did, he'd have a solution to concurrency (that comes for free with one of these concepts and further reduces complexity). One concept is embedded in time, the other in space (exactly what Brooks says is not inherent). Imperative is embedded in time and there's a very real reason that it's called programming. Programming, in any field, always deals with timings. TV programming deals with when shows come on. Same thing for theatre. In computer programming, timing plays a crucial role as well. It's where you state what operations are done before the other.
Software can also be embedded in space. It's the flip side of being embedded in time. This is how hardware and data flow works. You can look at my last blog entry or the Blender preview just mentioned and see a couple of very visual examples of software in space. You can even follow the data as it travels from point A to point B. It doesn't get more visual than that.
Anyhow, this is getting tedious. I can pick almost any sentence from this paper and show real concrete examples of how it's wrong or show simple logic of how Brooks' arguments don't hold water.
At this stage, the four primary arguments of Brooks', complexity, conformity, changeability, and invisibility are unfounded. Please consider that even though I believe the opposite of NSB's claims, I am not arguing FOR that in this blog entry. I'm only showing how the NSB paper is false. Nothing more.
I'm skipping the past breakthroughs and a few other sections, not because they're necessarily valid, but because they show improvements (or not) and do nothing toward the argument of NSB. The only thing I'd like to mention is that programming languages are not the only way to build software. Brooks does not consider this and seems to not be able to. Just because one person or many cannot see different ways of doing things does not mean they don't exist.
You can read for yourself what Brooks says about AI. I agree that the term is used for limited tasks. It doesn't mean what we know as intelligence. At the same time, I do think that if we understood how to produce creations such as our brains, we would well be on our way to a silver bullet. Being able to grow software is something that would be remarkable. Our brains are incredibly reliable considering what it goes through. We do not maintain it like we do our cars or houses. It takes care of itself. If it does break down, it's usually due to some outside influence like viruses, injuries or other physical events. The brain is also built using a data flow mechanism with the use of interconnected neurons. If anything, AI should eventually produce some new discoveries. We know what's possible just by looking at another human being. Sure, there's potential for evil, but there's potential for greatness too. Regardless of the NSB paper, you can look at yourself in the mirror every day and know that there's something better waiting for us in software. Unless you don't like what you see.
Actually, I'll end it here. The rest of the paper considers things that have helped or not helped instead of focusing on the argument at hand. ADA aside, we should use critical thinking before accepting an argument of such magnitude. Besides, any argument that leads to the negative should be dispensed with. Not because it may not be true, but because one negative thought can be more destructive than any real life obstacle. It's even more devastating when the arguments end up actually being false such as with the No Silver Bullet paper. No other paper has had a more detrimental effect on computing than that one. May it Rest In Peace once and for all. For us. And for our future limited in its greatness only by our imaginations.


As for hardware prices. These are not dropping at all! Every new hardware costs almost the same amount, as it costed for 8080 at its first appearance! Same is for MANY things around (cars, electronics, etc...). We could only say that prices drop, if we'd still been using old 8080 processors nowadays. HERE is a trick.
You are right - we get used to wrong questions and expect to have correct answers to them. Damn.
By vladas, # 28. October 2007, 10:11:33
Brooks also says that there will NEVER be a silver bullet. Not today and not tomorrow.
To others that have contacted me or commented on other sites:
You can look at what Brooks says in a different light. Reproduction costs are zero for software. It's also easy to use more resources for software. In hardware, any advances will yield a reduction in production costs. But they're zero in software. The only thing left is the human factor. Deciding how to design the project in question. This is what he says is hard. But this is true of all fields. Brooks doesn't say that this part is harder in software. He simply says this is what he believes to be the hard part and if it ends up being harder in software, it's because of some inherent property of software that creeps up into this design process. Since all fields have the same organisational problems, there's nothing other than this in software left for costs to be reduced. This is why he says there's no silver bullet. Other fields can reduce costs by attacking problems that simply don't exist in software such as duplication costs (which are already at zero in software). So hardware costs go down, but not in software.
The problem with that is that his claims about accidental complexity as they relate to the building blocks of software are seriously flawed. That's what this blog entry addresses. I also address how he makes invalid comparisons, doesn't take into account initial conditions and he certainly doesn't put it in terms comparable to the last paragraph.
If you cannot comment, please email me your comments and I will post them here. You can get my email by clicking on the about link or on the green computer board graphic at the top.
By Vorlath, # 28. October 2007, 10:37:51
I think you've actually proved his point
Particular pieces of software can get "simpler" once their solution to their particular problem has a good base. Lightwave and Blender didn't just appear because of fast hardware... they have been worked on for a long time to get to the point where they can have nice nodes to code with. But making the _nodes_ work is complex. As processors get faster, the actual problems available to you _increase_ because you can actually start to solve them in a reasonable amount of time.
Brooks isn't referring to the price of software... but the internal development costs. It still _is_ expensive to develop software, and that hasn't gotten exponentially better because of having 2 Ghz multi-core systems.
The points you make about it being the design time aspects that are so important are exactly his point! Having fast hardware doesn't make design any easier... the typing has always been easy. It's what's being the typing that matters, and that's a hard problem (unless you've already solved the domain).
Take Project V for example... someone will still have to figure out how to map their solution onto a distributed data flow. This will be trivial in some cases, but not in others. In fact, I have no doubt there will be problems that will "spend" (time = money) a lot attempting to do that mapping when a different type of language would have been more appropriate.
Project V is itself not a silver bullet, and that is exactly Brooks' point. Every problem is a new problem, and faster hardware isn't helping that.
Enjoy reading your stuff, even when I don't necessarily agree.
Cheers,
Josh
By Vorlath, # 29. October 2007, 04:32:25
To reply, I say that I know very well about the development cost. But the selling price of software is what covers those costs. I did think about this when I wrote about it. I didn't feel it necessary to mention it further. What I did mention was what it costs to build a fabrication factory though. So unless most software projects costs in the billions of dollars, I don't buy that software is more expensive than hardware (though I haven't heard anyone make that specific claim). My argument is that costs are already low by comparison. You don't need a fab. And copying costs are near zero. I think the lack of these things is where Brooks get sidetracked. Since there is no reduction in costs in these areas (since they're at zero already), he thinks that there's something not quite right. Some of the reduction in costs of hardware are for things that already cost zero dollars in software. But there are reductions that can be done in software and I mention examples of this.
What Brooks is also doing is comparing reliability of hardware and saying we can't do the same in software. That there's something inherent in software that's more complicated. I've shown every one of Brooks' argument relating to this to fall apart under scrutiny.
About nodes, getting them to work may be somewhat difficult (tedious actually, not hard). But once they're up, you can build anything you want. The underlying technology need not be part of what the developer has to think about. That's a one-shot complexity problem that need not appear again. It's like the first compiler. If everyone had to build their own compiler, it'd be insane. Who does that? Not many people. Instead, we write domain specific languages and that kind of thing that are more specific. More often though, we use existing compilers. This is a strange one. On the one hand, we have an example of reuse, yet Brooks says this isn't likely to happen in a larger way.
About typing, I was saying that typing may be easy, but it doesn't produce fast, reliable or anywhere near the best results. This means there's accidental complexity in the typing itself. So no, I don't prove his point at all. I wasn't talking about the WHAT being typed. I actually agreed with him that the part before typing was hard and say so in the blog entry. But this assertion is true of ANY field. It's not Brooks' point. Brooks makes a claim that there is something different about software. It being more complex. Where is it? Where is this complexity? He says it's inherent in software itself (essential complexity) as well as the stuff that comes before the typing. I go on to show that the typing part does have accidental complexity. That the typing part actually contains certain things that aren't needed and thus disprove his conclusions that this can't be improved upon further.
If Brooks is saying that the requirements are more complex in software because of some human factor and not something inherent in software itself, then I've wasted my time. That's an absolutely ridiculous claim. One that anyone in any other field would laugh at. I could comment on it, but that just blows my mind if this were true. It'd be WAY easier to dispense with NSB if this were the case. Unfortunately, it's not so easy. Here's a direct quote.
"no inventions that will do for software productivity, reliability, and simplicity what electronics, transistors, and large-scale integration did for computer hardware."
So it's not about the human factor at all. Brooks is actually talking about inventions. No way Brooks would claim that organising people in software is any different than in any other field. At least I hope not. That's the kind of stuff that goes in the loony bin. He does say that the stuff before implementation is hard. But this is the same for any field. His main points are indeed about software itself.
Oh, about faster hardware, Brooks says nothing about that having an impact on software as far as his arguments go. He used it for comparison in reliability, speed and other properties. Not that hardware is a tool that would simplify programming (though that could theoretically be possible, but it doesn't come up in such a manner).
By Vorlath, # 29. October 2007, 04:33:40
With regards to your reply.. I hope you're right
I think things like Project V are an attempt to make it not be that way... because it does appear that we have an issue in our expression of the solution (assuming the problem is understood in the first place).
Thanks for the reply.
Cheers,
Josh
By Vorlath, # 29. October 2007, 04:35:27
By Vorlath, # 29. October 2007, 04:43:25
Brooks has been around long enough to have seen the hype around imperative and logical (Prolog for instance) programming that would slay software development costs and lead to a nirvana of programming. He's basically saying "design is hard" and it is.
By spc476, # 29. October 2007, 05:46:59
By Vorlath, # 29. October 2007, 08:19:30
By vladas, # 29. October 2007, 10:04:18
You wrote a rather long post so it is kind of complex to write an arguement contradicting you point for point.
In essence however, I think that regardless of how well Brooks wrote his paper - the premise of "no silver bullet" still holds.
True we can use the tooling and other advances we have today to build the system that were built 30 years ago much faster - the problem, however, is that nobody wants such systems. So the challenges we face today are more complicated and the so called "silver bullets" that keep on popping up only get us so far.
By the way, regarding one specific point you mention the invisibility etc. Brooks does specifically talk about "graphical programming" in the paper. So he did take that into account and he does explain the problems it has (you can agree to that or not - but its there)
Also regarding changeability - the problem with analogies is that they can only take you so far. The reality however is that software is considered to be easy to change while physical stuff is much more likely to be replaced with a new version than being updated and that's what Brooks argues
Arnon
http://www.rgoarchitects.com/nBlog
By anonymous user, # 3. November 2007, 23:12:35
Sorry, can't agree with you there. Show me some proof. We've been doing the same thing for 50 years. That doesn't impress me and isn't proof.
No no no. He talks about representing existing software visually. NOT what I'm talking about. I actually agree the stuff Brooks talks about will get you nowhere. There's a fundamental difference between what node editing does and what excution flow does. Learn that difference and get back to me.
I'll even quote you where Brooks doesn't get it in the very section you talk about.
This is what I've been saying Brooks' talks about all along. He only considers visualising execution and then uses it as if it applies to dataflow.
He does mention dataflow once. But he says that word in passing and lumps it in with everything else. He tries to dismiss VLSI design, but even there, I'm amazed how quickly he tosses it aside. It does work. Yet he says that can't do anything for software. He debunks himself.
Please realise that he's been 100% proven wrong. Blender and Lightwave exist. People want it. The screen is not too small. This point is dead. Done with. He was wrong. Is wrong. And will always be wrong.
This is ridiculous and everyone knows it. Back in the day of game cartridges, people would complain about how they could never patch their code as others did with software. Once in was shipped, that was it. You had to live with it. This didn't apply to just the code. It applied to any extra hardware put in that cartridge like RAM, faulty components or any of that. Replacing hardware was a disadvantage, not an advantage. If replacing the thing is such a good idea, do a complete rewrite in software then! For EVERY release. This argument is pure fantasy.
There are REAL examples that debunk each and every one of Brooks' arguments. Anyone that believes the No Silver Bullet paper is kidding themselves. Where's the proof? I've shown countless examples that his arguments don't hold water.
By Vorlath, # 4. November 2007, 03:54:30
Here it is.
http://my.opera.com/Vorlath/blog/2007/11/04/no-silver-bullet-debunked-shorter-version
By Vorlath, # 4. November 2007, 03:55:22