I consider myself a "Data Structure-ist". Give me a data structure and I
can tell you what can or cannot be accomplished. I thought this
might be a special talent. I was wrong. My ten year old grand-daughter
can easily do the same. I held up a box of candy, which I named about
twenty thing I knew about it. I then ask her, she was able to quickly
name 3 other things about the box that I had left out.
In a class for
an MBA, it quickly tells us that a solution to any problem is not
necessarily the first few ideas that come to mind. So we must name all
the possibilities, then weigh each solution to determine the best
possible choice. In programming we have five minutes in which to
determine a solution in an environment of isolation. Most of the time
the choice for a solution is a personal belief, with no knowledge for
the reasoning behind the belief: "Chrome is better then IE", "Python is
better than R". This is not a religion.
"Nature is the source of all true knowledge. She has her own
logic, her own laws, she has no effect without cause nor invention
without necessity." -- Leonardo da Vinci
"Most of the mistakes in thinking are inadequacies of perception
rather than mistakes of logic." -- Edward de Bono
"From a drop of water a logician could infer the possibility of an
Atlantic or a Niagara without having seen or heard of one or the other."
-- Sir Arthur Conan Doyal
"Dubium sapientiae initium. (Doubt is the origin of wisdom.)"
-- Rene Descartes
Logic over Design:
Having programmed for over forty years, it has become obvious that
design is the only criteria for writing software products. Worry about
syntax is design. We build computers then try to determine how to
program them, with absolutely no thought has gone into the logic of what
we are to accomplish, only on the logic of adding two number.
goal is to add two number together then, If the number are small enough,
we have accomplish this. The rest of computer logic is made up of add
two numbers together. Is this our goal?
We have been taught generic programming, to make functions that can be
used for multiple purposes. The inverse of this is "Specific
Programming" to program for one and only one purpose.
I am now
advocate for writing actions that perform one action, then create a
language that can choice which action to perform. The purpose is to
eliminate documentation, thus reduce human involvement in the
implementation of the design.
The age old use of "qualifiers" and "parameters" to adjust an action
is impossible to implement. Each Command Line statement and API function
requires volumes of documentation. When in fact we should be striving
for no documentation.