My new car

Fiction for Mac programmers by Ingemar Ragnemalm.

I needed a new car, so I went to a big car retailer, and asked for advice.

­ I have an old Symantec Thinkomobile, which I like very much, but it is too slow to drive on the new highways, so I think I need a new car. Do you have anything like it?

­ Oh yes, the Thinkomobile! That's an old-fashioned model that isn't produced any more. What you need is a Metrowerks RodeWarrior. It is a brand new high-tech state of the art vehicle! It has gotten the very highest ratings from all reviewers, and is definitely the new market leader.

­ Sounds fine. Can we take it out for a drive to check it out?

­ Of course! We have one over here.

I stared at the huge monster of a car that was before me. The car was rather big, a lot bigger than the Thinkomobile, and there were lots of extra equipment all over it, extra lights, external speakers for the stereo, front, aft and roof spoilers, three spare summer tires and one winter tire, fancy wheel-caps and much more.

­ That's an overcrowded car. Uh, does it have to be that big?

­ Of course! How else would you fit all the advanced specal equipment inside?

We got into the car, and I found it even more crowded than the outside.

­ I can hardly breathe in here! Can't you take out some of all the junk in here?

­ Oh, sure, you can make a minimal installation.

­ Does that make it nice and spacious?

­ Sure! It takes away the doll in the window and one of the TV sets.

­ Doesn't it take away the police radio, the radar warning system, the champagne cooler or the hair dryer?

­ No, we believe that most users will want that sooner or later.

I stared in disbelief at the hair dryer, but shrugged. "I can take the junk out myself", I thought.

­ OK, let's go then.

I put the key into the keyhole and turned it. Nothing happened.

­ Why doesn't it start?

­ Oh, you have to use the ignition button, of course!

­ What????

­ An ignition button. The button below the wheel. Really cool. You see, instead of a crank in the front, you just push the button...

­ Instead of a crank in the front???

­ Yes. I mean, a crank in the front would be rather clumsy...

­ You are putting me on. In my Thinkomobile, I just twist the key and the motor starts.

­ Ha ha, that was a funny idea! Start from the key, what car would do that? A toy car?

­ It does! And I happen to like it!

­ Ha ha. Sorry, this is the upcoming market standard. Push the button. That's the way it works.

I looked for the button. I couldn't see anything.

­ Well, where is it?

­ Just put your head between your knees and look below the wheel, and you'll see it.

Starting to wonder where the hidden camera was, I settled for fumbling around all over the wheel stem, and finally found a button next to my knee. OK, perhaps I could live without the key start. Perhaps I'll have to. I pushed the button, and the engine started after some coughing.

­ Let's drive out, the salesman said. Hold it, not too close to the stand there! We could damage the front!

­ OK, but surely the bumpers would take that up?

­ Er, no, there are no bumpers in this version.

­ No bumpers? Are you serious?

­ Yes, but you will get bumpers for free within four months, when the next release arrives.

­ Am I supposed to drive around without bumpers? That's almost like being without safety belts... hey, where are the safety belts?!

­ Safety belts are not included, but you can get nice belts from another vendor.

I was silent for a few seconds, trying to grasp the idea of a car with all these extras, but no bumpers and no belts.

­ Are you OK?

­ Yes. No. Yes. Let's take the drive... but I won't drive very fast. I don't want to take any risks.

­ Oh, but the RodeWarrior is made for very high speeds.

Doubtfully, I looked back at him. Once it was moving, I could momentarily forget about some of the problems. Driving it was nice. Everything was in places other than I was used to, but that's OK. Acceleration and speed was just fine. I decided to try a little manuevering, so I turned into a dead end, intending to back out.

­ No, what are you doing?!

­ What is it?

­ How are we supposed to get out?

­ I was going to back out, of course! Now, where is the reverse?

­ Reverse?

­ Reverse! I want the car to move backwards!

­ Backwards?

­ Oh-oh.

I took a deep breath.

­ So now you are going to tell me that there is no reverse?

­ No, of course there is no reverse!

­ "Of course"... There is a reverse in my Thinkomobile, and there were in all the Thinkomobiles I've owned. The oldest one is almost a veteran!

­ Well, that is a very expensive luxury feature that they couldn't include in the RodeWarrior.

­ Luxury? It was easy ten years ago. Why isn't it easy now?

­ It isn't standard.

­ How am I supposed to drive into and out of my garage?

­ Well, either you do what we will have to do here, put the gear in neutral and push it back, or you get a modern garage, open at both ends.

­ Let's go pushing. So, I get extra lights, double summer spare tires...

­ Triple, actually! And one for winter!

­ OK, triple. And stereo, and TV sets, and even a air dryer built-in...

­ Yes! Amazing set of features, isn't it!

­ ...but I get no bumpers, no seat belts, no key ignition and no reverse?

