From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Thread: 103376,e7ceb00d83425e3a X-Google-Attributes: gid103376,domainid0,public,usenet X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news3.google.com!proxad.net!feeder1-2.proxad.net!feeder.erje.net!aioe.org!not-for-mail From: John McCabe Newsgroups: comp.lang.ada Subject: Re: Prototyping with Ada Date: Thu, 29 May 2008 10:41:19 +0100 Organization: Aioe.org NNTP Server Message-ID: References: <87zlqptajv.fsf@ludovic-brenta.org> <7f3435c6-bacb-4e02-a1de-2e73a417ba6c@w4g2000prd.googlegroups.com> <87r6c0sei2.fsf@ludovic-brenta.org> <87k5hsrqbi.fsf_-_@ludovic-brenta.org> <8e953413f88u9slj1es57kuegqdvn908ul@4ax.com> <5kgq34po8tmg50p8v75a1810ug5gmpfg03@4ax.com> <7e670f6c-58ed-4dac-bcb7-e1d062a81ca9@i76g2000hsf.googlegroups.com> NNTP-Posting-Host: 8xFrDPbGvE3CA8T+awNlRA.user.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org X-Newsreader: Forte Free Agent 2.0/32.652 Xref: g2news1.google.com comp.lang.ada:445 Date: 2008-05-29T10:41:19+01:00 List-Id: On Wed, 28 May 2008 05:12:12 -0700 (PDT), Ludovic Brenta wrote: >John McCabe wrote: >> Code quality, yes (but your use of the term "right" is very >> important!). It is much more difficult to refactor an inadequate >> design at that point. > >I agree that if the design is bad, it might be better to throw the >program away (perhaps salvaging some reusable components) and start >from scratch than to refactor. But that shouldn't be what you plan >for. If you think you need a prototype, chances are you are unsure >about the quality of your design. That all depends on what is meant by quality here. Prototyping has many purposes, one of those is to prove a design will work. If you don't need to prove your design will work then the chances are that you are designing something you've done before and therefore don't need to design again, or you are superhuman. In this paragraph I'm referring to the structural and behavioural design you have come up with. In addition prototyping allows you to quickly provide a mock-up of a system to present to a customer to validate that what you are doing is the right thing. Once you've got a very basic design in place you can start knocking code up to do this, but it's important to remember that this code is only there to prove something. It's not intended to be good quality code, it also might deviate from how your design started, but this is all about iterating to achieve the correct design in the end, and this needs to take into account what you've learned from trying to produce code to do the job. In most cases you will have cobbled together the code jsut to make it work; at the protoyping stage refactoring the code properly isn't often something you have time to do and, in my opinion, isn't something you should attempt. That is the point; build a prototype, learn from it, and throw it away because your second attempt will probably be better (that's another Brooks thing isn't it?) > If that happens to me, I don't make >a "protoype"; instead, I go back to the drawing board and seek a >second opinion. It sounds to me like you're trying to achieve a perfect waterfall development cycle here.