Knowledge is power.
To know something is to have an adequate representation (model) of reality inside your brain.
To make sure your model is correct and not polluted by memes, one has to be able to backtrack to the first principles and to rebuild understanding from the ground up.
This is valid for core mathematics, to understand, for example, that +
(a binary operation) is sort of a “generic operation” of putting together, that it is commutative because it does not matter, which “pile” will be used for the result and that rotating of an observer, does not affect the result, so it “always succeeds”, and because of that it forms a Monoid. Neither division not subtraction are commutative because, by definition, the arguments are not symmetric and have different meaning (semantics). These operations may cross the type boundaries (so not a Monoid), when, lets say, we subtract more that is there, or divide by a non-multiplier (which corresponds to the view of a repeated addition of the same value to itself). And so on, and on.
This ability has been captured in the principle that knowledge of the underlying principles frees one from memorizing all the details.
Imperative
The most common learning is by imitating what others do and by gaining your own experience through repeated practice. This is universal – animals learn that way.
Most of the learning amounts to “having had this (or the same) problem before”. This is basically what almost all professional skill-sets are in practice.
Practical
Just like a practicing doctor or motorcycle mechanic, one becomes familiar and eventually experienced which common situation which frequently arise. This is a similar to a practical knowledge of a musician or a craftsman or a tennis player.
I am a system administrator for my first career, with lots of SCO Unix, FreeBSD (using ports instead of packages) and early RedHat under my belt, and I am still using Gentoo daily, which is also based on building things from the sources.
After all that experience I do not even remember when something got
broken which I cannot troubleshot or fix. And I do things like compiling
a whole Haskell stack (including stack
, you know) from the sources.
This is because I internalized the principles (dynamic linking, package
versioning, and “anatomy” of a C/C++
project in general) and have
done certain things so many times that I don’t even think about it.
Such level, however, takes some 20 years of daily practice, and this is just exactly the same as being a truck driver for 20 years.
Declarative
Just memorizing the statements of fact.
Principles
The most valuable knowledge is of general principles and their implications (consequences).
Knowing some fundamental principles of physics saves a lot of time and effort by pruning out (not trying) what will not work. This is how smart people do troubleshuting – by starting from the principles.
This is a universal technique of reducing the search space for an informed search (which use stable heuristics).
So, we absolutely have to learn and understand the principles of programming in general (MIT used to teach pricniples with Scheme-based courses) in order not to be drowned in irrelevant particulars of current mass-hysteria (react.js, async Python and what not).
*Going into unknown What is fundamentally different is “going into unknown” – doing something of which you do not have previous experience or memorized knowledge.
But we are doing this all the time on a small scale, by visiting unfamiliar places and meeting new people (no wonder this gives some a lot of anxiety!).
Exploratory mathematics and programming are the most difficult things, because one has to verify every single step (transition).
Memorised imperative knowledge
- How to use Vim
This includes principles, like “navigate through the structure of a text, not by using arrows or
hjkl
. - How to use Emacs Understand that each keypress invokes a function, familiarize yourself with major modes, etc.
Recepies
- You know how to make some foods without spoiling it.
Expert knowledge
An expert knowledge goes beyond “how-tos” and “recipes” in general. It is beyond imperative knowledge of the domain and related mathematics.
An expert knows when to call bullshit, what will cause problems and what will not work at all. An expert could compare paradigms and related methodologies, and know which techniques are effective and which are just memes.
The problem is that by that time one is usually quite an old man, spent and burned out so many times, that this hard-earned expert knowledge is rather a burden. Think of a 50 years old Mike Tyson. He is definitely an expert, but…