­ Well, yes, but all those are special things that nobody uses anyway!

­ Nobody? I use them all the time!

­ Yes, but few people do. You know, the Thinkomobile wasn't a big success. Most went for the ThinkobiCycle instead.

­ The ThinkobiCycle is a joke! It tries to look like a Thinkomobile, but it is really a motor bike with a side car.

­ But that is what people wanted! And the ThinkobiCycle had no reverse, no key ignition, no bumpers and no seat belts! And people bought it!

­ I think I get your point. So the "standard" is set after the ThinkobiCycle, not the Thinkomobile, despite the fact that the Thinkomobile was so much better?

­ Perhaps it was better to some, but it didn't sell as well!

I thanked for the demonstration, although I wasn't very enthusiastic. Some time later, I went and bought myself the RodeWarrior, since it was the best available. I needed it, since the Thinkomobile isn't fast enough for the highways any more, but I still use the Thinkomobile most of the time.

What scares me is the thought of losing all the essential functions of the Thinkomobile the day it just won't work any more. I am still hoping for a RodeWarrior with reverse.

Less entertaining ramblings in case you don't get the point

I'm sure most of you see quite clearly what I am really taking about. Do you think this is just gripes from someone who want things to work just like he is used to, and don't want to adapt to the "modern" ways? I don't think so. I seriously believe that we are losing the high standard for a lower one, and it will take many years before we are back to where we were in 1986.

Let's get explicit. I don't mind that the editor is different. I don't mind that the command key equivalents are changed. I have even changed my Think Pascal copy to conform to the CW IDE. I don't mind that resource files are in the project rather than attached in "Run options". Actually, that's one out of many minor improvements.

But there are so many really important things that went away.

Code formatting is now something I can only get done by a plug-in module, via ToolServer. That is nowhere near the convenience of immediate formatting with syntax error reporting as I type.

Compiling may be fast in theory, but it takes a long time to start it. For small projects, Think is so much faster that you wonder what CodeWarrior is waiting for.

The "minimal installation" of CodeWarrior is so far from minimal that it would be a joke if it wasn't so serious. How can the minimal installation need dozens of variant libraries, and all the interfaces and headers?

The debugger is the big problem:


In Think's Observe, I can type any expression I like. Anything that would compile is correctly parsed, any functions are called, my own or Toolbox functions. I can't think of anything Observe fails to do for me!

In CodeWarrior, I can type some expressions, but it usually fails. Constants are not recognized. Functions are not allowed. Global variables not used in the current function are neither allowed nor displayed. All in all, the Expression window is very close to useless!


Think lets me type in code snippets and execute them on command. This is a very useful feature that I use a lot. I call a CopyBits to inspect the contents of a GWorld at any time. I call NewPtr when I find a pointer that hasn't been successfully allocated, or DisposePtr if I need to free some space. I open and close serial ports and Appletalk connections. It saves me lots of program restarts, lots of crashes and lots of reboots.

CodeWarrior doesn't even try this.


Think is fully integrated. I can set breakpoints in the editor windows. When I single-step, I do it in the editor windows. When I find a bug, I am at the place to edit right away.

In CodeWarrior, the debugger is a separate application, with its own windows. That means that I get more windows on the screen, which makes it harder to navigate. It also means that I must give the "run" command twice rather than once.


A common situation is that you are editing a certain part of the code. You want to run, but want to set a breakpoint somewhere in the beginning of the critical part.

Think: Set the breakpoint. Hit command-G to run.

CodeWarrior: Command-R launches the debugger. Switch back to the editor. Click on the line where you want the breakpoint. Hit Command-J to switch to the debugger again. Set the breakpoint. Hit command-R to run.

How is that for progress?

You may argue that Think has the disadvantage that the integration makes the application being debugged run in an environment that is rather different from what it uses when it runs as a final application.

I agree that similarity to the stand-alone execution environment is desirable, but this is beside the point. It is perfectly possible to rewite the current CodeWarrior debugger and IDE to make the debugger a background only process that communicates everything to the IDE, that displays all debugging information, and lets you place breakpoints right into the editing windows. There is no problem here!

OK, almost. The only problem I can think of is that you may want to edit the code without resetting the program being debugged. That calls from some smart solution, probably getting a debug-only window for each file that has been changed. You have those debug-only windows in the old solution anyway, but there you have them all the time whether you need it or not.

So tell me, am I just taking about taste? Were Instant's type-and-execute, Observe's generality and Lightsbugs elegance just odd one-shot solutions that nobody needed?

Post scriptum: With CodeWarrior Pro, the debugger is the same old junk, but the IDE is so slow that it is unusable on a 6100! The only "advantage" is the questionable multi-target project files that makes project files even harder to browse than before. So, things have actually gotten worse lately!


Copyright ©1997 Ingemar Ragnemalm.

Updated: March-1998