I read an article (several, actually) some time back which indicated that, in effect, some people can learn to program and others really can’t.  That article has since been retracted, with indications by the original author that the research was flawed; but the odd thing is, it did mirror my personal experiences in the field.

For the record, the original article is a PDF entitled “The Camel has Two Humps” and you can find a copy here.  There is an article covering the retraction here.

I worked for a while in a programming shop with two other competent programmers and one who had somehow fooled both the school where he got his degree and the boss who hired him.  He just did not really understand how a computer program worked… I tried, I really did, to get through to him, but without much in the way of luck.  I wonder now if the things the test described in the original article is testing for (understanding program flow, for instance) are things I should have been trying to teach him… things that seemed so obvious to me that I doubt I ever talked about them.

But that’s not what I’m discussing today.  I want to talk a little bit about a different level of understanding.  I’ve been selling and servicing computers (with a little programming tossed in) since 1993, and I’ve noticed something.

If I hand a customer a flash drive and tell them the name of a folder on the drive which contains a file, many (something more than half, but I don’t have a more accurate count than that) will just look at me blankly.  These people, many of whom are otherwise quite smart (doctors, for instance, and lawyers, and other professionals) just do not understand file systems.  I’m a member of a camera club, and at our meetings we all bring pictures on flash drive to share; new members often say, “I’d love to bring in pictures, but I don’t know how to get them off of my memory cards” (or sometimes, “I’ve got pictures on my computer but I can’t get them onto a flash drive to bring”).

I frequently have to write down detailed instructions, a recipe of sorts, for how to move files around or to locate files or whatever when dealing with this population of users.  Often, my instructions, written at what I consider the most basic level, are still over their heads; I will find myself explaining steps that, in my mind, are very basic operations.  It’s like telling someone to open a door, only to find that they don’t know they have to turn the doorknob… and then discovering that the next time they encounter a door, they don’t remember how to do it.

Again, these are smart people, for the most part.  People you would never think would have a problem, until you try to help them do things with a computer.

Then there’s the other population, to whom I can give that flash drive and have them smile and say “No problem.”

Here’s the thing… I’ve never, and I mean ever, seen any of the people in the first group master file systems.  They write down their recipes and tape them to their monitors, or stick them in their center desk drawers, or under their keyboards, and that’s how they get by.  They just never really understand.  But the people in the second group, when I tell them what I’ve observed, frown and say, “What’s so hard about it?”  Those who understand file systems seem to have never had a problem with it.

So you have a group that never masters it, and a second group that never had a problem with it, and to be honest I’ve never met a person who straddled that line in any way.  Oh, the “got it” group members don’t necessarily know everything, but when I find a “got it” I know I can teach that person the bits he or she does not know (for instance, navigating network drives).  When I find a “don’t got it” I often despair of helping them at all.

Now take a trip with me, back in time a few thousand years.  Some smart cookie has invented writing, probably to keep track of business transactions if the modern world is any indication.  The first scribes learn to read and write, and to them it’s the best thing ever; but few have the need and opportunity to learn this new skill.

If you had dyslexia, but were not destined to be a scribe, how would you know?  Answer: you wouldn’t.  Dyslexia as a disorder could not exist without writing… it took the invention of writing for the disorder to “appear.”  When most people don’t read or write, dyslexia isn’t a thing.  But time and civilization moves on, and a few hundred years ago things began to change.  More people needed to read and write (and do mathematics, but without writing the business effects of math are somewhat limited), and with more need for literacy, those with a problem learning the skill would suddenly stand out.  It took us a few years to give a name to the problem, but it’s been with us for a long time I’m sure.

Now we have a new field of endeavor, a new technology which is important (some might say critical) to business and to our modern civilization.  This “disorder” of not being able (for whatever reason) to understand file systems could not have existed without computers.  I titled this post “dystechia,” constructing the word in a similar fashion to dyslexia, but I have to say I don’t care for the word.  Does not roll nicely off of the tongue.  But whatever it’s called, I believe this is the next such “disorder” to be identified.

