The other day I wrote a bit about how I got in to programming and the most common criticism was ‘but you are some kind of gray bearded guru, and I’m not so I can’t relate’. Pretending that there is no gray in my beard no longer fools anybody, however ‘gray beard’ usually does not refer to someone in their 40’s but to the likes of Postel, Woz and Ritchie. So, to be lumped in with them is flattering but really does not do justice to the gap between the gods and mere mortals like myself.
So, let me help you out of the dream that I’m some kind of guru real quick. Back then, when men were real men, mainframes were still made of gold and ‘edlin’ was considered an advanced programming tool the restrictions of the environment weeded out those that just wanted to get the job done in favor of those that simply don’t know when to quit or are too stupid to give up. Which of the two I am I’ll leave to your discretion.
It took me almost a full year just to learn BASIC how much more proof do you need that I’m nothing special on the programming ladder. I learn very slowly, agonizingly so, I’ve been trying to add ‘lisp’ to my set of tools for the last couple of years and I’ve made minimal headway. But that does not mean I’m about to give up, if its the last thing I’ll do, one day I’ll be able to say that I ‘grok’ lisp, you can take it to the bank. I’m not going to say if that is this year or 10 or 15 years from now. Think of me as obsessed by stuff that I can not understand - yet.
My buddy Henri and myself took the time to implement an assembler, not because we enjoyed doing that, but simply because we could barely afford the computers, forget about the tools. Favorite toy when I was a child was ‘lego’, constructing complicated stuff from simple components was a logical extension of that.
After you’ve spent a year with your plastic covered opcode card you start to memorize some of them, even if you try real hard not to, it simply can’t be helped. Believe me, hand assembly is real fun, especially if you find that your nice and position dependent code is going to have to be relocated. Again… Oh, how I hated that. When bootstrapping a system you always need to the tool that you’re building to make the tool. But we wanted that assembler more than we hated relocating code so we kept plugging away at it, eventually bootstrapping it from a crummy basic version just smart enough to assemble the first version of the assembler.
People shape the tools they use, but the tools also shape the people, and back then the ‘entry’ bar for being a programmer was so high that many people decided to forgo the field completely to find jobs that at least felt a bit more productive than putting together sand castles grain by painstaking grain. On the other hand, plenty of people got in to programming simply because they could not afford to wait for the IT department to solve their particular problem. Programmers - good ones! - against their own wish.
And that’s just the software side, a soldering iron and an oscilloscope are fortunately no longer pre-requisites for getting some hardware interfaced to your machine. Long live USB.
Looking back at that time, the restrictions of the environment are the biggest single factor in bringing out the best in the people that worked with computers back then. Think of your programming career as one endless code-golf competition trying to find a way to get both your data and your code in memory at the same time. If 16 or 32K is all you’ve got (you’ve got 32K? Wow!) then saving a few bytes here and there in a data structure or a section of code starts to add up really quickly. Mr. shoehorn was working over-time back then and not because he liked to, but because he had to.
You want to do 3D graphics on your 8 bit micro? Good luck. Even in wire-frame you’ll be hard put to get any speed at all unless you optimize until your fingers bleed. Bresenham ftw (if you’ve never heard of the Bresenham DDA you really should look up that gem of an algorithm). Oh, and graphics? You mean 128x64 ‘blocks’ on the screen in a pseudo text mode, or did you mean 256x192 in monochrome?
Don’t think for one minute that any of those guys wouldn’t have killed for the luxury of a step-through debugger with breakpoints, languages capable of proper abstraction, compilers and high speed interpreters, good editors, hardware accelerated graphics, multiple Gs of RAM, Terabytes of storage and so on. It just simply didn’t exist. So we worked with what we had and dreamed of a future without such restrictions. Fortunately we didn’t have to wait all that long.
Besides that, the mindset of those guys was that they probably would have paid to have access to a machine rather than to expect to be paid for it, I remember when I finally did land my coder job that I was amazed that people paid me for something that I would have gladly done for free. The first programmers that were also successful in business (most notably Bill Gates, Dan Bricklin, the Steves, Philippe Kahn, Peter Norton and so on) turned on the light and charted the path for a whole generation to come after them.
Not just because they were good at what they did (though some of them have a mixed reputation), also because they made their tools available for the rest of the world and in turn enabled a whole industry of self-employed programmers that in turn became businesses with employees, some of them quite large. These tools jump-started an entire industry.
And once those tools were available all those graybeards didn’t know how fast they could move away from their assemblers and line editors, it was like going from a bike to a race car. TurboPascal/TurboC for instance (by Borland) changed the landscape for PC software development dramatically.
Today the eco-system for a beginning programmer is not one that will teach you to deal with restricted environments. It’s more a dilemma of an excess of choices. You can build production grade code that runs fairly fast in interpreted languages, and nobody is going to be looking at you as though you just threw away 90% of your resources, in fact we’ll probably give you a raise and a pat on the back. The cost of hardware is insignificant compared to the cost of programmer time (in most cases, there are some exceptions), so people chose overwhelmingly to throw hardware at a problem instead of squeezing every last cycle of performance out of their CPU’s.
There are days when I wake up thinking that’s a pity. On those mornings I imagine a world in which everybody would be steeped in the graybeard lore of core memory and debugging by tapping the memory sockets on your board to make sure that your ‘random freeze’ is not related to a faulty connection between a chip and a socket pin, or inserting AM radios in to the guts of your computer as a stand-in debugger. (and to dream of a logic analyzer, the stuff of myths). And then I fire up my editor (to this day I can’t stand IDE’s so I try to avoid them) and go to work.
Creativity knows no limits in a restricted environment. But productivity does. That assembler that I referred to above had to be made before we could even begin to write other programs, the touch button Sony compact cassette recorder that I transformed in to a stand-in diskdrive (by looking at the tape-stuck opto-coupler you could get a good idea of where you were on the tape) wasn’t built because I thought it was a great idea but simply because I could not afford a drive, and if I could have I would have tossed it out the window with great pleasure. I still wake up sweating from nightmares of the bzzzzt-click, bzzzzt-click it would make when searching for a block on a tape that refused to be read back in. Back to square ‘1’.
Give me one of those modern SSDs and MySQL/Postgres or some other relational database any day of the week. Code golf is fun, but it is not a career, and it is not a way to be productive even though you can learn a lot and it might get you some cred from your peers.
So, if you had been born back then, and the computing bug had caught you, you’d be right there along with those ‘gray beards’ and you’d have done mighty deeds yourself. But not out of choice, mostly out of need. Now be happy and go back to C#, RoR, PHP, Java, Clojure or whatever floats your boat and get more done in one day than I managed to get done in a whole year in the 80’s. If you work for google and your program is going to be run in parallel on half a million nodes or so then optimization matters, but for most situations ‘good enough’ is when the program does its job in an acceptable time.
If you really want to get a feel for what it is like to work in a restricted environment I would suggest you get an arduino or some other really small device (PIC chips are probably even better) and join the graybeards for some of the ‘hardcore’ experience. Chances are that on the brink of insanity you’ll run back to modern computers and their tool-chains, or maybe you will find that you are one of those people that actually likes building sand castles out of individual grains. It’s a definite possibility.
You will learn more than you ever wanted to know about memory management and all the other ‘under the hood’ details of modern programming environments but you’ll be trading that for a decrease in productivity that you will probably find just as amazing as those tales of old.
Google, Facebook and all these other projects that pop up seemingly out of nowhere would have been decade long software projects and would probably be abandoned halfway through because of the gap in expressivity between the the scope of the problem and the tools available.
Being one of those old guys that enjoyed bit fiddling is a coincidence of history and a personality thing, it’s got nothing to do with being a ‘guru’ or not, anybody that put in the hours in an environment like that (even today) would be able to do this, you too. And the good part is that you no longer have to and you can still be a star.