While working on my self-described “Mother of All Learning” projects, or MoAL, for short, I often find myself exploring new categories of software, in areas that are not typically explored by most developers in the field. The reason for this is because, I think, most programming courses or fields typically focus on a narrow band of information – a sliver of the spectrum – whereas this project is specifically designed to cut across the entire spectrum; from data structures to networking, to artificial intelligence to hardware and electrical engineering, I’ve spent many hours just in the organization and hierarchy alone – the outcome though, is an incredibly detailed list of computer science topics (and more) and the relationships between each one.
Now, what does this have to do with exploratory programming? Well, while working on this project, I find myself looking for interesting analogues or specific uses to apply each concept to. Sometimes the ideas will be simple, such as a “print queue” to understand the notion of a queue data structure, or an e-commerce system to understand many object-oriented design patterns, but even then, I’m not all that creative. So here’s one idea I’ve come up with: books and programming.
It’s really simple; you find a science fiction book you want to read (or really any fiction, but SF tends to be the easiest to find an analogue to), and then pick a topic to study. Then you marry the two topics, using one to support the other, from a learning perspective.
Perhaps an example will help clear it up: Dune + Operating Systems + Hivemind
Huh? Okay, let me explain…
For me, I am studying a few different topics right now, but one of them might be operating systems, specifically the access controls between various components. For example, operating systems pretty much all have the notion of a “protection ring”, which specifies boundaries for what a user can do, and what the user cannot do. From my sparse knowledge, this is typically exemplified in a UNIX system as a kernel/application relationship, where the kernel acts as an intermediary between the hardware and applications, applications being what the user has access to.
As for the book portion, I’m currently reading a Dune book called “The Machine Crusade”. It chronicles the battle between the “Thinking Machines” and humankind. The part specific to this are the various robot forces; the overmind “Omnius”, the supreme leaders, called Cymeks (specifically one named Agammenmon), and the robot leader named Erasmus.
What struck a chord with me was the notion of having different layers of mental capacity and thinking. It appears the machines have an overall supreme intelligence (Omnius), and then their own levels of personal intellect. This is essentially another word for the idea of a hivemind, or collective intelligence, specifically one that can be shared. If you’re familiar with the Halo book series, the group known as the “Forerunners” have something like this, called the “Mantle”. It is not-so-uncommon trope in many Sci-Fi books and movies.
Putting it together
Okay, imaging those two things in conjunction, an idea popped into my head. “What if you could use the notions of networking/distributed computing, and operating system principles to design a very primitive architecture that could represent global and singular machine intelligence?” While this may not be a typical thought for most people, this concept popped into my head.
So, there you have it – books and programming, the two intertwined. This post isn’t really a post about a specific implementation – I would instead have you indulge many of your brain sections in this activity: your creative, your imaginative, your critical – have fun, and go nuts!