Just because a screwdriver can be used
as a cleaning tool, pointer, weapon,
mean it is the ideal choice for any of these
As with databases, so with languages:
no one choice satisfies all requirements.
Appropriate considerations include
- ease of development
- level of abstraction
- precision of control
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
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
- 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.
A clean database design
Firm command of relevant index
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, C++, & 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
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
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.
With that said, we have ourselves been branching out into other scripting languages:
As with databases, so with scripting languages; they have personalities and therefore appropriate uses.
has considerable experience
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.