[comp.sys.mac.programmer] Prototyper vs. Doing it Yourself

rs4u+@andrew.cmu.edu (Richard Siegel) (03/14/88)

        I've been reading the discussion of Prototyper on this board, and
despite the rather crass :-) plugging I've seen, it does sound intriguing.

        However, I resist using tools such as MacApp, or Programmer's Extender,
or MacExpress, or Prototyper, simply on the grounds that I'd rather do it
myself. If I do it myself, I've gained an insight into how things work; I've
gotten my hands dirty, and I know exactly where the bugs lie (if there are
any). The learning is sometimes more valuable than getting the job done. My
plotting program's been in continuous development for over a year (since the
last time I released it as shareware) and it bears no resemblance to its
previous incarnation; the interface is more standard, more intuitive, and
faster than previous versions. And I know a lot more about programming in
general, and about hacking the user interface toolbox, in particular.

        I guess the point is that I've done application development since
before the first toolkits came out, and I've written all of my interfaces by
hand. And enjoyed every minute of it. And I see no reason to throw out all of
my work at this point.

        Aside from the philosophical differences, the practical application is
that since I've done the interface already, it's a simple job to build up a set
of libraries, or even an application shell. Also, I can keep my code current
with the system by adding MultiFinder support, color capability, and so forth,
instead of relying upon someone else to do it for me.

        When I get Lightspeed Pascal with object support, I'm going to use it
to make my application smaller and more elegant, not just to run MacApp.

So call me crazy.

                --Rich

===================================================================
Rich Siegel
Confused Undergrad, Carnegie-Mellon University

The opinions stated here do not represent the policies
of Carnegie-Mellon University.

Arpa: rich.siegel@andrew.cmu.edu
UUCP: {decvax,ucbvax,sun}!andrew.cmu.edu!rich.siegel
==================================================================

lsr@Apple.COM (Larry Rosenstein) (03/15/88)

In article <AWCzzgy00V48UYU0bT@andrew.cmu.edu> rs4u+@andrew.cmu.edu (Richard Siegel) writes:
>
>        However, I resist using tools such as MacApp, or Programmer's
>Extender, or MacExpress, or Prototyper, simply on the grounds that I'd
>rather do it myself. If I do it myself, I've gained an insight into how
>things work; I've gotten my hands dirty, and I know exactly where the bugs

This is a very good point.  My experience with MacApp has been that some
people do like to know what is going on inside of MacApp.  These people tend
to have a harder time using MacApp because MacApp is a fairly large program
written in a certain style.  (It does take a while to fully understand what
goes on inside of MacApp, plus the dynamic binding of method calls makes it
even more difficult.)

People who will accept the "MacApp approach", and will try using MacApp
before finding out how it works seem to have an easier time learning it.  

>lie (if there are any). The learning is sometimes more valuable than
>getting the job done. My plotting program's been in continuous development
>for over a year (since the last time I released it as shareware) and it
>bears no resemblance to its previous incarnation; the interface is more
>standard, more intuitive, and faster than previous versions. And I know a
>lot more about programming in general, and about hacking the user interface
>toolbox, in particular.

The philosophy of MacApp is that programmers shouldn't have to know about
the details of the Toolbox, in order to produce an application.  They also
should not have to reinvent the code for the standard user interface each
time.  On the other hand, if learning about the workings of the Toolbox is
what you want to do, then MacApp is not going to help you do it.

-- 
		 Larry Rosenstein,  Object Specialist
 Apple Computer, Inc.  20525 Mariani Ave, MS 32E  Cupertino, CA 95014
	    AppleLink:Rosenstein1    domain:lsr@Apple.COM
		UUCP:{sun,voder,nsc,decwrl}!apple!lsr

rmh@Apple.COM (Rick Holzgrafe) (03/16/88)

In article <AWCzzgy00V48UYU0bT@andrew.cmu.edu> rs4u+@andrew.cmu.edu (Richard Siegel) writes:
>
>        However, I resist using tools such as MacApp, or Programmer's Extender,
>or MacExpress, or Prototyper, simply on the grounds that I'd rather do it
>myself. If I do it myself, I've gained an insight into how things work; I've
>gotten my hands dirty, and I know exactly where the bugs lie (if there are
>any). The learning is sometimes more valuable than getting the job done. My
>
>===================================================================
>Rich Siegel
>Confused Undergrad, Carnegie-Mellon University
>
>The opinions stated here do not represent the policies
>of Carnegie-Mellon University.
>
>Arpa: rich.siegel@andrew.cmu.edu
>UUCP: {decvax,ucbvax,sun}!andrew.cmu.edu!rich.siegel
>==================================================================

All valid points, Rich.  And I'll admit before I start shooting off
my mouth, that I haven't yet done any programming in an object-oriented
environment (I work in C -- "RSN", they tell me :-).  But as an ex-Un*x
hack, I have programmed with such luxuries as YACC,  which creates parsers
from simple descriptions of a grammar, and LEX, which creates scanners
from (fairly) simple descriptions of a lexicon.

The purpose of these gadgets, ultimately, is the same as the purpose
of a compiler vs. an assembler. Writing in assembler, you know EXACTLY
what the machine is doing: nothing is hidden: and your code is smaller
and runs faster. So why program in a high-level language?

