Daniel Barlow <d...@telent.net> wrote in message <news:878zct1o7g.fsf@noetbook.telent.net>... > So I think Lisp programmers have to decide whether their goal is to > get rich, or to popularize Lisp. Even if you correctly identify the
If Lisp gains a reputation for making people rich, it will quickly become popular. Paul Graham is just one person, not enough to give Lisp such a reputation. We need hordes of Lisp millionaires.
Why don't we already have hordes of Lisp millionaires? What is the invisible obstacle standing in the way of this logically-expectable result?
In article <3C085561.A44FB...@nyc.rr.com>, Kenny Tilton wrote: >Software Scavenger wrote:
>> Why don't we already have hordes of Lisp millionaires? What is the >> invisible obstacle standing in the way of this logically-expectable >> result?
>You can't use Lisp and work for Bill. You have to work for Bill to get >rich, he has all the money now.
Not so sure about that; you can target Bill's platform with Lisp.
* Software Scavenger | If Lisp gains a reputation for making people rich, it will quickly become | popular. Paul Graham is just one person, not enough to give Lisp such a | reputation. We need hordes of Lisp millionaires.
Provided at least a majority of them are satisfied with the language that made them rich and do not feel the urge to create their own pet languages.
| Why don't we already have hordes of Lisp millionaires?
Perhaps because they do not want to credit Lisp with it?
/// -- The past is not more important than the future, despite what your culture has taught you. Your future observations, conclusions, and beliefs are more important to you than those in your past ever will be. The world is changing so fast the balance between the past and the future has shifted.
"Software Scavenger" <cubicle...@mailandnews.com> wrote
> If Lisp gains a reputation for making people rich, it will quickly > become popular. Paul Graham is just one person, not enough to give > Lisp such a reputation. We need hordes of Lisp millionaires.
> Why don't we already have hordes of Lisp millionaires? What is the > invisible obstacle standing in the way of this logically-expectable > result?
The really interesting metrics is the ratio (/ millionaires programmers) and to compute it for Java, C++, Lisp, Python, etc.
> > Why don't we already have hordes of Lisp millionaires? What is the > > invisible obstacle standing in the way of this logically-expectable > > result?
> You can't use Lisp and work for Bill. You have to work for Bill to get > rich, he has all the money now.
Ah, but you forget that not all the people who got their money from Bill applied for jobs with him. For a while in the 90's in Seattle, one commonly-seen business plan was "make a company that does well enough to make Bill want to buy it to either make it his or crush it". If you did this with Lisp, you could get some of Bill's money as well as with any other language. If he bought you to keep whatever you made, he'd probably have his minions rewrite it in C++, but presumably you already figured out the design, so this would even be a reasonable thing.
-- /|_ .-----------------------. ,' .\ / | No to Imperialist war | ,--' _,' | Wage class war! | / / `-----------------------' ( -. | | ) | (`-. '--.) `. )----'
> Ah, but you forget that not all the people who got their money from > Bill applied for jobs with him. For a while in the 90's in Seattle, > one commonly-seen business plan was "make a company that does well > enough to make Bill want to buy it to either make it his or crush it". > If you did this with Lisp, you could get some of Bill's money as well > as with any other language.
Quibble Alert: Hang on, what if Bill goes for the crush option on me?
Can you imagine if Bill decided to do a Visual Lisp? There'd go the neighborhood.
cubicle...@mailandnews.com (Software Scavenger) wrote in message <news:a6789134.0111301933.60d49733@posting.google.com>... > Why don't we already have hordes of Lisp millionaires? What is the > invisible obstacle standing in the way of this logically-expectable > result?
I know a couple of people who have started successful companies using Lisp as a technology, and are (I'm pretty sure) millionaires quite a few times over.
In both cases, the main ingredients for success were: - being pretty damn smart - finding a complex domain that doesn't have good tools yet - understanding that domain thoroughly - building a solution in Lisp - selling the solution into the market
Knowing Lisp is the least of it really, but Lisp does enable a smart person to quickly build a solution to a complex problem, with one or a few developers and maybe without external funding. That's a good way to get rich.
> 5 Use iteration rather than recursion to scan a sequence one element at a > time. (Reserve recursion for situations where you _require_ a stack.)
> I.e., Common Lisp is not a dialect of Scheme.
I think that higher-order functions are also useful, and for some purposes recursion is more easily understood than iteration.
[...]
-- BPT <b...@tunes.org> /"\ ASCII Ribbon Campaign backronym for Linux: \ / No HTML or RTF in mail Linux Is Not Unix X No MS-Word in mail Meme plague ;) ---------> / \ Respect Open Standards
i started to give my views on patterns and XP in this thread, then it got ramified by someone into a hogwash discussion that revolves around attacking the word "mathematics".
I like to make a coherent summary of my views on the Design Patterns and eXtreme Programing stuff.
In my previous articles
> Message-ID: <B826DEE2.489D%...@best.com> > Date: Mon, 26 Nov 2001 01:46:13 GMT > Subject: Re: Design patterns for Lisp
and other posts posted here recently, their contents are summarized and expanded as follows:
(1) Patterns and XP are wishy-washy, unscientific, unproven, and without any mathematical basis.
(2) there are enough applied mathematics in computer science for a life-time of study.
(3) The programers in computing industry lacks sufficient training. They lack sufficient computer science background, lack mastery of their tools (languages, protocols etc.), and their knowledge of their domain/field are often poor.
(4) It is extremely easy and common for non-qualified people to become a software professional, who will gradually churn out significant quantity of codes. (this is in contrast with other engineering disciplines. A desk-top computer is sufficient to send a interested laymen into software industry.)
(5) Software engineering is ten thousand times easier than physical engineering such as bridge, airplane, tunnel, train, ship... building.
(6) computer do not make mistakes, people do, and sloppiness is a common attitude in software industry.
(7) software licenses are irresponsible. The vast majority of software license agreements contains clauses that don't guarantee it works.
--
The quality of software depends on primarily of two aspects:
* Programer's mastery of the tools. (programing language, protocols, operating system ...)
* Programer's expertise/knowledge of his field/domain.
Programers should master their tools. Know every detail of their language well. Then, programer should strive to accumulate knowledge of their respective domain.
When a programer masters his tools and domain expertise, he obtains the expertise any Design Pattern tries to describe. Design Patterns is a snake oil. Icing on the cake. Fluff. Wishful thinking. Slouch's drug. Idiot's placebo. And that's not all.
Design Patterns is the opium of computing industry. From an addicted individual or company, it may have improved a code or helped a team. But on the whole, it hinders the propagation of quality languages. It stops advancements of language design. It reduces the awareness of real education needs like mastering languages and domain expertise. It is a fucking spoon-feeding formula designed to retard the mundane and drug the smart. It curbs creation ability. It is a plague, a bad-ass fashion phenomenon; a jargon-riding dimwit-pleasing epidemic.
For the record, the "Gang of Four" mentioned in this thread who wrote the _Design Patterns_ book are:
Erich Gamma <-- fucking ass one Richard Helm <-- fucking ass two Ralph Johnson <-- fucking ass too John Vlissides <-- fucking ass also
These people will be remembered as criminals in the computing history, along with Larry Wall and those fucking jackasses who distributed their home work now known as Unix. [criminals here is defined as those who bring damages to society, including hampering progress in a massive scale.]
--
I have mentioned above that software engineering is significantly easier then bridge engineering. Let's drill on this a bit.
When we say A is easier then B, we have to define what we mean by "easier". Before we can say what we mean by "easier", we need to understand the nature A and B comparably. We can consider Software Writing vs Bridge Building. This would be on easy one. We can also consider Software Engineering vs Bridge Engineering. This will be a bit difficult. We'll need to further discuss what does "engineering" really encompasses here. Coming up with a good definition can be quite involved. Instead of drilling on a sensible definition, I'll simply mention a few comparisons of things in software engineering and bride engineering below. The following items will be somewhat hodgepodge.
* Material cost.
* Size of team.
* Cost of raising (educating/training) engineers.
* The nature involved.
In building bridges, there are lots of unknown factors. There's wind, storm, flood, earthquake all of which we cannot fully control, and can only predict in a limited way. It will involve many science disciplines. geo-science, physics, aerodynamics. Software building requires much lesser disciplines, and significantly much less people.
Build bridges is costly. It can only be done once, and the one time must be right. It cannot go by trial-and-error. Software building on the other hand, can trial-and-error all the way. It's essentially costless.
The essence of computers can be likened to an abacus. You push the beads and you readout the values. There are no chance events. No storm or flood to worry about. The information are one hundred percent known to you, and you control it one hundred percent one hundred percent of the time.
Which one is ten thousand times easier do you think? Is it bridge engineering, or software engineering?
--
In the above, i have touched on the problem of software licenses. Namely, they outright disclaims the functionality of the software.
I propose that we raise an awareness of this situation, so that the public (consumer) will start to demand more responsible software (licenses).
... my time's up. Next time when i have some time, reminds me to write on WHY software industry is the way it is, and why the solution is to first raise the awareness of irresponsible licenses. This should be the last message in this episode.
----------------------------------- Excerpt of License agreement from Mac OS 9:
4. Disclaimer of Warranty on Apple Software. You expressly acknowledge and agree that use of the Apple Software is at your sole risk. The Apple Software is provided "AS IS" and without warranty of any kind and Apple and Apple's licensor(s) (for the purposes of provisions 4 and 5, Apple and Apple's licensor(s) shall be collectively referred to as "Apple") EXPRESSLY DISCLAIM ALL WARRANTIES AND/OR CONDITIONS, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES AND/OR CONDITIONS OF MERCHANTABILITY OR SATISFACTORY QUALITY AND FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. APPLE DOES NOT WARRANT THAT THE FUNCTIONS CONTAINED IN THE APPLE SOFTWARE WILL MEET YOUR REQUIREMENTS, OR THAT THE OPERATION OF THE APPLE SOFTWARE WILL BE UNINTERRUPTED OR ERROR-FREE, OR THAT DEFECTS IN THE APPLE SOFTWARE WILL BE CORRECTED. FURTHERMORE, APPLE DOES NOT WARRANT OR MAKE ANY REPRESENTATIONS REGARDING THE USE OR THE RESULTS OF THE USE OF THE APPLE SOFTWARE OR RELATED DOCUMENTATION IN TERMS OF THEIR CORRECTNESS, ACCURACY, RELIABILITY, OR OTHERWISE. NO ORAL OR WRITTEN INFORMATION OR ADVICE GIVEN BY APPLE OR AN APPLE AUTHORIZED REPRESENTATIVE SHALL CREATE A WARRANTY OR IN ANY WAY INCREASE THE SCOPE OF THIS WARRANTY. SHOULD THE APPLE SOFTWARE PROVE DEFECTIVE, YOU (AND NOT APPLE OR AN APPLE AUTHORIZED REPRESENTATIVE) ASSUME THE ENTIRE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO THE ABOVE EXCLUSION MAY NOT APPLY TO YOU. THE TERMS OF THIS DISCLAIMER DO NOT AFFECT OR PREJUDICE THE STATUTORY RIGHTS OF A CONSUMER ACQUIRING APPLE PRODUCTS OTHERWISE THAN IN THE COURSE OF A BUSINESS, NEITHER DO THEY LIMIT OR EXCLUDE ANY LIABILITY FOR DEATH OR PERSONAL INJURY CAUSED BY APPLE'S NEGLIGENCE.
5. Limitation of Liability. UNDER NO CIRCUMSTANCES, INCLUDING NEGLIGENCE, SHALL APPLE BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR RELATING TO THIS LICENSE. SOME JURISDICTIONS DO NOT ALLOW THE LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES SO THIS LIMITATION MAY NOT APPLY TO YOU. In no event shall Apple's total liability to you for all damages exceed the amount of fifty dollars ($50.00).
----------------------------------- GNU General License, excerpt:
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
----------------------------------- END-USER LICENSE AGREEMENT FOR MICROSOFT WINDOWS 98, excerpt:
LIMITED WARRANTY
LIMITED WARRANTY. Microsoft warrants that (a) the SOFTWARE PRODUCT will perform substantially in accordance with the accompanying written materials for a period of ninety (90) days from the date of receipt, and (b) any Support Services provided by
> (1) Patterns and XP are wishy-washy, unscientific, unproven, and > without any mathematical basis.
Dunno 'bout Patterns; from reading rpg's posts lately, I suspect I actually know _nothing_ about them. I only know about the GOF book, and agree it's less than exciting, if you're a lisper. [It was a Godsend to me when I was a C++ programmer, though!]
> (4) It is extremely easy and common for non-qualified people to become > a software professional, who will gradually churn out significant > quantity of codes.
Definitely true: that's exactly what happened to me. Turned "software engineer" (cough cough) from scientist overnight, with no formal training whatsoever. :-)
> (5) Software engineering is ten thousand times easier than physical > engineering such as bridge, airplane, tunnel, train, ship... building.
Hum...
> For the record, the "Gang of Four" mentioned in this thread who wrote > the _Design Patterns_ book are:
> Erich Gamma [Expletives snipped] > Richard Helm > Ralph Johnson > John Vlissides
> These people will be remembered as criminals in the computing history,
Well, some of those guys have delivered real software systems, used by thousands of people. They're acknowledged experts in their fields. The word "criminal" hardly springs to mind, so, in the absence of an actual "crime", I'd say that's pretty harsh language. :-)
> [criminals here is defined as those > who bring damages to society, including hampering progress in a > massive scale.]
An interesting definition, but not too many such people are in jail. In fact, one of them is head of a largish software company. :-)
On to the serious stuff though:
> In building bridges, there are lots of unknown factors. There's wind, > storm, flood, earthquake all of which we cannot fully control, and can > only predict in a limited way. > The essence of computers can be likened to an abacus. You push the > beads and you readout the values. There are no chance events. No storm > or flood to worry about. The information are one hundred percent known > to you, and you control it one hundred percent one hundred percent of > the time. > Which one is ten thousand times easier do you think? Is it bridge > engineering, or software engineering?
Bridge engineering.
Bridges do not need to be made to 100% exact tolerance to fulfill their function; normally, 99.9% will do the trick. With software, you need 100% tolerance; any 1 bit error is liable to bring the world down. Forgeting to screw in 1 rivet doesn't normally bring a bridge down. This is due to the continuous nature of physical systems, versus to the discrete nature of digital systems.
-- It would be difficult to construe Larry Wall, in article this as a feature. <1995May29.062427.3...@netlabs.com>
<apic...@optushome.com.au> wrote: > x...@xahlee.org (Xah Lee) writes: >> In building bridges, there are lots of unknown factors. There's wind, >> storm, flood, earthquake all of which we cannot fully control, and can >> only predict in a limited way.
>> The essence of computers can be likened to an abacus. You push the >> beads and you readout the values. There are no chance events. No storm >> or flood to worry about. The information are one hundred percent known >> to you, and you control it one hundred percent one hundred percent of >> the time.
>> Which one is ten thousand times easier do you think? Is it bridge >> engineering, or software engineering?
> Bridge engineering.
> Bridges do not need to be made to 100% exact tolerance to fulfill > their function; normally, 99.9% will do the trick. With software, > you need 100% tolerance; any 1 bit error is liable to bring the > world down. Forgeting to screw in 1 rivet doesn't normally bring > a bridge down. This is due to the continuous nature of physical > systems, versus to the discrete nature of digital systems.
Bridge engineers allow a safety margin, so they build to 100+safety margin for expected events. As the Tacoma Narrows Bridge story shows, however, the unexpected (at that time) can still occur. You improve things.
Software programs rarely overbuild, instead preferring to underbuild until a problem surfaces. (Worse is better, XP, etc.), so I agree with Xah on this point. However, computers need not be a passive abacus, they can also interact with the world as we perceive it. (To be fair, even non-situated computers still have physical devices to deal with that are unpredictable, like disk drives, memory that can fail, when a key press will occur, etc., but I'm talking now about computer based artifacts that directly sense and influence the world around them; solving this problem will make all software better and more reliable).
The key to better software in the future will be structured overbuilding, with overlapping responsibilities for modules, etc. Certainly, that's the tack I've taken with agent based systems, and the artifacts have turned out to work surprisingly well in the face of unanticipated (by me) phenomena. [It's a side issue that the phenomena could have been 100% anticipated: I work with natural language and sensors on the real world. The combinations and meaning projections are far worse than bridge engineering.]
A fundamental step is to build software to basically "deal with any input it might get", though not necessarily to always do the best that could have been done (by some omniscient agent). With an agent, the input is a speech act, which is far more expressive to begin with than simply an integer or a symbol. (To be clear, I'm not talking about functions that simply take the wrong type of argument and generate an error, I'm talking about functions that are told things they don't think they need to know, and figure out how to incorporate the data into the desired solution, or decide the information is spurious, or decide that the sender is broken and needs to be repaired/replaced/ignored, ...). To make this happen one needs semantic input to a module, so there is some chance of figuring out what it actually *means*. But it also means a different approach to writing the component in the first place, from something that is purely functional (domains and ranges, etc.) to something that incorporates inputs into a more holistic understanding of a situation, and can then provide an appropriate output contribution.
Personally, I think (intelligent) software agents are the way to solve a number of software engineering problems... but it starts with a different understanding of what software is (and can be).
> > In building bridges, there are lots of unknown factors. There's wind, > > storm, flood, earthquake all of which we cannot fully control, and can > > only predict in a limited way.
> > The essence of computers can be likened to an abacus. You push the > > beads and you readout the values. There are no chance events. No storm > > or flood to worry about. The information are one hundred percent known > > to you, and you control it one hundred percent one hundred percent of > > the time.
> > Which one is ten thousand times easier do you think? Is it bridge > > engineering, or software engineering?
> Bridge engineering.
> Bridges do not need to be made to 100% exact tolerance to fulfill > their function; normally, 99.9% will do the trick. With software, > you need 100% tolerance; any 1 bit error is liable to bring the > world down. Forgeting to screw in 1 rivet doesn't normally bring > a bridge down. This is due to the continuous nature of physical > systems, versus to the discrete nature of digital systems.
Not so sure about that. Engineers compute with approximations, omitting a screw will leave the static within the precomputed fault tolerances. But, computing with approximations is not at all `inexact' or `sloppy' mathematics! The engineer better be 100% exact in his predictions of fault tolerances and computations of eigen-vibrations, or he might easily overlook some wind induced eigen-vibration which will bring the whole bridge down. Like here:
> > In building bridges, there are lots of unknown factors. There's wind, > > storm, flood, earthquake all of which we cannot fully control, and can > > only predict in a limited way.
Sounds like a User.
> > The information are one hundred percent known > > to you, and you control it one hundred percent one hundred percent of > > the time.
This is excellent news. I am going to go get that information, test against it until the program works and then discard the source code. Woo-hoo!
> > Which one is ten thousand times easier do you think? Is it bridge > > engineering, or software engineering?
There's a straightforward comparison. They have so much in common! One difference is that bridge engineers are not asked by management two months before the ribbon cutting to add a spindle to the bridge so it can be pointed into the wind to make take-offs easier, marketing sees an opportunity...
"Bradford W. Miller" <Bradford.W.Mil...@motorola.com> writes:
> The key to better software in the future will be structured overbuilding, > with overlapping responsibilities for modules, etc.
This is a really interesting notion. I'm not sure that I totally understood from your natural language example exactly what that would mean: would it be possible to give an example how I might apply this principles to my own programs?
-- It would be difficult to construe Larry Wall, in article this as a feature. <1995May29.062427.3...@netlabs.com>
> The key to better software in the future will be structured overbuilding, > with overlapping responsibilities for modules, etc. Certainly, that's the > tack I've taken with agent based systems, and the artifacts have turned out > to work surprisingly well in the face of unanticipated (by me) phenomena. > [It's a side issue that the phenomena could have been 100% anticipated: I > work with natural language and sensors on the real world. The combinations > and meaning projections are far worse than bridge engineering.]
But having overbuilt modules results in more code being generated and with that more possible errors. This has an analogy in structural engineering. If you build something too large the possbility of a fault in material increases and thus the greater the possibility of a fatigue failure. Its a trade-off between having a safety factor and greater unpredictability.
Simply put, more code, more errors.
I think what you are finding is that you are thinking more completely about what inputs a module can get and are thus being more careful about your coding. A lot of software is written without being thoughtful of all the possible inputs and how to handle the extrodinary situations. Incomplete thinking translated into incomplete code.
I think more effort should be put into knowing the problem more completely.
"Wade Humeniuk" <humen...@cadvision.com> writes: > > The key to better software in the future will be structured overbuilding, > > with overlapping responsibilities for modules, etc. Certainly, that's the > > tack I've taken with agent based systems, and the artifacts have turned > out > > to work surprisingly well in the face of unanticipated (by me) phenomena. > > [It's a side issue that the phenomena could have been 100% anticipated: I > > work with natural language and sensors on the real world. The combinations > > and meaning projections are far worse than bridge engineering.]
> But having overbuilt modules results in more code being generated > and with that more possible errors. ... I think more effort should > be put into knowing the problem more completely.
Seems to me this might not be incompatible. Yes, sometimes one just reinforces the same thing. Two bungee cords is probably better than one because the fault is not likely to be in the design but the execution (pardon the grim pun), so having two executions of a bungee cord would seem good to reduce the risk due to failure, since having the two doesn't interfere with operation. Certainly having a RAID disk assembly doubles the chance of a fault, but it also reduces the risk that the faults will align, and so overall the system functions better. A window washer uses a lifeline as a backup in case his railing or base fails, and yes, maybe that adds more points of failure, but all in all, it's still better.
I'm not sure what's meant by overbuilt, but if you assign two different people to do something in two algorithmically divergent ways, or even if you give them no guidance but you insist they not communicate (better if they never even knew one another), then a machine that did both of those tasks in parallel, even at the possible addition of a constant factor multiplier in the O() notation [which is a no-op, since it reduces out], is going to be more reliable. It means dividing the task so that the operation is either gratuitously repeatable or side-effect free or any of several other modalities I can think of that don't have names, unless you have a separate store, as the RAID example does, but even so, it seems good.
Also, related to this, but not quite the same, I used to follow computer chess, ages ago, and apologize for not using a more recent example, since I'm sure there must be one, but Greenblatt had this chess program for the pdp10 that was really two processors: one did smart stuff, the other did "blunder control" of brute force multi-ply lookahead just in case it could rule out stuff the smart part was considering. I'd say the blunder control wasn't really a "solver", just an extra safeguard that statistically improved the reliability of the overall system. I'd say the Lisp Machine's hardware typechecking did the same thing, though RISC architectures have killed this whole genetic line: hardware type checking didn't take longe than non-type-checking because the type-check was started in parallel with doing the add [for example]. By the time the add was done and had a purported value, different hardware had checked whether the quantity being added in parallel was wrong, and if so, it kicked the other processor and said "Hold on, you're getting ahead of yourself". I would call this overbuilt, and I would not a priori think it was introducing extra risk, though I suppose you could disagree. No tradeoff comes for free. I suppose the industry decided there was a cost to wide instruction architectures, but not whether there was a cost, but whether the cost was a cost in "risk", and whether, if so, that risk was of the same kind. (I'd bet that sometimes all one can do is shuffle risk around, like a bubble in a carpet, and so it matters as much where the risk is as how much it is...)
And when you get all done with it, I think the thing that continues to separate people from computers is not raw compute power or inability to simulate architectural components, but the willingness to accomodate "redundancy" and "chance" as key architectural components of a working system. The whole left-brain/right-brain issue that people raise is almost surely just the right half of the brain doing spontaneous generation of test cases through random (or uncorrelated) means while the left half is proceeding in the kind of orderly fashion that we expect of computers. Sort of like the Greenblatt program, the right brain can cut off bad ways of going because it's not making an attempt to be linear or orderly or complete--it's just doing things in monte carlo style or perhaps following some set of statistical/associative connections it's made that are unique to the individual's experience, but in addition to cutting off avenues, it may chance on solutions or patterns that inspire or direct, or it may suggest metaplanning activities that it thinks would structure stuff better, because it's acting redundantly and not constrained to account for its time as part of the basic problem solving activity.
It baffles me why so much of parallel processing work is spent on making parallel processors into parallel versions of sequential processors and so little is spent thinking about how to leverage these issues of redundancy, chance, meta programming, auditing, and so on. Human organizations build such structures. But computers largely don't. At least not the ones I hear much about. Maybe I'm just looking in the wrong places.
> "Wade Humeniuk" <humen...@cadvision.com> writes: > > > The key to better software in the future will be structured > > > overbuilding, with overlapping responsibilities for modules, > > > etc. Certainly, that's the tack I've taken with agent based > > > systems, and the artifacts have turned > > out to work > > > surprisingly well in the face of unanticipated (by me) > > > phenomena. [It's a side issue that the phenomena could have > > > been 100% anticipated: I work with natural language and sensors > > > on the real world. The combinations and meaning projections are > > > far worse than bridge engineering.] > > But having overbuilt modules results in more code being generated > > and with that more possible errors. ... I think more effort should > > be put into knowing the problem more completely. > Seems to me this might not be incompatible. Yes, sometimes one just > reinforces the same thing. Two bungee cords is probably better than > one because the fault is not likely to be in the design but the > execution (pardon the grim pun), so having two executions of a > bungee cord would seem good to reduce the risk due to failure, since > having the two doesn't interfere with operation.
[A buddy of mine often said that if they'd done bungee hangings in the Old West, people would have paid to see it :-). He was also responsible for other massive bits of political incorrectness...]
> Certainly having a RAID disk assembly doubles the chance of a fault, > but it also reduces the risk that the faults will align, and so > overall the system functions better.
It _may_ be better. But an array filled with disks of the same model from the same batch with the same crucial manufacturing defect may suffer _horribly_... And if the RAID controller or the power supply goes bad, the whole system is toast. _Hopefully_ the system functions better. Only if a good job goes into planning the careful use of RAID, though...
Note that in yesteryear, transatlantic aircraft once were required to have 4 engines, due to the significant likelihood of one or more failing in flight. (Not good if you're 800 miles from land!)
As the reliability, sophistication, and power of jet turbine engines has improved, the requirement has changed.
In much the same way, mainframes used to be pretty fragile, but are now the sorts of computers that are used when you can Never Have Downtime. Some of that comes with "parallelism," but some comes from a touch of "over-engineering" on some single components that are designed not to be fragile the way PCs are.
> I'm not sure what's meant by overbuilt, but if you assign two > different people to do something in two algorithmically divergent > ways, or even if you give them no guidance but you insist they not > communicate (better if they never even knew one another), then a > machine that did both of those tasks in parallel, even at the > possible addition of a constant factor multiplier in the O() > notation [which is a no-op, since it reduces out], is going to be > more reliable. It means dividing the task so that the operation is > either gratuitously repeatable or side-effect free or any of several > other modalities I can think of that don't have names, unless you > have a separate store, as the RAID example does, but even so, it > seems good.
On a RAID array, you'd probably want to have multiple varieties of disk drives in use to diminish the risk of systematic manufacturing defects.
On the other hand, it would be pretty insane to have the left engine on a jet come from Rolls Royce and have the right engine come from GE, as construction and maintenance would both become a nightmare :-).
> Also, related to this, but not quite the same, I used to follow > computer chess, ages ago, and apologize for not using a more recent > example, since I'm sure there must be one, but Greenblatt had this > chess program for the pdp10 that was really two processors: one did > smart stuff, the other did "blunder control" of brute force > multi-ply lookahead just in case it could rule out stuff the smart > part was considering. I'd say the blunder control wasn't really a > "solver", just an extra safeguard that statistically improved the > reliability of the overall system.
This is seen a fair bit in algorithm work:
-> Fast sorting often involves QuickSort for big lists, but reverting to linear insertion for the little sublists.
-> Root finding using Newton's Method can be unstable if it is used by itself; it tends to be better to blend it with other search schemes, so that when Newton goes off it's nutter due to some sort of discontinuity or other such thing, there's _something_ out there that can notice "This seems to be going badly; let's try a different point."
> It baffles me why so much of parallel processing work is spent on > making parallel processors into parallel versions of sequential > processors and so little is spent thinking about how to leverage > these issues of redundancy, chance, meta programming, auditing, and > so on. Human organizations build such structures. But computers > largely don't. At least not the ones I hear much about. Maybe I'm > just looking in the wrong places.
a) Most academic algorithm work surrounds all the algorithms that are readily analyzed. Heuristics don't fit well into that.
b) People don't understand heuristics.
"Heuristics (from the French heure, "hour") limit the amount of time spent executing something. [When using heuristics] it shouldn't take longer than an hour to do something."
c) They've spent the money building a system bus that can cope with multiple CPUs. That was expensive.
And now you propose doing redundant work, thus flushing the money down the toilet? How gauche!
I _don't_ think you're looking in the wrong places, with a bit of fingers-crossed about the mainframe world, where they _do_ consider redundancy and auditing [from that list] to be pretty important.
The folks researching parallel work are mostly trying to just plain speed things up, and anything put into "redundancy" certainly messes up progress towards that goal. -- (concatenate 'string "aa454" "@freenet.carleton.ca") http://www.ntlug.org/~cbbrowne/emacs.html lp1 on fire (One of the more obfuscated kernel messages)
> the overall system. I'd say the Lisp Machine's hardware typechecking > did the same thing, though RISC architectures have killed this whole > genetic line: hardware type checking didn't take longe than > non-type-checking because the type-check was started in parallel with > doing the add [for example]. By the time the add was done and had a > purported value, different hardware had checked whether the quantity > being added in parallel was wrong, and if so, it kicked the other > processor and said "Hold on, you're getting ahead of yourself". I
This is not so different from the situation on a modern RISC architecture. Speculative execution combined with branch prediction makes it possible to execute type and bounds checks in parallel with the operation. Of course, this relies on the compiler to properly generate type checks, but it introduces a chance for the compiler to optimize away the type check and use the hardware for other purposes.
We have some highly unscientific numbers for the bounds checking case in the Dylan compiler at:
This of course slightly misses the point you were making about designing reliable systems, but at least it shows that performance is no excuse to risk system reliability by not doing bounds checks. Every posting to Bugtraq about Yet Another Buffer Overflow makes me think: "Why are those people still using C to write mission-critical software?".
Andreas
-- "In my eyes it is never a crime to steal knowledge. It is a good theft. The pirate of knowledge is a good pirate." (Michel Serres)
cbbro...@acm.org writes: > The folks researching parallel work are mostly trying to just plain > speed things up, and anything put into "redundancy" certainly messes > up progress towards that goal.
My only problem with this is that things are ALREADY sped up. What's the point of running a zillion times faster than the machines of yesteryear, yet still not be willing to sacrifice a dime of it to anything other than doing the same kinds of boring computations that you did before? I want speedups not just to make my same old boring life faster, but to buy me the flexibility to do something I wasn't willing to do at slower speeds.
> cbbro...@acm.org writes: > > The folks researching parallel work are mostly trying to just > > plain speed things up, and anything put into "redundancy" > > certainly messes up progress towards that goal. > My only problem with this is that things are ALREADY sped up. > What's the point of running a zillion times faster than the machines > of yesteryear, yet still not be willing to sacrifice a dime of it to > anything other than doing the same kinds of boring computations that > you did before? I want speedups not just to make my same old boring > life faster, but to buy me the flexibility to do something I wasn't > willing to do at slower speeds.
I wouldn't disagree at all with that; the thing is, if you're trying to get an NSF or DOD grant for doing parallel processing research, your project won't sound terribly "sexy" if you say: "Well, we're not planning to actually _improve_ performance; we're just going to **** it away on something."
I'm not saying that's the way things _should_ be... -- (concatenate 'string "chris" "@cbbrowne.com") http://www.cbbrowne.com/info/rdbms.html Share and Enjoy!!
cbbro...@acm.org wrote: > "Heuristics (from the French heure, "hour") limit the amount of > time spent executing something. [When using heuristics] it > shouldn't take longer than an hour to do something."
I think heuristics comes from the ancient Greek "heureka", "I found it!", shouted, for better results, wet and naked running across a public street.
* Kent M Pitman <pit...@world.std.com> | My only problem with this is that things are ALREADY sped up. What's the | point of running a zillion times faster than the machines of yesteryear, | yet still not be willing to sacrifice a dime of it to anything other than | doing the same kinds of boring computations that you did before? I want | speedups not just to make my same old boring life faster, but to buy me | the flexibility to do something I wasn't willing to do at slower speeds.
Well, you could do what the other "innovative" guys out there do: Create another amazingly idiotic virus for some idiotic Microsoft product used by millions if not billions of people who would rather die than think about what they are doing, and, to misquote Bertrand Russel, in fact they do. That would certainly satisfy "to do something I wasn't willing to do at slower speeds", but the speed was probably not the reason. :)
Seriously, software secure from Microsoftitis (the leprosy of software) would be something that computers could help us attain. However, it would take an act of Congress to finally turn around and notice that if a bank that was repeatedly robbed of all its money because it had the level of security for which Microsoft's products are famous, had tried to blame "crackers" and had taken _no_ precautions for twenty years to prevent these incidents from happening, the government would have shut them down and incarcerated the (ir)responsible owners and (mis)managers.
The fact that the U.S. Government does not stop Microsoft from making and distributing software that aids and abets electronic terrorists means that they are harboring terrorists, according to the standards set by Presiding Dimwit George W. Bush (who has reverted to pre-9/11 blabbering with the highest pause-to-speak ratio of all present public figures). The only solution is to bomb the shit out of Microsoft's headquarters and their offices around the world, and to wage war on electronic terrorist trainer and leader William H. Gates III. If the world has finally had enough of terrorism, what will it take to make people tire of the crap that Microsoft produces and demand the end of their terrorist reign?
/// -- The past is not more important than the future, despite what your culture has taught you. Your future observations, conclusions, and beliefs are more important to you than those in your past ever will be. The world is changing so fast the balance between the past and the future has shifted.
>> "Heuristics (from the French heure, "hour") limit the amount of >> time spent executing something. [When using heuristics] it >> shouldn't take longer than an hour to do something."
> I think heuristics comes from the ancient Greek "heureka", "I found > it!", shouted, for better results, wet and naked running across a public > street.