Just because a screwdriver can be used
as a cleaning tool, pointer, weapon,
or paintbrush
does not
mean it is the ideal choice for any of these
applications.
As with databases, so with languages:
no one choice satisfies all requirements.
Appropriate considerations include
- reliability
- ease of development
- level of abstraction
- precision of control
- performance
As a general rule,
prefers to work at the highest level
of abstraction which still gets the job done.
The higher the level of abstraction,
the more work each line of code does.
And the less code you have to write,
the less time it takes to write it.
Therefore we usually prefer SQL to C,
when both are applicable,
as one SQL statement can translate to tens or hundreds of lines of
C.
And from the point of view of a developer on the client side,
one stored procedure call can map to tens or hundreds of lines of SQL,
making PL/SQL or SPL or whatever still more efficient than SQL.
(Of course, a corresponding developer on the server side
still had to write & debug the stored procedure.)
Of course, nothing is free. Higher levels of abstraction do not come without their price.
With higher levels of abstraction you can gain ease of development,
but you can lose:
- fine-grained control
- performance
- reliability; if there are too many levels of abstraction too poorly understood,
bugs can easily hide out in the lower levels
has extensive experience with SQL,
and has acquired significant expertise
both in how to coax specific results out of SQL
and in how to optimize its performance.
The performance optimization of SQL has been the subject of several
texts and is a large area in its own right.
Key are:
-
A clean database design
-
Firm command of relevant index
structures
-
Ability to read the query plans of the SQL optimizers
-
A relaxed & flexible attitude
is also expert in the associated stored
procedure languages, i.e. Oracle's PL/SQL, SQL Server's Transact-SQL, Informix's SPL,
and in the construction, debugging, and tuning of
stored procedures built using them.
|
has written a large variety of applications in C and C++,
including tools to:
-
access databases (usually using ESQL/C)
-
run statistical analyses
-
diagnose and patch filesystems
-
create customized videos
-
control printers, modems, graphic cards
-
control television channel switchers
-
control typesetters, satellite transmission systems, and so on
has written C on all major platforms
using a wide range of compilers, from Microsoft's VC++
to the Free Software Foundation's gcc.
has run a C software development class for experienced programmers new to C.
The class notes were written up as
A C Workshop: For Beginning Programmers,
purchased by Bell Atlantic.
There was some thinking a few years back
that C++
would replace C.
This has not, however, happened.
While there are advantages to working at the
higher levels of abstraction
that C++ affords,
there are disadvantages as well.
For instance, the greater internal complexity of C++ creates
more hiding places for bugs.
And for many simple operations,
C++ is simply overkill.
has written a large number of practical utilities in Perl:
-
web & CGI
-
operational systems
-
database access
-
and so on
Perl is in some ways our favorite language:
it is a large, friendly octopus,
eager to reach out in some new direction.
has considerable experience
with Fortran,
primarily for scientific and numerical work,
including applications such as
-
computing particle trajectories within magnetic fields
-
computing equations of state for neutron stars
has also worked with other languages,
i.e. Java, Lisp, Prolog, and so on.
In a surprising number of cases,
a client problem may be most gracefully and
expeditiously handled by writing
a small language in which the problem
may be easily and simply described.
We have employed this technique on a number of occasions,
always with good results.
We are looking for fresh opportunities.
|