The answer is, that in a production environment the learning is rarely more
important than getting the job done in a timely fashion.  In school,
you should learn (I did notice your mailing address :-). In production,
you generally should have already learned: you can then decide whether
the job is better done by hand or by a power tool.  (Once in a while,
I usually do take time to learn something new.  I don't mean to imply
that I am or anyone is a total know-it-all or ever can be!)

Brad J. Cox, in his book "Object-Oriented Programming: An Evolutionary
Approach" makes the point that for twenty years, the productive capability
of hardware engineers has doubled every year, because each year they
can grab an ever-more-sophisticated pre-made component off the shelf,
instead of re-designing that particular wheel themselves. In the same
two decades, while the hardware designer's effectiveness has been
increasing exponentially, the software designer's has been increasing
only arithmetically (Cox's estimates), largely because we software
types can rarely re-use someone else's work. The odd "sort" routine from
a sub-routine library, and that's about it. Pretty low-level stuff,
while the hardware folks can now grab an entire CPU for around $30.

The moral: Power tools are effective: they don't come without price,
but the right (!) power tools can be a tremendous productivity aid.

So how massive a flame war have I started? (-: *cringe* :-)

==========================================================================
Rick Holzgrafe			 | {sun,voder,nsc,mtxinu,dual}!apple!rmh
Communications Software Engineer | AppleLink HOLZGRAFE1    rmh@apple.com
Apple Computer, Inc.		 | "All opinions expressed are mine, and
20525 Mariani Ave. MS: 27-Y	 | do not necessarily represent those of
Cupertino, CA 95014		 | my employer, Apple Computer Inc."

gillies@uiucdcsp.cs.uiuc.edu (03/17/88)

I think you can learn a lot from a prototyping tool.  You can design
an elaborate user interface, and then look at the code it generates.
One of the best ways to learn is by seeing and imitating.  So
watch how the prototyper generates code for an application, and learn
to imitate it.

Don Gillies {ihnp4!uiucdcs!gillies} U of Illinois
            {gillies@p.cs.uiuc.edu}

mayerk@linc.cis.upenn.edu (Kenneth Mayer) (03/21/88)

When last we saw our hero, rs4u+@andrew.cmu.edu (Richard Siegel) ...
> ... ... ...
>        However, I resist using tools such as MacApp, or Programmer's Extender,
>or MacExpress, or Prototyper, simply on the grounds that I'd rather do it
>myself. If I do it myself, I've gained an insight into how things work; I've
>gotten my hands dirty, and I know exactly where the bugs lie (if there are
>any). The learning is sometimes more valuable than getting the job done. 

Granted. Most people however don't have the luxury of making the same 
mistakes over and over again until they learn how to do it right. Tools
that I've used, such as MacApp and Prototyper are in the one case, a pre-
made library of a standard interface that my shop can use across all 
applications that we build. We use a lot of student programmers who've
barely started their programming careers, much less Macintosh programming.

In the second case, Prototyper, I will be the first to admit that I don't
like the code that is generated. In a word, it sucks buffalo chips. I don't
think that it was ever meant to be a replacement for writing good, clean
Macintosh supporting code. Instead, it is a starting point for how the
program control should flow, where mouse and menu events have to go, and
it creates resources like windows, icons, and menus better than any other
package I've used.

I've found that Prototyper is most useful for interactive interface
design with a content expert. I can change formats, dialogs, and windows
quickly, then show the client the result. That makes my job a lot easier.

MacApp is not going to replace all pascal programmers for some time to
come. My group has discovered several minor (and some not so minor)
bugs in MacApp. MacApp, in addition, makes it very difficult to do things
that you may want to do, but was never in the original design. For example:
it is impossible to center dialog boxes dynamicly. That is, if you place
a dialog window in the center of MacPlus screen in your resource description
file, it will be in the upper left quadrant of a MacII display. Not pretty,
and NOT in accordance with Apple standards. And there is no workaround
that we have found.

What MacApp provides is a way to write object oriented code. Which, if
done correctly (and I stress this highly), gives you code that you can
literally cut and paste into other applications. Object orientedness 
allows you to create child class objects with extensions you need, without
modifying the base code source.
>
>        I guess the point is that I've done application development since
>before the first toolkits came out, and I've written all of my interfaces by
>hand. And enjoyed every minute of it. And I see no reason to throw out all of
>my work at this point.

You are one of the lucky ones to developed and maintained a workable
library over the years. My shop has been in business since 1984, and yet,
when I started last November, there was no source code in our library
that drove the standard event loop. Everyone is expected to write one
for him or herself.
>
>        When I get Lightspeed Pascal with object support, I'm going to use it
>to make my application smaller and more elegant, not just to run MacApp.
>

You may discover that the source code specific to your applicatio is smaller,
but that the overall source and object code is much larger. Object oriented
Pascal in MPW tends to be huge (a minimum of 100K).


-----     =====     -----     =====     -----     =====     -----
Kenneth Mayer			|	Teacher: "Two plus two equals..."
mayerk@eniac.seas.upenn.edu	|	Student: "Four, but what's a two?"