Regarding Dominic Fox’s article On Persistence and Data
Management in his weblog (http://codepoetics.com/poetix/index.php?cat=2),
dated 12/28/2004, he does pretty well in examining, and distinguishing between
those two concepts. However, he goes off the track in the following paragraph:
Fabian Pascal’s oft-repeated accusation that application
programmers are largely ignorant of what he calls "database
fundamentals" is probably true, but it’s true for other reasons besides
the general inadequacy of the US education system (see Pascal’s Database
Debunkings, passim). It’s true because database fundamentals - the mathematical
foundations of the relational model - are not what programmers need to know in
order to write programs, and would not actually be much help to them if they
did know them. How much of Knuth’s TAOCP (a densely mathematical text, way over
the head of your average ignoramus) is about relations as such?
Programmers need to know a lot of things to develop
applications. They need to be familiar with much more than just the ins and
outs of a specific programming language. They have to be conversant with
development and production operating systems (certainly the tools and often to
the system call level), installation/distribution systems, source control and
build systems, IDEs/compilers/linkers and I/O as well as other subsystems. They
often must understand scripting languages and configuration formats (e.g.,
XML). Modern programming languages require knowledge of a variety of APIs. And
programmers have to understand interface concepts and conventions –
command-line, GUI and/or web, etc. protocols (plus html, javascript, and so on.
Why is database knowledge any different?
Programmers also have to understand related business
processes, of course. They usually need to know project organization, design,
documentation as well as support, training, mentoring. Perhaps database
fundamentals require more in-depth study, but they are a major part of modern
application systems. Database is a common thread through all of the components
in the application. It incorporates much of the business concepts and logic.
The individual pieces of the application can be rather lightweight, focused on
a limited aspect of the overall processing. Thus, database knowledge would be
an essential aid in integrating with the entire application.
Ed. Note: I concur,
of course, with Lee’s comments. I will add, however, that part of the problem
has to do with programming languages forcing procedurality on data handling.
Had the data component of programming languages been more akin to the
declarative/set oriented nature of database access and operations (where
appropriate), there would not be such a gap in programmers data management
foundation knowledge.
What is more, there has been a serious degradation of
education of fundamentals, to the point of, for all practical purposes,
nonexistence, including programming fundamentals. And increasingly programmers
are self-taught, and know nothing beyond products/tools.
Posted 8/12/05