>> > No, I pointed it out in all seriousness. I was hoping the response would >> > be something like, "Oh, Spolsky's argument was demolished by Arglebargle >> > back in 1993. Go see http://..."
>> I'm afraid my immediate reaction was ``Who the hell is Spolsky, and >> who elected him God?''
>No one elected him God. But a lot of people read his blog, and he is >cited regularly on slashdot. So his views are influential.
To quote the immortal 'Jesse Garon;'
"Many people have webpages."
>> There are huge and obvious holes in his argument
>Can you cite a reference that describes these huge and obvious holes?
Spolsky seems to be confounding writing a spec with top-down design in his article. Writing down what you want your code to do in detail doesn't seem like a horrible idea in most cases (though I can think of cases in which it IS a bad idea). But "how it is supposed to do it" is another story.
If your shop does OO or imperative design, and has between 10 and 500 coders working on something for Yoyodyne or MegaSoft, 'top down' might be a good idea. It might be the only conceivable way of getting anything done, despite the fact that you'll be sitting in specifications meetings for weeks before doing any code writing.
If you're one to four guys working in the same boiler-room, this probably isn't such a good idea. It's also a bad idea if you're doing something truely new, and don't necessarily know how to get from point a to point b. But in the latter case, deadlines are stupid anyway. I'm willing to bet "I don't really know how to do this, though I think I can" is the source of most deadline failures.
>> His >> argument is fine for `commodity software', such as >> yet-another-database-query-form, but they are clearly bogus when >> you're not sure what direction you are going in the first place. >> This is usually the situation in research.
>Actually, one can make the argument that it's a Bad Idea in research as >well. In science at least most progress comes about as the result of >testing well formulated hypotheses by carefully designed experiments, not >through random exploration. In fact, one might argue that the failure of >the original AI program (in the sense of research program, not computer >program) was due precisely to the fact that it was conducted in a >freewheeling exploratory style, without the discipline or rigor of the >normal process of science.
AI isn't a science. Neither is computer science in general. Both are vaguely like mathematics, with theorems, but without proofs (in general).
Despite the fact that the thing we call "a computer" pretty much sprung fully formed from Von Neumann's brow after a few months of gestation in 1944 and 1945, everything else has been in fits and spurts, because we're all a lot dumber than he was.
Things like relational databases, journaling file systems, the Macsyma version of the Risch algorithm, multitasking OS and lisp itself seem to have been invented in fits and starts and via a lot of noodling around. Now that such things are standard, they should be easy for anyone to do all over again (and, most software development *is* re-inventing the wheel). But, practically speaking, a code-monkey may often be given a task which he doesn't know how to do. And so he goes through similar (though hopefully lesser) mental contortions, fits and spurts as the original implementors of such ideas.
-Lupo "A certain choleric vein gives zest and force to all acts....The best work of the world is done in the tension between anger and control." -G. Stanley Hall <i...@io.com>
> I don't think so. It is easy to write a specification that is > unrealizable. How do you prove the specification solves the problem? > A piece of code that works is proof that the problem is solvable.
In article <ad49f7l8....@ccs.neu.edu>, Joe Marshall <j...@ccs.neu.edu> wrote: > Let me get this straight.
> One of Lisp's strongest points is that it makes it very easy to > change software.
> Spolsky argues that this ability is or invites the lions share of > unnecessary risk.
Yes, exactly.
> I'll give this some thought, too.
Good.
> > Actually, one can make the argument that it's a Bad Idea in research as > > well. In science at least most progress comes about as the result of > > testing well formulated hypotheses by carefully designed experiments, not > > through random exploration.
> There are *many* people that would argue against you on this!
> You must be familiar with Isaac Asimov's quote:
> The most exciting phrase to hear in science, the one that heralds > the most new discoveries, is not "Eureka!" but "That's funny..."
Yes, but you can only know that something is "funny" if you have some expectations to compare it against. Penzias and Wilson's discovery of the cosmic background radiation was a "that's funny" sort of discovery, but they weren't playing around randomly, they were trying to accomplish something very specific according to a definite plan. Granted, what they ended up accomplishing had nothing to do with their initial plan, but that doesn't change the fact that they had a plan. Moreover, they would not have accomplished what they did without the plan because it was only that plan that lead them to recognize that the noise they were hearing was "funny".
> >> Making a `specification' for solving problems when you haven't the > >> slightest idea if it is going to work is simply mental masturbation.
> > And writing code under those same circumstances isn't?
> I don't think so. It is easy to write a specification that is > unrealizable.
Just as it is easy to write code that doesn't work.
> How do you prove the specification solves the problem?
How do you prove the code solves the problem? (And if your answer to this is, "test it" then my response is: testing only proves that it solves an instance of the problem. It does not prove it solves the problem.)
> A piece of code that works is proof that the problem is solvable.
That's not generally true because it depends on what you mean by "the problem" and "works", but it doesn't matter because the topic at hand is not whether one can produce working code without a spec. Clearly one can. The issue is whether it's a good idea, whether it is more or less effort to do it this way, or the end results are of higher or lower quality.
(This is actually a pet peeve of mine regarding discussions about software. People will often ask, "Can you do X using method/technique/tool Y?" That is never the right question to ask because the answer is always yes. The right question to ask is, "How much easier is it to do X using Y than without using Y (or by using Z instead)?"
In article <65exf76e....@ccs.neu.edu>, Joe Marshall <j...@ccs.neu.edu> wrote: > gNOSPA...@jpl.nasa.gov (Erann Gat) writes:
> > If your goal was to cross the dessert then you don't need a boat. By > > arriving at Lake Powell you have achieved your goal.
> > On the other hand, if your goal was to reach the East Coast, and crossing > > the Mojave is just a subgoal in service of that larger goal, then a boat > > could be very handy. But it's best to think about that *before* you > > strike out across the desert. It seems to me that this analogy supports > > Spolsky's position.
> Only with the assumption that both you and Spolksy are making: that > you have prior knowledge that there is a lake in the way.
No, you're missing the point.
What Spolsky is saying is not that you should take a boat. He is saying that you should *think* about whether or not to take a boat *before* you strike out across the desert (i.e. begin to code), and that in fact you should *write down* your decision and the rationale for it, e.g.:
"We're going to take a boat because our goal is to reach the East Coast and we believe it is likely that we will encounter at least one unfordable body of water along the way without enough resources nearby to be able to fabricate a boat in situ."
or
"We're not going to take a boat because our goal is merely to cross the desert, and the probability of encountering a long-lived and unfordable body of water in the desert is low (since if we encounter such a body of water we are ipso facto no longer in the desert)."
As opposed to, "Let's just start walking and if we hit a lake we'll figure out what to do about it then."
> I'm not saying `go out unprepared and wing it', I'm saying "The best > laid schemes o' Mice an' Men, Gang aft agley," (Burns).
"Plans are useless, but planning is indispensible." -- Dwight Eisenhower.
So: does Lisp help when plans gang agly? How? Is that help worth the tradeoff of the additional risk that Spolsky warns about (assuming you accept Spolsky's argument)? These are serious questions and I think we (since I still count myself as a Lisp fan) would do well to come up with cogent responses rather than just cavalierly dismiss them if we want to see Lisp be a serious player in the software game and not just a toy for noodling around.
Erann Gat wrote: >>I'm pretty sure some of the eXtreeeeeeeeeme programming people (and >>their less caffeinated pair-programming neighbors) have good >>rebuttals,
> Can you cite an actual reference?
The following books are excellent IMHO:
+ Kent Beck, Extreme Programming Explained + Alistair Cockburn, Agile Software Methodologies + Kent Beck and Martin Fowler, Planning Extreme Programming
An important element of XP is test-first development. They actually do not suggest to just wildly code ahead, but they have a very strict process to follow, much stricter than, say, RUP.
It essentially goes like this: You first write user stories, then break them up into manageable tasks, then you write test cases, and then you write the code that makes the test cases succeed.
So the test cases actually take over the role of specifications - they exactly tell you what is needed.
Another important element is to do the most simple thing that actually works.
A toy example is this: Imagine you have a small set of test cases.
The rule of doing the simplest thing actually makes you think about a simpler implementation which leads you to come up with this:
(defun f (x) (* 2 x))
Again, this is a toy example. For more complex scenarios, it makes a lot more sense. But it still illustrates the point that the resulting code does not necessarily only cover the instances given in a test suite, but rather will be as systematic as other code. However, in the end you will have a rather large test suite which gives you much more confidence that the code really works.
There are several more rules in XP that are to be followed. This is only a sketch how XP works.
I have only shown the elements that argue against the widely held belief that you need a detailed specification before you can program. The counter argument is not to say that you don't need specifications, the counter argument is that the specifications don't need to be static. Test cases are "dynamic specifications".
Pascal
-- Tyler: "How's that working out for you?" Jack: "Great." Tyler: "Keep it up, then."
Brian Mastenbrook wrote: > CLIM being a presentation-based display system, you can define > presentations for any different class in the output.
Sounds like a GF specialized on the class and <something else> such as the container or a stream or even just a key value such as :clim-repl as long the lisp supports eql specializers. What's all the shouting about in re presentation types? I gotta be missing something (nothing new about that).
> You also get a > free graphical inspector which you can use to inspect slot values.
Done. Code-name ClouCell. And any cell-mediated slot changes as you watch if the value changes (no explicit "reload" necessary). In fact I am now working on a cyclic dependency: if instance being viewed is the window and the display of the window's mouse-image slot is the mouse-image (image under the mouse), the function which wants to know if the image is under the mouse asks the dimensions of the image, and that depends on the text being displayed, and that depends on what image is under the mouse, since the text is a description of that.
I love it. I think I'll just give the text widget a fixed size and get on with my life. The funny thing is I was crafty enough not to make the mouse-image dependent on the geometry of every widget on the screen (meaning it would /not/ notice if some image moved under the mouse, as it should, but that would take a deeper fix), but the calculation itself still loops back.
I love this game!* :)
kenny
* Advertising slogan for NBA basketball
--
clinisys, inc http://www.tilton-technology.com/ --------------------------------------------------------------- "[If anyone really has healing powers,] I would like to call them about my knees." -- Tenzin Gyatso, the Fourteenth Dalai Lama
Pascal Bourguignon wrote: > And to avoid another misconception:
> - A Linux system is not a Linux system but a GNU/Linux system > (mostly a GNU system with a Linux kernel).
> - A FreeBSD system may also have im-ported some GNU software, even > if it is originally as BSD code a fullfleshed system, it becomes > really usable only with a minimum of GNU tools.
> So he could have said: "Once I get more into GNU systems, I'll look on the > other suggestions of packaging and kernel (Debian, Gnoppix, FreeBSD)."
The fact that a FreeBSD system contains "a minimum of GNU tools" is not sufficient reason to call it a "GNU system". Not even Richard Stallman claims that. GNU's excellent reputation is not helped by making excessively strong claims about everything in the world being really "a GNU system".
Erann Gat wrote: > If one cared about Lisp's economic viability one might wish to provide a > counterpoint to Spolsky in order to answer the objection that (one of) > Lisp's primary advantage(s), the ability to write software that is easy to > change, is (or at least invites) "the single biggest unnecessary risk you > take in a software project."
Sleeping is very dangerous: lots of people die in their sleep.
> > His > > argument is fine for `commodity software', such as > > yet-another-database-query-form, but they are clearly bogus when > > you're not sure what direction you are going in the first place. > > This is usually the situation in research.
> Actually, one can make the argument that it's a Bad Idea in research as > well. In science at least most progress comes about as the result of > testing well formulated hypotheses by carefully designed experiments, not > through random exploration.
I don't think that's true at all. It doesn't seem to me to be an accurate description of the origins of any of - Newtonian mechanics - Maxwell's equations - special relativity - general relativity for instance. Maybe you can squeeze the birth of QM into that framework, but I think it *is* a squeeze. The discovery that atoms have nuclei fits in nicely, but (e.g.) the discovery of X-rays certainly doesn't.
I've been concentrating on physics, because that's what everyone thinks of when philosophizing about science :-). But, e.g., the theory of evolution didn't arise from "testing well formulated hypotheses by carefully designed experiments", so it's not just physics to which your description doesn't apply universally.
>> Making a `specification' for solving problems when you haven't the >> slightest idea if it is going to work is simply mental masturbation.
> And writing code under those same circumstances isn't?
When dealing with an ill-understood problem, all you can do is explore. Writing down a spec for one possible approach may be a valuable form of exploration. Writing some code may be, too. So many lots of other things. So I don't accept Joe's claim that writing specs is necessarily "mental masturbation" when you don't have a clue what you're doing; it's one way of clarifying your ideas, just like writing code is.
What writing code gives you that writing specs doesn't is the ability to feed real data in and see what happens. Perhaps infinitely intelligent people wouldn't need that; they could just contemplate an algorithm and see in their heads what it would do in practice. Those of us who are cursed with finite minds have to try things out. Sometimes we can predict things using (say) mathematics, but in these days of scarily fast computers it can be much quicker to try a few algorithms than to analyse them. (The analysis may still need to be done -- but maybe only on one algorithm, after trying many.)
In article <40170D01.6F700...@nyc.rr.com>, Kenny Tilton
<ktil...@nyc.rr.com> wrote: > Brian Mastenbrook wrote: > > CLIM being a presentation-based display system, you can define > > presentations for any different class in the output.
> Sounds like a GF specialized on the class and <something else> such as > the container or a stream or even just a key value such as :clim-repl as > long the lisp supports eql specializers. What's all the shouting about > in re presentation types? I gotta be missing something (nothing new > about that).
Pretty close, except usually the presentation describes the object in such a fashion as it can easily be made into HTML or PostScript too. Not a big deal, just a certain degree of independence from the concept of "interactive GUI". With a bit of work you could probably do the same thing to Cello... if it exists. I haven't seen any evidence of that yet :-)
> "...failing to write a spec is the single biggest unnecessary risk you > take in a software project. It's as stupid as setting off to cross the > Mojave desert with just the clothes on your back, hoping to 'wing it.' "
> Sounds pretty unequivocal to me.
> So there are two possibilities:
> 1. He really meant it, or > 2. There's a tacit disclaimer along the lines of, "Unless of course you > are properly equipped to do iterative development, e.g. if you're using > Lisp."
> But in case 2 that just begs the question of why he didn't just come right > out and say so.
One possible reason is that he doesn't have any experience of using Lisp, or at least that he doesn't have enough to know what it can do for you. So far as I can tell, his own programming has all been in VB, C, and C++; the teams he's run have all been using languages like those.
Another possible reason is that the actual tacit disclaimer is more like "Provided you're writing the sort of stuff for which writing specs is possible".
> > Joel works in a team environment targetting primarily > > Microsoft environments with highly restrictive static languages.
> Yes, but no one is holding a gun to their heads, and Allegro Common Lisp > runs on Windows. So the question of which way the causality runs is open: > does he advocate writing specs because he's using C++, or does he use C++ > because he advocates writing specs?
Actually he mostly uses Visual Basic. Whether this raises or lowers your respect for his opinions about good programming practice is up to you :-).
*
This all seems a bit surreal to me, anyway. There's no inconsistency between using Lisp and writing specs. For certain (unusual, for most programmers) kinds of problem, writing specs may be much less helpful than it generally is, and Lisp may be very effective in attacking some such problems. That doesn't mean that you can't use it for other things.
Programs written in Lisp are generally easier to change than programs written in C++. That doesn't mean you *have* to go changing them all the time. (It does mean that some of the costs of change are lower, which means that some of the reasons for writing specs in advance are weaker, which may or may not be enough to make a suck-it-and-see approach better than a first-write-your-spec approach in some cases.) It doesn't mean you *can't* write a spec at the start. All it means is that when you need to make changes (which you do, even if there's a detailed spec from the outset and the requirements never change and the spec was done *really* well) you can make them more easily. How can that be bad?
http://www.joelonsoftware.com/news/20020320.html "It's true. I get email from people on development teams who appear to be in some kind of big fight over something, and they are hitting each other over the head with various quotes from me, instead of thinking for themselves, and now they want me to adjudicate, as if I know the first thing about their problems or their world. I haven't yet written the article that says that if you can't think for yourself, no amount of "methodology" is going to save you."
Maybe we shouldn't pore over his writing as if it were the Talmud. I get the impression you want a deep engineering debate, but this is a guy who lets people peek into his company. Reality TV, not Oxford debates. Sometimes reality TV is more enlightening, depends on what you want to get out of it.
> Yes, but no one is holding a gun to their heads, and Allegro Common Lisp > runs on Windows. So the question of which way the causality runs is open: > does he advocate writing specs because he's using C++, or does he use C++ > because he advocates writing specs?
Why would he use Franz's lisp? That's an added dependency and requires serious justification. I would be happy to bind my knowledge to macros so it doesn't stay in my head, but he apparently has a good deal of Microsoft expertise in long-term memory. So from his perspective, he's just adding risk for questionable reward. He has noted many times that environments like Delphi may be technically better, but he doesn't know them as intimately as Microsoft's environments and therefore doesn't bet his people on them.
> In article <40170D01.6F700...@nyc.rr.com>, Kenny Tilton > <ktil...@nyc.rr.com> wrote:
> > Brian Mastenbrook wrote: > > > CLIM being a presentation-based display system, you can define > > > presentations for any different class in the output.
> > Sounds like a GF specialized on the class and <something else> such as > > the container or a stream or even just a key value such as :clim-repl as > > long the lisp supports eql specializers. What's all the shouting about > > in re presentation types? I gotta be missing something (nothing new > > about that).
> Pretty close, except usually the presentation describes the object in > such a fashion as it can easily be made into HTML or PostScript too.
Oh, OK, that does sound interesting ie more substantial than I thought. If you mean they came up with an abstract presentation protocol which can without further contribution from the class in question be translated to HTML and PostScript.
> Not a big deal, just a certain degree of independence from the concept > of "interactive GUI". With a bit of work you could probably do the same > thing to Cello... if it exists. I haven't seen any evidence of that yet > :-)
Oh ye of little faith! Well, ok, it's still vaporware. I mean, /I/ use it, but only on win32, and Cello's definition is "a portable Common Lisp Gui", so no X11 and OS X => no Cello.
And hey, even the win32 reference standard is chaos now because I just bolted in FTGL and ImageMagick and I have to rethink everything... well, FTGL is painless, god bless it. But with i/m, well, it's painless, too, but now I am thinking OpenGL now moves to the background and i/m (or the open fork (GraphicsMagick?)) becomes the normal graphics toolkit, with everythng dropping into an OpenGl texture for final rendering. raw opengl widgets still possible, for those brave enough to go there.
Here's a samplr setback caused by the huge win of I/M (look at this API: http://www.imagemagick.org/www/api.html -- check out esp. DrawingWand): I now should resurrect my invalidation scheme, by which widgets get selectively redrawn. Currently any graphical attribute changing anywhere posts a GLUT redisplay event and the whole kebash gets re-rendered. Yikes! With i/m every widget can have it's own pixmap (or I suppose draw directly to a container's pixmap--these are the things now on the table) and at redraw time most graphic components just whap their cached pixmap out to the GPU and only the "invalid" ones re-render thru i/m to regen the pixels.
But if you have checked the Cello pre-cursors on the t-t site reffed in my sig, all those use an invalidation scheme, so I just need to dust one of them off... nah. NIH applies to my own code, too. Rewrite! :)
kenny
--
clinisys, inc http://www.tilton-technology.com/ --------------------------------------------------------------- "[If anyone really has healing powers,] I would like to call them about my knees." -- Tenzin Gyatso, the Fourteenth Dalai Lama
Brian Mastenbrook <NObmastenbS...@cs.indiana.edu> writes: > In article <40168DF5.77DC...@nyc.rr.com>, Kenny Tilton > <ktil...@nyc.rr.com> wrote:
> > Any day now (two weeks?). Watch this space. I want to wait for an X11 > > version, and Mr. Burdick is handling the port, with emphasis on > > CMUCL/SBCL. I have another X11 porter in the wings who wants to give it > > a go under ACL trial. Thomas is keen on an OS X version as am I, so > > something or other over there should happen in short order.
> > The holdup has been callbacks into Lisp from C, which commercial Lisps > > handle OK on Linux/OS X, so if all else fails I'll get Cello working on > > X11/OS X under commercial apps and forget the free guys exist. But > > things sound very good on the free CL callbacks, so that should not > > happen.
> Hey hey! OpenMCL does have working callbacks. Please don't leave this > out.
Being as I'm The Guy With The Mac who's porting to SBCL, I intend to get it up on OpenMCL, too, which shouldn't be hard. But my home is SBCL/Darwin and CMUCL/Solaris, so those are my priority. That and merging with Kenny's tree with all the hella features he's added recently.
-- /|_ .-----------------------. ,' .\ / | No to Imperialist war | ,--' _,' | Wage class war! | / / `-----------------------' ( -. | | ) | (`-. '--.) `. )----'
In article <87k73clv5h....@g.mccaughan.ntlworld.com>, Gareth McCaughan
<gareth.mccaug...@pobox.com> wrote: > Erann Gat wrote:
> > If one cared about Lisp's economic viability one might wish to provide a > > counterpoint to Spolsky in order to answer the objection that (one of) > > Lisp's primary advantage(s), the ability to write software that is easy to > > change, is (or at least invites) "the single biggest unnecessary risk you > > take in a software project."
> Sleeping is very dangerous: lots of people die in their sleep.
Thanks. I'm sure that argument will carry a lot of weight at the next software design meeting I go to.
> > > His > > > argument is fine for `commodity software', such as > > > yet-another-database-query-form, but they are clearly bogus when > > > you're not sure what direction you are going in the first place. > > > This is usually the situation in research.
> > Actually, one can make the argument that it's a Bad Idea in research as > > well. In science at least most progress comes about as the result of > > testing well formulated hypotheses by carefully designed experiments, not > > through random exploration.
> I don't think that's true at all. It doesn't seem to me to be > an accurate description of the origins of any of > - Newtonian mechanics > - Maxwell's equations > - special relativity > - general relativity > for instance. > the theory of evolution
I think you could make a case that special relativity was the direct result of the Michaelson-Morley experiment, which was designed to test a well formulated hypothesis, to wit, the existence of the aether. But be that as it may, how many examples can you come up with that are less than 90 years old? And how does that number compare to the total number of scientific advances during that same period?
In article <m3wu7dozjj....@javamonkey.com>, Peter Seibel
<pe...@javamonkey.com> wrote: > Take a look at Kent Beck's book _Test Driven Development_. He makes a > plausable case for developing in very tight incremental loops.
and Pascal Costanza adds:
> The following books are excellent IMHO:
> + Kent Beck, Extreme Programming Explained > + Alistair Cockburn, Agile Software Methodologies > + Kent Beck and Martin Fowler, Planning Extreme Programming
Pascal Costanza <costa...@web.de> writes: > Another important element is to do the most simple thing that > actually works.
This seems to resonage strongly with the Forth philosophy. Says Charles Moore:
Do not put code in your program that might be used. Do not leave hooks on which you can hang extensions. The things you might want to do are infinite; that means that each has 0 probability of realization. If you need an extension later, you can code it later -- and probably do a better job than if you did it now. And if someone else adds the extension, will he notice the hooks you left? Will you document this aspect of your program?
There's probably more of this in "Thinking FORTH" if you can get your hands on a copy.
-- Lars Brinkhoff, Services for Unix, Linux, GCC, HTTP Brinkhoff Consulting http://www.brinkhoff.se/
gNOSPA...@jpl.nasa.gov (Erann Gat) wrote in message <news:gNOSPAMat-2701041141470001@k-137-79-50-101.jpl.nasa.gov>... > In science at least most progress comes about as the result of > testing well formulated hypotheses by carefully designed experiments, not > through random exploration. <snip> > the discipline or rigor of the normal process of science.
It looks like you don't have a background in scientific research.
Michele (who knows the difference between the plan he presented to get funding and the research actually done)
> Common Lisp will always be there for programmers who need to work out > the solution while coding and watching the computer work on the data.
* Erann Gat
> Joel Spolsky says this is (unconditionally) a bad idea.
In fact, he said no such thing, so I never fell for the obvious bait.
* Gareth McCaughan | This all seems a bit surreal to me, anyway. There's no inconsistency | between using Lisp and writing specs.
Precisely. Erann Gat equated what I said with «aimless hacking», and his bait only applies to such a surreal reading of what I wrote. Some things have not changed in a year...
| Programs written in Lisp are generally easier to change than programs | written in C++. That doesn't mean you *have* to go changing them all | the time. (It does mean that some of the costs of change are lower, | which means that some of the reasons for writing specs in advance are | weaker, which may or may not be enough to make a suck-it-and-see | approach better than a first-write-your-spec approach in some cases.) | It doesn't mean you *can't* write a spec at the start. All it means | is that when you need to make changes (which you do, even if there's a | detailed spec from the outset and the requirements never change and | the spec was done *really* well) you can make them more easily. How | can that be bad?
Very well said. You relieved me completely of commenting on this.
-- Erik Naggum | Oslo, Norway 2004-028
Act from reason, and failure makes you rethink and study harder. Act from faith, and failure makes you blame someone and push harder.
> > Spolsky advocates specification prior to the project, and it is hard > > to disagree that a specification, where it can be rendered, is > > desirable. Unfortunately, in unusual situations one often doesn't know > > in advance how to approach the problem, or if the problem can be > > solved at all. This takes quite some tinkering with data sets, problem > > domain representations and algorithms to fiugre out, and Lisp is a > > very fine tool at that.
> Yes, but should I conclude then that you believe that Lisp is only > suitable in "unusual situations"?
No, you shouldn't. Lisp is as good at coding from spec as any mainstream language, but notably better in unanticipated situations, be it underspecification, misspecification, change of requirements or code refactoring. I maintain that such situations are more frequent in practice than in the Spolsky's toy example.
> > P.S. It just occurred to me that you could be pointing at the article > > ironically. Still, my reply is written already :)
> No, I pointed it out in all seriousness. I was hoping the response would > be something like, "Oh, Spolsky's argument was demolished by Arglebargle > back in 1993. Go see http://..."
Iterative approach assumes that changes into initial version of specification at later stages of development are inevitable, which means that the cost of change should be accounted for. Some of us find that using Lisp makes that cost lower.
Eugene Zaikonnikov <vik...@funcall.org> wrote: > I think it all boils down to the old waterfall vs. iterative > development process debate, with plenty of good publications floating > around; see e.g. http://www.cdc-technologies.com/method/it_vs_wat.htm
*sigh* There are waterfalls and waterfalls. I find Royce's 1970 waterfall quite nice, modern perhaps...
Royce, W.W., Managing the Development of Large-Scale Software: Concepts and Techniques Proceedings, Wescon, August 1970 (also reprinted in Proceedings, ICSE9)
It does include prototyping, involved customers, planned testing, etc. It is sad it was forgotten, or then the early adopters didn't read past figure one or two...
+--------------- | "Crossing the desert" and "getting to the east coast" are two different, | though perhaps complementary, goals. | | And, when trapped in the middle of the desert, you may be caught up in the | details of getting water from a cactus and need some reference to the "real" | goal, which can help you refocus your efforts appropriately. +---------------
Ah, yezz... Which brings to mind the old aphorism:
When you're up to your ass in alligators, it's hard to remember that your original intention was to drain the swamp.
-Rob
----- Rob Warnock <r...@rpw3.org> 627 26th Avenue <URL:http://rpw3.org/> San Mateo, CA 94403 (650)572-2607