It appears to me that it’s a issue with abstraction.  The “don’t got it’s” seem unable to form a mental model of how the file system works.  They can’t see a file in their mind as a thing, nor imagine folders within folders containing those objects.  But this is speculation… don’t take this as fact.  All I can say for sure is what I’ve seen… people, smart, educated people, struggling to comprehend something that was obvious to me the very first time I read it.  People I depend on in some cases (my own family doctor, now retired, was in this group).

Dystechia:  It’s the disorder of a new generation.

RemixOS: Honeymoon is over, Annulment granted

I tried, I really did, but I just can’t live with RemixOS.

At first, I was swayed by the beauty of it.  It’s so clean and neat and functional, and access to the Play Store means so many apps are available already.

But.  Try to set up printing.  Or certain other services.

Even when they work, you either (a) pay for them, or (b) look at ads.  Whereas, as a user of Ubuntu (or any other Linux distro, really) you get the same things for free with no ads.

The honeymoon is over, it seems.

The only thing I’ve found that it’s good for is a set-top box; the streaming apps for various video/TV services are really pretty nice, and having RemixOS on a computer connected to a TV set can be a good way to enjoy them.  But that’s it, the only use case that makes sense to me.

One Experience for Everything in Your Life???


I keep seeing these Microsoft ads trumpeting “One Experience” for all your computing needs, with Windows 8 on tablet, laptop, and desktop, and the similar-feeling Windows Phone on your phone.  This is their big theory, their almighty goal going forward.

It’s also why their product isn’t selling like they want it to.  It’s a bad theory.

Let’s move to a different machine space for a moment… vehicles.  I own a Pontiac Vibe, one of the last made before Pontiac closed down.  It’s a hatchback, reasonably fuel efficient, big enough to haul computers with a hatch large enough for a good-sized laser printer in a box.  Right now it has a substantial amount of inventory in it, parts that I might need when fixing computers.

I also own a Yamaha TW-200 motorcycle.  It’s amazing fun to ride, goes anywhere, fits the most screwed-up parking space and gets 70 MPG.  Then there’s my Ford F-150 pickup.  It has 4 wheel drive, goes almost anywhere, is comfortable and hauls a lot of stuff.

All three vehicles will haul my butt to work.  The bike is by far the most fun, but it’s only practical to ride it to work on short to moderate length trips (too small for the Interstate), and then only when I don’t have to haul more stuff than will fit in a backpack.  The Vibe is my “default” work vehicle, but on icy roads or on gravel it’s a bit of a hockey puck; the low-rolling-resistance tires don’t stick worth a darn to any surface other than clean dry pavement.  When the roads are snow covered or icy, the only choice is the F-150.  It’s also the only choice when I go out to buy furniture or home improvement materials (lumber, plywood, sheetrock, etc.).

My point is, they don’t have the same experience.  The truck is sort of like the car, but the motorcycle, now, that is a totally different experience.  Handlebars, hand throttle, hand clutch, foot shifter, separate front and rear brake, the former at my right hand and the latter at my right foot.  But that’s just the basics you need to get it rolling; riding a motorcycle is much different than driving a car.  You lean into corners, so the G forces are distributed differently.  There’s no cage of glass and steel around  you… you’re in the world, not separated from it.  In plainer words, it feels different.

I think this analogy applies perfectly to the Windows 8 situation.  Microsoft saw the rise of the tablet, a lightweight mobile device that’s fun to use but more limited, and decided that desktop and laptop computers ought to work the same way.  A tablet has a user interface designed for fingers, rather than one designed for keyboard and mouse.  It feels different.

A big part of Microsoft’s theory is that we are too stupid to work technology unless the user interface is the same everywhere.  I consider myself reasonably proficient both at driving a car and riding a motorcycle, and they have very different user interfaces.  Many people proficiently do both.  It’s not that hard.

So what Microsoft did is like putting handlebars, a hand throttle, separate brakes, hand clutch and foot shifter in a car or pickup.  It makes absolutely no sense.  Oh, sure, there would be a few people who climbed into that pickup truck with a set of handlebars installed and say “Cool, this is what I’ve always wanted!”  But it would be a flop in the marketplace.

The key difference here is that, for the last two decades, almost all “small computer” work has been done on computers running a Microsoft operating system.  So this isn’t like Ford putting handlebars on a truck… it’s more like if almost all auto makers changed to handlebars overnight, and you had to buy from lesser-known brands with limited parts and service availability to get a steering wheel.

