A Sea of Paradigms
Note that the paradigms in this list are not
necessarily mutually exclusive. Also, most languages or
paradigms mix multiple concepts.
Tree
This is viewing organizations and/or code in a
highly hierarchical manner. Most paradigms use
at least some hierarchies, but the concept can
be taken much further. Data, algorithms, and/or
their relationship can be hierarchical.
For example, there are special
database systems to process and control hierarchical
data more effectively than RDBMS, at least from a
performance standpoint. Pascal is known
to provide a very hierarchical algorithm and
subroutine organization. Object Oriented Programming (below)
tends to use inheritance hierarchies to classify
"objects". I find hierarchical taxonomies very limited
for business applications even though superficially
it seems like it would be more applicable.
Tables
This is my favorite.
It can focus on either making programming
for tables and RDBMS easier, and/or on using tables
themselves to organize program logic.
Another feature of Table Oriented Programming is
achieving a consistent
set of collection processing operations.
Procedural
This is focusing on grouping organizations and/or
code by similar operations or by the operations that can
be done on them.
Objects
This is organizing by objects or similar categories
(subclasses) and a predetermined set of operations that operate
on them. It is my opinion that Object Oriented
Programming is over-hyped
at this time. It has it's place, but not
at the center of the Paradigm Universe.
Expert Systems
This organizes behavior by a list or pool of rules that are
sometimes constantly cycled through. The rules can have
priorities and may be "switched-off" under some
circumstances and conditions.
Streams
These are popular in UNIX utilities. Stream paradigms
provide solutions by linking the input and output
of smaller programs or utilities, sort of like
a bunch sausages linked together. Although streaming
is highly useful for batch operations, they are
more limited in highly interactive systems.
It is also tradition that the streams be text-based
if possible. That makes them both easier to inspect
and cross-platform.
See Also:
Control Panel Analogy
GUI
This emphasizes starting with or focusing on
the user interface and flushing out the rest
from there. It may also emphasize logic building
by dragging, dropping, pointing, pasting, etc.
Sets
This is using set theory, such as union, intersection, etc.
to solve some types of problems. Set theory can be used
in SQL, for example, to solve complex processing problems.
Documents
Lotus Notes is an example of a system that uses documents
as the base for work-flow and other business tasks.
Circuit-Like Visual Logic
Lab View is a product that
uses a circuit board-like layout to create program logic.
Although the product was originally designed for
electronic applications, programmers found that it could
be used for many different application types. Subroutines
are often represented by a chip-like rectangle and parameters
are fed to these subroutines by "wiring" output from
one "chip" to the input terminals of another. Special
constraints can be set up to control the sequence
and mode of the "chips".
Users familiar with it often prefer it over traditional
languages because it provides a two-dimensional way to
layout logic instead of the one-dimensional approach
inherent in text coding. (Control
Tables also offer a 2D view of logic, but in a different
way.)
Neural Networks
The human mind uses neural networks. Although most practical
applications tend to use neural networks for pattern
matching and finding, it is possible they could be used
for much more.
Neural networks are based on the concept of nodes with
connections (wires) coming in and going out to many other
nodes. The in-coming wires often have little "gates" on
them that have a weighting factor. The weighting factor
controls how much of the signal from a given wire gets
"heard" from it's corresponding node.
The weighting factors are usually modeled with a range
of either 0 to 1, or from -1 to 1, and is the primary
way that neural networks are "programmed". (Behavior
within a node can also be changed, but this is less
common.)
Functional Programming
Not to be confused with "procedural programming", functional
programming is where side-effects of functions on
the state of the rest the program are
impossible, or discouraged (depending the purity of your faith). Since
side-effects-free functions don't have any context, it's easier to test them
interactively (typical for Lisp systems),
and also easier for compilers to optimize precisely
because of the lack of side-effects. Lastly, 'refactoring' in
functional languages is allegedly easier, again due to the lack of context.
(Text based on notes from Philip Lijnzaad.)
Others?
Please let us know if we forgot any.
Main
Updated: 3/22/2000, © Copyright 1999 by Findy Services
and B. Jacobs