A-ha(ck)! moments

Ʌ: Thoughts

A-ha(ck)! moments

A great deal of developers/hackers I know personally mentioned having that one experience when they realized the full potential of a programmable computer for the first time.

For me, it was when I was at a summer camp for geeky kids, where the organizers were coincidentally linux afficinados, so a couple of the activities included using Ubuntu - and there I saw the power of the command line, shell scripting and subsequently programming for the first time, and it absolutely blew my little 12-year old mind.1

Seeing that I can create things, and not just use the computer was really as life-changing as it gets.

I made little toy scripts, a dialogue with selectable options, a guessing game, a prank script that repeatedly opened your CD-drive, stuff like that - obviously nothing substantial, but the seed was there - I can now make things on the computer.

In a way, I can see a similar sentiment expressed in the Hacker Manifesto:

I made a discovery today. I found a computer. Wait a second, this is cool. It does what I want it to. If it makes a mistake, it's because I screwed it up. Not because it doesn't like me... Or feels threatened by me... Or thinks I'm a smart ass... Or doesn't like teaching and shouldn't be here...

Of course, Mentor here has a decidedly “outcast found his refuge” slant which I don’t really identify with, but I feel that the underlying sense of freedom and empowerment is more or less the same.

Other such rites of passage

I once heard that “every programmer has at one point coded a mandelbrot set visualization” - which seemed to me exaggerated at first, but it really is possible to code within the span of a couple minutes with a basic knowledge of programming.

Similarly, in my experience programming Conway’s Game of Life is one of such moments; I still recall the trials and tribulations I had coding it in my programming 101 class, and the result that came out of it.

What about it?

I don’t think it’s totally universal, or even necessary for one to become a programmer.

But at the same time, it makes me wonder how many people are missing out because of the current state of the software ecosystem.

Much ink has been spilled about end-user programming 🌐, which, if fully realized, would truly bring about a computer revolution. It’s more than worth pursuing, but at present, it’s still rather distant.

In its absence, worry about the stepping stones to programming - the shell scripts, HyperCards 🌐, objects in Roblox (I know, I know)… They’re either dead or falling out of fashion, new ones are getting increasingly rare, and although the web has certainly lowered the barrier of putting together a proof of concept of basically anything, setting up a programming environment on a modern computer is hopelessly opaque and ultimately magical (in the bad sense of the word).

Nowadays, the primary way most people who set out to learn to code is through web development.

This, at the minimum, means learning three different languages with wildly separate philosophies and use-cases! If anything, this complicates the path to having such an a-ha moment, since only one of them (JavaScript) is actually a programming language, and the other two are essentially vestiges of a hypertext model that no longer fully fits the desired use-case. (Even worse, they might run into a JavaScript framework, and I suppose I don’t need to explain how far that is removed from “essential” programming.)

Not to mention, the web app needs to be hosted somewhere, and since setting up a web server is an adventure on its own, most likely you’re going to learn how to interact with a cloud provider, which is the final nail in the coffin to feeling you’re actually in control of the machine at your desk.

We need more ways to “stumble” upon programming, to experience how vast and accessible the potential of a computer is, and I’m afraid that we’re losing them.

  1. Bottom line is: Encouraging kids totally works!