I have been in this industry for a long time. Not quite punch card long, but long enough to have experienced the Personal Computer revolution hands on. I have fond memories of typing programs out of magazines in a TRS-80 Model I in a small room at the High School. Larry O’Brien mentioned that he sold his first program at age 16. I must admit to feeling somewhat green with envy. However, on a recent family visit, I was reminded that I was also 15 when I did my first consulting gig. However, the best part is that my program is still in daily use! The original code is over 20 years old! of course, it has morphed and has been extended, but how many people can say that their code is still in use after 20 years? I definitely got a kick out of that.
What is this mysterious application? A veterinary practice manager. Keeps track of patients, immunization reminders, electronic record keeping & billings. All originally done in dBase III. It’s been by far my most successful project. All done in the span of 1 week, at the vet’s kitchen table, using what now is called agile methods. Hmm…I see now that it’s been downhill ever since! :-)
What is you oldest living program?

Thanks to Chris Sells for pointing out the group Richter Scales and their song Here comes Another bubble. While the song is funny as everything, I believe many a tech worker can identify with the themes. Heck, it even covers ageism, my favorite angst inducing subject.
Go have a listen!

While perusing the TIOBE report, I noticed REXX made an appearance. This brought back memories of being a co-op student in the early ’90s. My employer, Bell Northern Research (aka BNR), was the research arm of Northern Telecom. They were eventually fated to be absorbed and re-branded at Nortel. This was a similar setup to Bell Labs & Lucent. I was in one of the many groups working on their central office switch, the DMS-100. The code base was over 10 million lines of code, which back in the day was gargantuan. Builds would occur on mainframes, as those were the only computers fast enough to compile the code in a reasonable amount of time. A full build would take around 19 hours. Woe be upon the unsuspecting soul whose checkin broke the build. You could expect a call at 3AM telling you to get your behind at the office and fix the problem. As a result, everyone was paranoid about making changes.

One of the last thing I did in my co-op term, my crowning & lasting achievement so to speak, was to remove an unused local variable from a function. Removing 2 statements, a declaration and an assignment, was all I had to do. It took the better part of a week. First, we had to run a cross-reference on the entire code base, to make sure the local variable was not used anywhere else. Once this was done, I excised the offending offals from the code, a 5-minute procedure. Someone (not the lowly co-op student) performed a delta build on the module itself to insure it compiled. Finally, after much heming & hawing, the manager gave the go ahead for the checkin, another 5 minute operation.

That night, around 3AM, while the mainframe’s hard drives were spinning, transforming the chunks of code info a Motorola 68K binary executable, the unthinkable happened: nothing.

My mighty change didn’t cause the end of the world build to fail and everyone slept through the night. We later learned that this particular change had no effect on the actual executable. The compiler was optimizing the unused variable away.

This experience thought me a few valuable lessons: I was not going to work on the DMS-100 when I graduated. I was not going to work on mainframe computers. PROTEL (the in-house programming language) was not what I wanted to program in. BNR had tons of other development programs, some of which dealt with those cool Sun workstations… no nightmares of late night build failures there!

Anyone else ever experience build dread?

Recently, I wanted to purchase a new alarm. We have a perfectly functional alarm clock. One of the original Sony Dream Machine. A white cube with a fairly simple interface:
On the front:
– LED display for the time
– A slider bar to display the radio frequency
On the top:
– A slider switch to select the alarm type (off, radio, buzzer, radio & buzzer)
– A large Snooze button
– A small sleep button – turns on the radio for 1 hour
– a small alarm reset button to turn off the alarm
On the side:
– A knob to control the radio volume
– another knob to select the radio frequency
On the back:
– A slider switch for time adjustment (either alarm or clock)
– 2 push button switches: one for hour, one for minute

There are 9 controls on this thing, but notice how all the functions are segregated to a specific area: Information on the front, alarm on top, radio on the side and time adjustments on the back. Even with this simple design, I would sometime turn on the radio (press the sleep button), and somehow have a difficult time turning it off. Pressing the alarm reset button would not work – even though it works if the alarm function turns on the radio. I would have to slide the alarm switch to turn the blasted thing off. Maybe there is another way, but I couldn’t figure it out.

We (meaning I) needed a new alarm clock for a specific function: supporting 2 different alarm times. While at it, it would be nice if the alarm clock could also play a CD. Imagine my pleasure when I found the new Sony Dream Machine (ICF-CD843V). Ok, it is about 3 times the size of the original Dream Machine and kind of looks like Magneto’s Helmet, but hey! It plays CDs and has 3 alarm times!

It soon became apparent that all was not well in paradise. Let’s look at the interface:
On Front:
LED display, but with a much denser information content

On Top (8 buttons):
– 5 buttons for preset radio stations
– 1 large snooze button
– 1 sleep button
– 1 brightness control button
On Front (13 buttons):
– 1 Nap button (turn on radio after x minutes)
– 1 CD play mode button
– 1 clock button
– 1 daylight savings time button
– 1 CD play/pause button
– 1 Radio band button
– 1 Off button
– 2 Tuner/Time adjustment buttons (up/down)
– 3 Alarm set button (Radio, CD, Buzzer)
– 1 Alarm Mode button
On Side:
– Radio Volume Control knob

The upshot? While I can set the alarm wake up time (I entirely credit my engineering degree for this!), my wife won’t touch the infernal thing. If I want to silence the alarm, I repeatedly push the alarm mode button (buzzer -> buzzer + CD -> buzzer + radio -> buzzer + CD + radio -> merciful silence). I could of course press the Off button, but I would have to find it while still half asleep (and it’s on the smallish side). The alarm mode button is easier to find and has a distinctive shape.

As embedded designers, we don’t often give thought to our system’s human interface, the so called human-machine interface. The result of this state of affair is usually an overly complex box, full of buttons whose functions are rather nebulous. Your users might grumble, be intimidated, or simply not buy your gizmo. Love it or hate it, the iPod interface is simply brilliant.

Have you ever run into an overly complicated piece of consumer equipment?

Reading an article on the “D” programming language, I can across the TIOBE survey of the top 100 programming languages. This piqued my curiosity and I decided to see for myself.
I’m classifying my experience as one of 4 categories: Competent, Dabbler, Heard of it and huh? In the Top 20 languages, I fare as follows:
Competent: 6 (C, VB, C++, Python, C#, Pascal)
Dabbler: 4 (Java, PHP, Perl, Transact-SQL)
Heard of: 7 (Ruby, JavaScript, Delphi, COBOL, Lisp/Scheme, Lua, PL/SQL)
Huh?: 3 (D, SAS, ABAP)

In the top 100, I have 8 languages I am Competent in, 19 others I have dabbled in, 28 I am aware of. This leaves 45 languages I had never heard of before today. 3 of those are in the top 20.

Another way of looking at it is that I’m competent with languages used by 41% of people out there, but I have dabbled with 79% of used languages. If I became competent in Java & Ruby, I would bump my number to 64%. Hmmm…Maybe I should do like Eric Sink and do something in Java.

The unknown languages, while large in number, account for less than 5% of usage.

How do you stack up in the language demographics?

« Previous PageNext Page »