Programming as Hotdog vending

street_vendor

Yesterday while talking with a colleague, I was trying to get across the idea the most ‘programmers’ don’t understand what goes on inside a computer. And his response was, “Does it matter any more?” and while it took me back, I had to respond, “No!” After sleeping on it, I came to a revelation of sorts.

Current IT is equivalent to being a Hot-dog vendor on the street.

And while we IT/CS folk might try and elevate our profession to that status of demigod status we are merely vendors of what the computer can DO!‘ We don’t create the computer, we splash condiments on the hot-dog, and sell it as computing. We don’t even make the condiments anymore, call them libraries, functions written by gnomes in dark caves. And don’t even mention the buns, the dressing ,the cover, beyond us.

In the early days of computing, the common question was, what do I use my computer for. And the first answer often was, you could put your cooking recipes in it. Creating the first cookbook you needed to plugin. The computer is still the same, just that the cookbook has gotten more sophisticated.

I have harped for years that the ‘hardware’ of computing has crippled real advances in computing, more and more systems are opting for generic in their selection of Hot-dog instead, choosing to dress it up with more and intriguing spices and toppings, things like AI and Neural Networks. While these latter are more sophisticated and sexy, they are more or less toppings on the same Hot-dog.

MicroSoft Weasel Words

The boys at the office have been experimenting with Redis at the office however the server they were using was a Windows Server, and therefore the Redis database was running on Windows. So I took a look at the ‘release notes’ from Microsoft and their ‘Lawyer Speak’ was all over it.

MSOpenTechâ„¢ Redis on Windows

We strive to have a stable, functionally equivalent and comparably performing version of Redis on Windows. We have achieved performance nearly identical to the POSIX version running head-to-head on identical hardware across the network. Aside from feature differences that help Redis take advantage of the Windows infrastructure, our version of Redis should work in most situations with the identical setup and configuration that one would use on a POSIX operating system.

Having seen this type of language from Microsoft before, in ‘Open’ products like LDAP and ODBC where Microsoft would alter the implementation specification standards to suit themselves, I am wholly obliged to translate their opening paragraph into English for those who don’t ‘get it’. The paragraph should read as follows:

Microsoft’s Proprietary version of Redis for Windows
We have not managed to achieve a stable, functional equivalent or comparably performing version of Redis on Windows yet. We have managed to produce performance almost as good as a POSIX version running head-to-head on identically throttled networks connections. Aside from the changes we had to make to enable it to work within a Windows infrastructure, our version of Redis (using a Microsoft infrastructure) could almost perform using a setup and configuration that looks like a Posix operating system.

Reads a bit differently doesn’t it.

I have warned the developers here not to implement a production system based upon Microsoft’s version of Redis. I do not have anything against Redis, just the dark hole MS expects developers to jump into again.

Language of computing

I was reminded this Christmas Holiday season that computers do not ‘know‘ any human language, only binary, and that it takes humans to provide the translation from the machine to something human readable. And while most computer programing languages are ‘English’ like, they need not have to be in the English Language. It’s just what’s what happened first, and could be changed into another language at anytime.

This came to me in an inspired way, by listening to Carols, where non-native speakers were singing in latin, and other non-english speakers were singing in English, or German, or French. That you can sing in a language, and not know how to speak in it.

I suspect that is the same method that most non-english speakers program computers in ‘english like’ programing languages. By layering another translation over the programming, or like in singing, which uses another part of the brain, different from the part that provides language skills, another part of the brain is used to converse with computers. Thus making the point that people who program, do think with altered brains.

Learning Computers and Computing

I have been doing research into the nature of computers and I’ve been participating with with the phenomena know as Coderdojo. As part of my research I’ve been relearning Assembly language on several different architectures, and I’ve been experimenting with such things a the ELF Membership Card which I soldered myself and is currently running in front of me, along with a Arduino Uno. These both represent small microprocessor, very like the ones I personally started out on.

My first computer was an Apple II+ with a Motorola 6502 processor. But in any case, this act of relearning what a computer really is has made me aware of the lack of any real education ‘tools’ like I had. The sensation that is the Raspberry-Pi is fast becoming the CPU-du-jour of the developers, and as such may develop into a great educational tool. But, and there is always a but, it doesn’t stand on it’s own.

The group who developed the Pi have themselves noted that this is a developmental prototype, and that it needs to be distilled into a real educational product. It first need a keyboard, mouse, display a SD-Memory card and a power supply, to even turn it on. To make it useful as a net-workable it also needs a connection to hardwired Ethernet. It needs to have software preloaded onto the SD-Memory to boot properly. These are Geek requirements, anyone who can make this work, ALREADY has working knowledge and equipment, call it infrastructure, to make this work. What is missing in this is a standalone environment that is self contained and independent of both other systems, and other foreknowledge of computing.

My Apple II came with a keyboard, memory, built-in BASIC programing language, and displayed it’s output into a common Television, and recorded and loaded programs from a simple cassette player. All these elements were basic, everyday items in my household, and it would plug into the mains power directly, and display on a TV. It started up using Applesoft BASIC language and displayed on the screen everything I typed.

The Rasberry-Pi now needs this type of infrastructure. And while on this subject, and not to stir a pot, comes a language issue. The apple I learned on came with BASIC and in fact I still have a fondness for BASIC. The current arguments in the ‘Programming Education’ discussions are that a language like BASIC teaches BAD programming practice. Be in old, I had to remember the motivations of BASIC and was more enlightened to connect this with my reeducation about Assembly language. That was the first reason for BASIC! BASIC is and was engineered to, more or less, follow the structure of the instruction set of the CPU itself. Where language snobs see bad ‘GOTO’s in BASIC, I see machine language Conditional and unconditional ‘Branch’ instructions. Where I see a BASIC with line numbers (not all BASICs have them) I see ‘Linear’ machine instructions.

One element of the Raspberry-Pi that also misses the mark, is the nature of ‘abstraction’ while I admire the Python of the Pi, and the ‘C’ like language of the Arduino, what is missing is the distance between the learner programmer and the actual machine. It may even be a serious problem as the machine begins to look like magic, and that it can be made to do anything.

The programming of the RCA 1802 chip contained in the ELF Membership Card demonstrated what the creator of the card referred to as ‘Bare metal programing’. A simple program that I used to test the ELF with consisted of 12, 8 Bit instructions, writing (essentially) the same program for the Arduino required downloading of 998 8 Bit instructions (not including the 512 Bytes of the boot loader). To be sure there were probably a lot of libraries included in that download. Helpful, but masking the actual operations of the CPU from any real educational product. Just like that Arduino, the Raspberry-Pi will mask the CPU, and the associated hardware by a boot loader (BIOS), followed by a full, though striped to minimum, Linux kernel, and a GUI in the form of LXDE X-Windows, followed by Python language. That’s a lot of abstraction!

All these things may be irrelevant in the long term, one thing may lead to stimulation to explore the ‘Bare Metal’ hardware of the Raspberry-Pi while allowing a positive feedback with easy ‘wins’ on top of the abstraction provided. Still I believe we are missing an opportunity to produce the next generation of computer wizards. I also believe that someone needs to integrate the Rasberry-Pi into a OLPC type of device.