Abstraction and Training Wheels
by Mike Levin SEO & Datamaster, 12/16/2011
That one virtuous way of which I speak of learning and mastering technology happens to be embracing Unix-like operating systems (including Linux), then stripping out as much as possible—including the GUI. My goal is teaching you the now-standard “plumbing” of most information systems on the planet, from the majority of supercomputers to the majority oh home wireless routers.
Along with Linux, I’m going to teach you Python, what I feel is the best programming language for learning, becoming “powerful” quickly, and preparing you for an even deeper dive into Unix and standard C (if you choose to go that route). I personally don’t yet know standard C, and you will be along for the ride as I learn, so this is a story of personal growth as well.
I choose Python first, because it is a useful shortcut. All technology is shortcuts made possible by standing on the shoulder of giants. However, it is possible to stand on the wrong shoulders and and come toppling down. To meet our objective of acquiring the modern-day equivalent of super-powers, we must choose the right shoulders to stand on, which usually means the fewest and most successful—not necessarily the best. This tiny stack then becomes the starting-point for our own new endeavors.
Getting you to that starting-point, and bestowing upon you the ability to do competent technical implementation work yourself is becoming my mission. At forty, my great life’s work continues to elude me, but I see this part of it so clearly. I do not need a technical co-founder, because I clawed my way up to not needing one. If you are smart and curious, neither do you.
But the way is unclear, and riddled with traps. Vendors are trying to rope you in and make you dependent on their products. Every approach (including my own) seems to have its zealots, and the deluge of information that’s one Google-search away appears to be in contradiction with itself. I have impaled myself on traps repeatedly over the years, always resulting in the giant reset button getting pressed on my endeavors. This site is the result of a concerted effort to finally “get it right”.
And even my Unixy short-stack approach has its downsides. You won’t be writing video-games or iPhone apps using my approach, although you will learn useful things for that world. My approach is considerably less sexy and doesn’t have the same get-rich-quick appeal. But it will give you a way to make the majority of hardware out there carry out your orders in complex ways limited only by your imagination.
I’m offering basic control—entry-level literacy in the world of machines, facilitated by a way to write your code and place to execute your code that won’t go away over the years. To get that, we are permitting ourselves to walk away from much of the power modern hardware offers. Abstraction layers make this possible. It is possible to layer up so many abstraction layers seeking future-proofing that anything you write is slow as molasses no matter how well you code it. Steve Jobs hated that approach, and it was part of his argument against Flash.
At the opposite end of the spectrum is a practice called “banging on the metal”—an equally bad trap, which while yielding awesome performance, ties your code to that one particular hardware platform, making software ports very difficult. You get that a lot in game platforms, because the hardware is a lot more stable than PCs. The goal is to reach a happy medium, and this is usually done through application programming interfaces (APIs) in which you nearly bang on the metal, because the abstraction is highly optimized.
We are leaning towards the tower-of-abstraction end of the spectrum with Levinux, and here’s why. You can seamlessly flow your code and know-how onto highly optimized Unix/Linux installations and get blazing speed performance. The biggest thing we’re walking away from is graphics, which totally colors the type of development work we’re doing here—usually termed “server” or “service”… or perhaps Web. We’re not doing Apps or video games. If that’s were your particular interests are, this may not be the educational track for you.
But we will in fact be optimizing. That’s part of why we chose Python. Python is API-compatible with C, which is perhaps the most optimizable of languages, as the language most other languages and operating systems are written in. C was written by Denis Ritchie, a co-creator of Unix, as the language to write Unix in and port highly optimized code between hardware.
Unix and C together represent a very powerful continent of the tech world, and mastering them is a noble goal, but rather unachievable for the non-career programmer. There’s just too much to learn and do for results that seem out-of-proportion to the effort. That’s why languages like Python are created. But unlike other languages, Python’s creator, Guido van Rossum, decided to deliberately target the sensibilities and standards of the Unix and C community while still making it an excellent beginner’s language.
There is tons more to say about Python, which I will put into another article. But keep in mind that although we’re using tons of abstraction layers for the virtual machine and a language for which performance is not a strong point, we are none-the-less starting on a path that will let us rip out the abstraction layers as you learn more, and get the maximum level of performance your hardware has to offer. Don’t hate the training wheels. They are wisely chosen.