|
Guide to High-Level Development Tools
Higher developer productivity is one of the primary benefits of a
high-level development tool. Higher productivity results in lower
development costs, shorter development schedules, lower maintenance
costs, and more highly-featured and usable end products. It also
means that less time is required to learn and use the tool, since
there are fewer low-level details that need to be mastered before the
actual work on a project can begin.
It can be difficult to determine whether or not a given language and
development environment will support high productivity, however.
Here is a list of questions you should ask before choosing a
development tool. A tool with all of these features will support high
developer productivity, and using such a tool for your next project
will cut a considerable fraction (perhaps even a majority) of the time
it would take to develop the product using a lower-level tool:
1) Can you execute a string containing language statements?
The ability to build up a list of commands as a string and then
execute that string using the language interpreter is probably the
single most important feature of a high-level language. Although it's
not used very often, this one feature can save writing dozens or even
hundreds of lines of language statements. In MetaCard, the "do"
command can be used to execute strings, and the "value" function can
be used to evaluate strings as expressions. Perl, Tcl, and ksh have
similar features. The various BASIC dialects do not. Neither does
Java, and by it's very design it is impossible to implement a feature
like this in Java.
2) Can you refer to a variable as either a string or a number?
Since most applications require the manipulation of both strings and
numbers, an important high-level feature is the ability to operate on
a variable as either a string or a variable without having to declare
its type or perform a separate conversion operation on it. MetaCard,
Perl, ksh, and Tcl all support this feature, but the latter two
languages have very low performance in numeric-intensive operations.
Visual Basic supports a "variant" type that has this feature but there
are many restrictions on its use. Java does not have this feature.
3) Can you refer to words and items in a string with single
expressions?
There are many times when being able to get the words or items
(elements separated by commas) or lines in an input stream one at a
time is useful. With most low level languages (like C/C++/Java/BASIC), you
have to write a loop to scan the string a character at a time looking
for delimiters and then copy the substring. With MetaCard, you just
write something like "word 2 of line 3 of somevariable".
4) Can you change the layout of the controls in and application
and change scripts without having to restart the application?
With most low-level development tools, and even high-level tools like
dtksh and Tcl/Tk that lack Integrated Development Environments (IDEs),
every time you have to change the user interface or scripts of an
application, you have to stop running the application, make the
change, and then restart it from the beginning to see the changes.
Even worse is that with low-level languages (like C/C++/Java/BASIC),
you have to wait for a compilation phase to complete before you can
restart the application. Since most changes are made to areas in an
application that require several actions to get to, the developer must
execute those actions over and over again while developing and
debugging the application. This process is an enormous waste of time,
and takes most of the fun out of developing applications.
MetaCard has the very unusual ability to save all of this tedious
restarting and navigation through the interface to get to the part
under development. Instead, the developer can make changes to the
layout or scripts in an application while that application is
running. This saves enormous amounts of development time, and allows
productivity unmatched by any other language or development
environment.
5) Can you crash the program or system with a programming error?
The absolute worst use of a developer's time is waiting for a system
to reboot. While this "feature" of development in
third generation languages is most common on
MacOS, there are many ways to render even Windows and UNIX systems
unusable with them even if you can't actually crash them. And
sometimes programming errors in MacOS applications written in third
generation languages cause a problem even worse than crashing: data
corruption can occur that can cause the loss of some or all data on a
hard disk. Even if it's only the program that aborts (called a GPF on
Windows or a core dump on UNIX), you're still left with the poor
productivity associated with having to restart the application to
debug it. With MetaCard, programming errors simply cause an error
dialog to appear that can be dismissed with minimal disruption of the
task at hand.
|