« Back to blog

Uh, I’m leaking…

@angryamoeba: Development tools are for shortcutting repetitive work,
not cutting out the need to learn. You have to do it the hard way at
least once.
@atobe: I have never calculated pi using a series expansion by hand - am I dumb?
@yandle: @angryamoeba Yeah, I read about this recently in ‘The Law of
Leaky Abstractions’: http://icanhaz.com/leakyabstractions
[So just to be clear, I wanted to riff off some of these tweets rather
than contradict them (as might appear with my first twitter
response).]
Some abstractions leak more than others - i.e. it behoves you to know
more about how they actually work. Other abstractions - let’s call
them “tools”, do a better job than others. And let me peg the range
here- for me a tool may be a co-designed language *and* GUI - designed
to work well together and *not leak*. IMHO we’ve barely started on
this kind of co-design activity.
In today’s world for the vast majority of purposes calculations
involving PI just work, but that wasn’t always the case. Once it was
difficult, unstable knowledge with unclear methods of application.
Compared to calculations with pi a code generator is much more likely
to be a messy, incomplete affair where understanding what it does, and
how, is an absolute must to get any benefit from it.
Both these endpoints are debatable, but the point is to establish that
there is a spectrum.
Now the Greeks were probably obsessed by methods of calculating
PI-like systems because it meant a great deal to the work that they
were doing at the time - they were close to the method. They would
have, and did use basic ratios before embarking upon worrisome
irrational series that we have now.
We are somewhat beyond this moment now, it’s not something we have to
worry about, and is established in our culture and tools. The point
being that leakier abstractions can be replaced by better ones that
perform the same task, and in the same area, given time and with an
effort to seek better abstractions.
To my point: The quality of abstractions is a matter of *design* and
we should actively seek out better ones. Rails was a great example of
this, but has now plateaued. What’s next?
Humans have a limited amount of intellectual energy to spend during a
lifetime. Using good abstractions we can stand on the shoulders (and
efforts) of giants to reach further. We _do_ need to understand what
we are doing, and to some degree how, but not always (knowledge of
electronics to make a phone call?)
It is possible to take a school-marmish attitude to people who barely
seem to understand their tools, but I find this often leads to a
blindness amongst the more skilled as to the things that we take for
granted (pi) and that we might also benefit from being less clever,
less technically knowledgeable, i.e. we might benefit from systems
that are kinder to us (Rails vs its predecessors).
To be somewhat controversial: I want computers/software to improve to
the point that I can be more stupid in future, not less. This is an
independent axis, closely related to ease of use, which does not
impact on my desire for knowledge, skill, self-improvement,
actualisation or just plain geeky pleasure in knowing how something
works.