Welcome to KARMA ENGINEERING Research & Development Lab
The wiki section of this site is about sharing and teaching few selected ideas and concepts we believe are crucial for a software engineer. (It became a little messy, so, please, use TitleIndex for quicker navigation).
It is mostly the attitude, the way of looking at, and thinking about problems and tasks, the habit of understanding how it works and why it is so and, especially, why we believe something is good-enough or appropriate, why we prefer this over that.
Such habits of thinking are essential to deal with complex and quickly changing technology, as opposed to habitual snap-judgments of a typical consumer, who conditioned to skip the analysis completely.
With such attitude it is obvious, that some recent development, such as attempts not to think about underlying hardware, data-structures or an OS, to throw it away, to make it someone else's problem (developers of JVM took care of everything!) brought the whole industry to this miserable state we're witnessing today.
Programming has nothing to do with collecting classes (look, in C++11 they added this and that! Our Java framework has this and that - everything you need!) it is an actual experience of describing given aspects of reality precisely in terms of programming language. (which means, that we need it as much as possible less constrained and less restricted, not more.)
Yes, for coders tools are everything. Let them collect classes and compare frameworks. (Oh, this branded set of paints will make my paintings 17% more vivid and 31% more contrast and will improve my decision making).
These pages are for people, who for some reason looking for an abstract Art of Programming which is about artistic sense, complete involvement, getting into a flow (not TAOCP), for people with so-called introvert mindset, for geeks and spooky minds, interesting in how things works and why it is so. We be will happy to share ideas and work together with such people.
The difference between a coder and programmer is the same as it is between a writer and translator. Translator may be able to translate a novel like Catcher In The Rye into a language he knows to some extent, but he is obviously incapable to invent and write a comparable novel. Knowing a language does not make one a writer.
Coders are translating specifications into a code, programmers are inventing specifications and expressing them in the form of code. Programming is an engineering discipline. Coding is a translation skill.
It is impossible, by the way, to translate any sophisticated technical text without having a background knowledge of an environment, without knowing the context. That is why a software written by coders solves only one problem - getting their salary, but never the problem of people who will use the software. All those meaningless piles and piles of Java classes were created this way.
On the other hand, it is not words that conveys an idea. It is idea itself. Words are just a media. So we need as less of them as possible, not more, like the Java crowd is so sure. Knowing a language is not enough to write a good poetry. And of course, it is not a typewriter (or an IDE) that makes one a poet.
A language is a medium for expressing ideas.
(define (solve problem) (define (focus-on part) (if (good-enough? (details part)) part (focus-on (simplify part)))) (map focus-on (decompose problem)))
There is our so-to-speak tutorial, aimed to show rather how to think and then program.
There are 11 sections altogether as messy as I wrote them.)
We are accepting donations from those who found our efforts beneficial. We're using accumulated funds to support our members (to pay for their living and travel expenses).
There is a list of available services we provide as partners or sub-contractors.