If that happened, though, it would only be a matter of time before those lesser-known brands gained market share substantially.  Will we see that in the computer industry?  I’d like to hope so.

Why I don’t like the “Cloud”

This question comes up a lot with my customers… “should I put my data in the cloud?”  When it does, I recount the following story:

Years ago when I started working with computers, all the local school districts had software from the same company.  We’ll call them OldCo (obviously not their real name) for the purposes of this discussion.  OldCo also sold software targeted at city governments, and I had a few city customers using some of those products.

OldCo’s software was all DOS based.  They started a project to convert their school accounting and student records programs to Windows.  Just as they were about to begin beta testing of their Windows accounting software, the database vendor they were using went out of business.

So they couldn’t buy the necessary licenses to resell to their customers.

They started all over at that point, essentially scrapping the entire project, and switched to an entirely Microsoft-oriented codebase, using SQL server as their backend.  This put them way behind their planned deployment schedule, not to mention costing them a bunch of money.

Along came another company, which we’ll call OSC (Other Software Company).  They were another major player in the school software business, and their software supported Windows already.  OSC bought out OldCo to get their customer base (a sound strategy I’m sure), and pushed all those schools into switching to their student records software.  They didn’t have a school accounting program, but that was okay with them… they kept the OldCo staffers who understood that program and continued to maintain and sell it.

Who’s missing here?  The city government customers.  OSC notified them that they would not be supporting or selling OldCo city government software any more, and no, they wouldn’t really help anyone extract their data from it either.

Those city government customers were cut off from support, but at least they could keep using the programs.  If their data was stored in someone else’s cloud, and that someone else closed their service for any reason, where would they be then?

This is why I don’t like the Cloud.

I am a Rockstar Programmer?

There has been a lot of talk lately about the “rockstar programmer” (aka the “10x” programmer); specifically, whether or not such a creature exists.  For instance, on Hacker News today I saw Scott Hanselman’s article The Myth of the Rockstar Programmer, which is very critical of the idea.

I think it’s more complicated than that.  You see, I am a “10x programmer.”


I run a one-man programming operation as a sort of side-business; I’ve been writing application software for vertical (mostly local government) customers for many years, in a variety of languages.  Most recently I’ve been focusing on web-based apps in Python (and of course, Javascript).  I’ve spent many an hour working on these programs, and I can tell you that most of the time I’d call my productivity average.

But a couple of years ago, near the beginning of my love affair with Python, I wrote an application for handling city property taxes for a small town.  My understanding when they contracted the work was that they just wanted help with some Excel files… but it was more than that.  They really needed a program similar to the ones I had written for several county-level customers.

So in the course of about five hours of wild-eyed hacking, I wrote it.  I repurposed a few small components from a personal project, but even so most of the code was new, and surprisingly it works pretty well.  Since then, two other small towns have acquired versions of the program, largely cloned from that original program, and in each case it took me more time to customize the program for them than it did to write it in the first place.

I still don’t know how I did that.  Zero testing.  Solving problems I was uncertain about not by research, but by going around, over, or under them.  But it worked great for the original customer for the entire first year, and has required only another hour here or there in maintenance, mostly adding features.

It’s not the only time I ever did that.  I have other programs, or parts of programs, written in the same way, usually under time pressure but sometimes just because I felt like it.  If I worked more consistently in software development (full time, as opposed to basically part time now), I might do that sort of production more often… but I really don’t know.

It’s a mystery to me.

Worst Time Ever to Buy a Computer

This is the worst time in many, many years to buy a new computer at retail, and it’s all Microsoft’s fault.  Windows 8 is, in my opinion, the worst new version of Windows ever.

There are many ways to define “worst” so let me start by explaining what I mean by it.  I sell computers mainly to people who know that they will need professional assistance.  They trust me to sell them what they need to do their work, and to fix their computers when they go wrong.  So my definition of a “good” operating system is one that generates fewer unhappy phone calls.

Windows 95 and 98 were prone to lockups and blue screens; Windows XP made those problems better, and added a lot of nice functionality.  It’s no accident that Windows XP right now commands just over 38% of the desktop operating system market, according to netmarketshare.com’s March 2013 statistics; it’s the #2 version of Windows, and the #2 desktop operating system overall.  It was pretty good, obviously.

