Embrace Your Inner Geek

gga

Why bother reading long posts about esoteric language features that
your language doesn’t provide, or even if it does, it’s not a good
idea to use too often?

Two and a half reasons really.

Understanding your language is important. This is not magic we’re
doing here. It’s engineering, one of the purest and most
mathematically oriented branches of engineering you’re likely to earn
money engaged in. When it’s magic you’re not supposed to know what’s
going on, that’s why it’s magic. You are supposed to understand
engineering though. Languages are the most complex pieces of computer
software. You understand complex things by exploring the
boundaries. What do they do well? Why don’t some things work at all?
How could they be better? All professional programmers should be able
to name several critical failings of the language they are currently
working in; if they don’t hate it all together.

Related to that, when programming it’s not enough to memorise the
class and function names from the whopping great big framework of the
week. You’ll generally have inferred something about how the framework
works underneath. You’ll know that before calling function A, you had
to instantiate class B first, unless you called function C first,
because that happens to create a B for you. Blah. Languages are the
same. Why does a variable declared inside a while loop
disappear outside? This isn’t voodoo. The goblins don’t eat
it. There’s a reason. The language is implemented in a certain way by
the compiler and runtime combination that causes these things to
happen. You should understand that relationship. Every thing we write
is built on some similar layer of abstraction. You need to
understand (at least
theoretically) how to implement the layer immediately beneath
you or you’ll end up wandering off into some abyss you didn’t even
know was there.

And finally, we’re professionals, dammit. Where’s the intellectual
curiosity? Where’s the ‘Hey, that’s cool. Now, how do I break it?’ Or,
‘I wonder what will happen if I do this…’ Or, ‘How does that work?’
And most basically of all, ‘Why?’ Geeks are supposed to be into that
sort of thing. We got beaten up in high school because we were
enthusiastic about things it wasn’t cool to be enthusiastic about. Now
there’s a lot of money to be had out of that enthusiasm. Let it out,
embrace your inner geek. Enjoy this amazing, complex, unique,
ever-changing world around us. Explore those things you’ve always felt
a connection to. If you’re in computing, there’s a good chance that’s
something mathematical. Most things in computing are… For me it was
languages. What’s it for you?

Oh, and last week at the pub we had a big discussion about category
theory, higher-order functions, contination passing web servers and
finishing up with the difference between a program that generates a
program and writing a custom compiler and interpreter. Geeky you may
say. Well, today I noticed a colleague reading up on continuations on
Wikipedia. *That's* what I'm talking about.