What is programming really.
In a two sentences form it is this:
- a poet: I just cannot sleep - I feel there should be a better word, a better name, more elegant form. This is so clumsy, unnatural, chunky...
- a coder (watching a context-help window in an IDE): looks like this accepts a kind of object I have and return what I need - done! I'm such smart, clever and productive!
This could be an end of the story, but some explanation is necessary.
Something is very wrong when you see all those gigabytes of optimized compiled code for performing a mere ordinary tasks of data manipulations. It is not transformations of 3D-scenes with a ray-tracing or anything of that kind.
It feels bad. It looks bad. It smells bad.
You're experiencing a strong aversion, almost physical feeling of nausea, while you are confronted with a huge, messy blob of a vague form and unidentified structure, made out of unfamiliar parts, that you even cannot comprehend.
It doesn't mean this is a such great thing. It is exactly opposite.
You know, even if you don't know exactly how, that all this could be made much simpler, much more elegant, less bloated. You have a right feeling, an intuition, that what you see is a huge piece of a lowest quality, cheap crap made without a bit of competence and personal involvement.
At least you remember that people have done almost the same thing before, much better on a modest hardware.
The same aversion comes when you see the source code, which is a mix of too verbose descriptions of unnecessary, out of context little details, along with unnatural, complicated constructs dragged in from some unrelated, remote field. You're just unable to read it, unable to get any meaning, it produces no reflections, no intuitions, except one: what the fuck I'm reading?!
It is not mere an unfamiliar, foreign language - this is a wrong analogy people use to self-reassuring. Any foreign language is consistent, intuitive, evolved. You could pick up Tibetan or a Hindi writing system in a half of a hour. (Which of course doesn't mean you can understand what you're reading, let alone able to write. All you got is a feeling of it).
It is not just the structure that produces aversion, it is the content, as if someone stuffed a bunch of unrelated, random sentences from several different languages in one file.
What you are expecting to see are familiar, natural mind-friendly structures, such as lists, tables, trees, strings, but what you have is "template class Ts" or "
self.getDefaultInstantiator.InstantiateInstance" and similar nonsense.
Well, the most complicated (because it is so efficient) data-structure, whose internals should be "hidden" (not been exposed in a higher level) is a hash-table. In a computer memory there are no "template class Ts" or "
InstantiatorFactories", neither they shall be in the mind of a programmer (very little is known about minds of coders, except that such constructs of a confused mind makes them feel special and important).
There are forms and content, structures and the data, plus procedures, which are just a distinct sets of instructions. That is enough.
Yes, there are different data representations, which means different encodings, which means different types, but, as everyone remember, a type is defined completely by the set of operations which could be performed on the values of that type (yeah, recursive definition, which is a sign of a natural thing).
Sometimes, not too often in case of generic functions, and almost never in case of "factories" (in contrary to what they say in commercials) we're arrived to the conclusion that this particular algorithm, applied to this particular data representation could be implemented naturally using some generalization called "design-pattern".
It doesn't meant that we need some class which implements it, all we need is the underlying idea. We can implement it ourselves.
(That is why people are reading a poetry - hunting for ideas in a clever forms, not for a long sentences and fancy words. By the way, there are millions and millions of people who are cock-sure that the ability to produce long sentences and use fancy words is the skill of a writer).
This is the essence of programming - we are discovering and implementing things as we go, on the spot, constantly evolving, applying ourselves to the current task in hands, as part of a recursive process of self-improvement, applied to itself.
It is a Way, an Art, a Flow, not mere a job. Here is an example. The job is about tools of coding.