Windows Vista came along, and we all hated it.  It felt slow and clunky, and had no real advantages over XP for most business and home users.  But Windows 7 appeared and redeemed the name; it had much the same user interface as Vista, but didn’t feel clunky anymore.

Throughout all that, the PC world was dominated by a desktop full of icons (that the savvy user could customize to suit his or her needs), a taskbar (at the bottom, unless you moved it, but always on the screen) and a Start menu with all your application programs on it.  From Windows 95 to Windows 7, you could get your work done the same way.  You didn’t have to learn something all new.

Now we have Windows 8.  The desktop full of icons is hidden, relegated to a sort of backroom like a second-class citizen.  In its proper place we now find a screen full of boxes, many of them animated, like a bunch of billboards screaming for our attention.  Gone is that reassuring Start button with all your programs neatly organized where you can find them.  Sure, experienced users made their own icons, on the Desktop or the top of the Start Menu or even in the Quick Launch area on the taskbar; but sometimes you need that program you rarely use, and you know it’s there, on the Start Menu, when you need it.

My daughter is an experienced computer user.  At school, most of the computers run Windows XP.  At home we run various flavors of Ubuntu Linux.  She also has experience with Windows 7 and Android.  The first time she saw Windows 8 (on a demo computer at a retail store), she couldn’t figure out how to start Microsoft Paint.

Sounds easy, right?  So it’s not on the new Start screen.  You figure out how to scroll the screen sideways, but you still can’t find it.  Then you notice one of the big rectangular buttons says Desktop, so you click it.  For a moment, you think you’re in Windows 7 again… taskbar at the bottom, icons on the screen, some pleasant wallpaper behind it all.  But… there’s no Start button.

Eventually you figure out how to get back to the Start screen (there are several ways, none of them obvious… but the Windows key on the keyboard will do it for you if you get stuck).  Now what?

Move the mouse pointer into the unmarked and unremarkable upper-right corner of the screen and float there a moment, and a bar of icons will slide out from the right side.  One of them is a magnifying glass.  Click that, and type in (yes, type in) the word “Paint.”

Finally, you can draw something.

Now imagine this from my perspective.  Much of the user interface is hidden, or obscure, like that unmarked corner of the screen (I’m told the lower-right corner also works, by the way).  If I sell that to my customers, I’ll get a lot of those unhappy phone calls.

Fortunately, I can still get Windows 7 Professional on new computers, by taking advantage of the “downgrade privilege.”  Any reseller who does business-grade computers can do that.  But just try to walk in to your local electronics superstore and get Windows 7 on a new computer.  If they can do it, it will be at a premium.

You may think, hey, I’m kind of technical, maybe I can buy that discount laptop and then install my old copy of Windows XP on it.  Hold your horses.  Ignoring the legal issues (and I’m not a lawyer so I won’t comment on them), you’re going to have a hard time with that.  Windows 8 uses and requires a new “secure boot” feature which must be built in to your computer; this feature is called UEFI.  Some new computers, including a large number of lower-priced laptops, will only boot a UEFI-enabled operating system, and Windows XP (and Vista) is not able to boot on such a computer. Even if you can turn off the UEFI feature on your new computer, you may find that drivers needed for the computer to run properly are not available for XP (since the manufacturer never intended you to downgrade the operating system).

So what am I saying?

If you’re buying a new computer, and cost is an issue, please, try out a Windows 8 computer before you buy one.  Make sure you’re ready for it, and that it will do the things you need it to do.  If you can afford a little more expense, find a reseller who can set you up with a business-grade computer with Windows 7 Professional; I’m almost certain you’ll like it better than Windows 8.

Or of course, you can do what I do.  I sell Windows-based computers, but I run Linux on my personal and business machines; I have just one computer running Windows XP on which we do our accounting.  There are still issues with finding a computer that is not so crippled by UEFI as to prevent installing Linux, but hey, you get to save the price of the operating system (since Linux is free).

The PC industry is in a decline, they tell me, with sales down from last year 14% (according to IDC as reported by the Wall Street Journal).  While many blame the rise of tablets and smartphones, I believe the real culprit is Windows 8.  Flashy TV ads don’t make up for the fact Windows 8 is harder to learn and harder to use for the average person.

Putting Your Foot Down

I was going down the highway on my motorcycle the other day, thinking about a project I’m doing for a customer.  We just went live with it, and one of the first things I did (after transferring data from their old program to the new one) was to disable the data reload script.  I wrote the script for my convenience; it clears the tables, then loads them again from the export files I was using to provide sample data.  Obviously this would be bad, applied to the production database.

Then I found myself thinking about how often we visit the edge of disaster.  After all, here I was, going down a two-lane road on a motorcycle at 55 MPH.  Everything was going quite well… but what would happen if I put a foot down?

Well, it would hurt, that’s what.  More than likely I’d break or tear something I might need later… it’s even conceivable that I might wreck my bike and kill myself.

So sure, I could be driving a car, and putting my foot down wouldn’t be a problem.  Doesn’t mean I couldn’t kill myself just as effectively by doing something insanely stupid but very easy to do.  Like run off the road into a light pole.

At least, on the computer, I could disable the reload script.  This wouldn’t prevent me from accidentally typing “delete from important_table” in the MySQL user interface.  MySQL does have a “safe mode” where it needs a WHERE clause before it will run such a query.  But you have to remember to invoke it with the right option.

Do I have a point?  I’m not sure.  It’s just that we skate so close to various sorts of disasters all the time, and rarely think about the consequences until it’s too late.

Like the man in the uniform used to say, be careful out there.

Offensive Programming

Way back in the good ole days when I went to college to learn programming, one of the things I was taught was to program defensively.  I was to check for error returns (remember, this was before exception handling became the rule, not the, um, exception) and try to deal with them appropriately.  When your code is full of error checking, it is, naturally, longer; it’s also harder to read, in my opinion.

But like I said, it was a long time ago.  I learned on BASIC when you had to use line numbers, and then I learned Pascal and FORTRAN and PL/1 (the first on Apple IIe hardware, the other two on an IBM mainframe running MUSIC of all things).  Meanwhile, I took a part-time job programming a Xenix system, and while the main work was in a proprietary system called Profile 16, I took the opportunity to learn K&R C.

Perhaps it was C where I learned my bad habits.  You see sample code in books bereft of error handling (since it’s much clearer to leave it out if it’s not actually needed for the example) and you start writing code like that.  At least, I did.  I mostly checked for error returns on file opening, since that’s when it seemed most likely to be needed.  But my code worked, at least, after I got the obvious bugs out.  Fortunately for me, very little of that code is still in service anywhere… maintaining it would be a bear.

I kind of fell out of programming for a while, as I started a business selling and servicing computers (yes, I’m a programmer AND a technician).  When I finally accepted some work, it was in Visual Basic (well, VBA actually), and I fell back into my old bad habits.

But it was different, this time.  VBA gave me useful error messages when my program failed, even going so far as to drop me into the debugger.  I trained my users to make appropriate notes if an error message came up, and then I went back and either fixed the code or added the appropriate error handling.  Later I had the joy (that’s not sarcasm, it really was joy) of learning Python, and again, useful error messages; in Python, it turned out to be very easy to log the errors for later review, which is wonderful.

Lately, I’ve noticed how much more productive this “bad” habit has turned out to be.  My users are all pretty happy, as far as I can tell anyway, and in two cases I’ve had nice compliments from outsiders who have experienced these programs.  Oh, they aren’t sexy or anything… just programs that do work that needs doing.

I’m calling my method offensive programming.  I charge into the code and create, well, whatever is needed, and except for the most obvious cases, I don’t bother trying to figure out what might go wrong in advance.  Instead, I deal with the problems when they arise.

More to the point, I’ve come to the conclusion that, unless you’re designing really critical things (air traffic control software, medical software, etc.), defensive programming is insane.  Your goal is to figure out what might go wrong before it ever does, and then deal with it in advance.  But programs (and the computers they run on) have more failure modes than anything else humanity has ever created.  Trying to anticipate them all is a waste of time, as far as I’m concerned, unless of course your software holds human lives in its virtual hands.