Here’s the abstract from a paper about pragmatic programming via scripting languages:
The author recommends that scripting, not Java, be taught first, asserting that students should learn to love their own possibilities before they learn to loathe other people’s restrictions.
This is good advice about teaching people how to live, period.
Anybody who has a nostalgic interest in vintage technology (especially games) should head over to my friend C. Nimbus’s blog, Teleblivion. Some fantastic posts there recently.
I posit that the usability and elegance of any product, software or hardware, tends to reach and seldom surpasses the level that satisfies the taste of whoever is in charge of the product. The people in charge of most free and open source software products tend to have poor taste in user interfaces; people with good taste in user interface design are seldom in charge of open source software projects.
Put another way, if you have to ask for better design, you will lose. You need to be in a position to demand it.
I never thought I’d ever hear myself saying this, but sometimes you need dictatorships. Never in government, of course. But often in software. There are some problems that demand a single, guiding hand — one preeminent ego that’s both the progenitor and the keeper of a vision. Because visions tend to become fractured and diffuse when they’re subjected to committee.
The trick is in choosing the right dictator; and in retaining the personnel, and the intelligence, and the power, to depose him when he goes off the rails. As he inevitably will.
Came across this post in the Opera developer blog, on why you should never use browser detection in your javascript to work around browser bugs:
The TinyMCE/Opera 9.5 compatibility problem is a textbook example of why browser sniffing should be avoided at all costs. While it may seem like a quick and simple shortcut to work around a bug in the short term, browser sniffing creates a maintenance nightmare further down the road …
Also, whether you develop your own site or write script libraries that will run on thousands of other websites, the chances are that mistakes you make today will stay on the web for years to come, preventing users from upgrading to newer and better browsers because sites they want to use break.
I have to admit, I’ve often been tempted to use browser detection — and, worse, occasionally succumbed to that temptation. Wrestling with the deficiencies of certain browsers (*cough* IE *cough*) is such a horrible, dispiriting experience that eventually you’ll do pretty much anything to make the pain stop. And if relief is just one if (navigator.userAgent.indexOf()) away, then by golly why not do it?
Well, the Opera dudes make a very good case for why not. It seems to me there are basically four things you need to worry about when you’re writing code:
Does it work?
Will it work tomorrow?
Is it reasonably easy to understand, and maintain?
Is it fast enough?
Everything else is a distraction. The TinyMCE fix that the article describes fails test (2), and the alternative solution they propose seems to satisfy all four. So worth doing.
In this case, quick and dirty was a bad idea. But I don’t think it’s always a bad idea. Case in point: CSS layouts. There’s a certain area of dogma in the design community that maintains that all layouts should be handled exclusively by CSS positioning, and never with tables. Tables are for displaying data. CSS is for layouts.
Which makes sense. Tables were certainly not intended to be used for formatting, and you’re sort of committing the cardinal sin of mixing model and presentation if you use them that way — so there’s theoretically very little to disagree with here. But the picture gets murkier when when you descend from the lofty realms of theory into the muck of actual implementation, at which point you run into the raging shitstorm that is CSS.
This isn’t intended to be an anti-CSS diatribe, but any non-gurus who’ve attempted to format their stuff with CSS know what I’m talking about. As soon as you try to do anything even mildly complicated — where by “complicated” I mean more ambitious than changing your background color — you’re suddenly in a scary realm of floats and bounding boxes and content edges and border edges and padding edges and margin edges. I’m not even talking about shitty browser support here — although Jobs know that stuff certainly doesn’t help — I’m just talking about the basic “language”, whose designers appear to have made a calculated decision to sacrifice usability for flexibility. It does seem possible to do pretty much anything in CSS, but the penalty you pay is that everything you do is hard. Which is to say: you have to understand everything if you want to do anything.
I’m certainly no CSS expert, and I’m sure there are several arguments floating around in the vast universe of my ignorance to refute most of the sputtering, incoherent calumny I hurl daily in CSS’s direction. But I honestly don’t think my central point is especially controversial: CSS is really hard to use, and — once there’s a lot of it — really hard to maintain, and it imposes a fund of complexity on your stuff that you shouldn’t have to pay for doing simple things.
Like, for example, laying stuff out in configurations that are more or less … tabular. If you have a layout that doesn’t need to be especially flexible, and really looks a lot like a table, then I’d say make it a table. Tables are easy to understand, easy to write, reasonably fast, and they will always work, in every browser you can think of. Quick and dirty is usually bad. But not always bad.
Back when I was a young pup, before the world decided that it needed “mice” and “keyboards” and “editors” and “compilers”, we programmed by burning tiny holes in ribbons of paper tape with magnifying glasses, and then feeding them into Mastodon, our 80-ton Difference Engine. Mastodon was installed on a small island in the South Pacific — which, sadly, sunk under its weight long ago. But that was a real machine! It used to take us three really sunny afternoons and about twelve reams of calculator paper to write a Hello World program, but it was worth it. It felt like we really doing something. We cherished our hello worlds back then. We’d feed them into Mastodon’s input receptacle — and then, about two days later, it would shriek and shake and belch a giant black cloud of smog and spit out a response tape with the words “Hello Wor” on it (there wasn’t quite enough memory for the whole thing). It was quite a thrill. We’d put on an 8-track and crack open a couple of Tabs and set up tables in Mastodon’s giant shadow and have a little party. Those were the days.
I understand that a lot of you whippersnappers have two and maybe three “monitors” on your desk these days. Pansies, all of you. First of all, a “monitor” is nothing more than a hopped up piece of illuminated, color tape. And not very good tape, at that. When you children “scroll” in your “browsers”, what happens to all that text after it disappears off the top of your “windows”? It’s gone, isn’t it? Well, we didn’t have that problem with tape. Tape doesn’t go away. I still have the output of my first Hello Wor program, somewhere among the 54 metric tons of tape I store in my basement. I have the output of every program I ever wrote, in fact. Where’s the first Hello World you ever wrote, child? Oh, you don’t have it? Oh, it fizzled into the ether after you turned off your “monitor”? Isn’t that a shame.
And that reminds me: ASCII. I’ve never seen such a wasteful standard. Back in my day, we didn’t have your giant, sprawling “bytes”. We didn’t need 8 bits, ok? We made do with what we called “mincing rabbit nibbles”, which had two bits, and two was all we needed to represent our alphabet — which, last time I checked, was the same alphabet that you greedy little bit suckers are using. Sure, we had to eliminate all the vowels, and all punctuation, and, yes, every one of our bits had to represent 6 possible letters, but they represented them proudly! They weren’t ashamed, and neither were we.
And another thing: bits. Whenever I hear one of you higher-language infants sneering dismissively about “ones” and “zeroes”, it makes my blood boil. Because, for one thing, if all you have to do to add two numbers is write “number + number”, then you’re not really programming, are you? You’re just banging on your toy language’s giant color buttons, squealing in delight when the right numbers come out. Well, you may get the same answers we did, and you may get them several orders of magnitude faster, with 3000% less code, predictably, without having to rewire any circuit boards — but you’re not programming. Try building an air traffic control system with nothing but holes burned into a world spanning piece of calculator tape. Then we can talk.
Also, I understand that your newfangled, 21st-century bits have two states. Back in my day, we didn’t need two, ok? Wasteful! All we had was zeroes. Sure, it wasn’t easy programming when you had no way of registering (or generating) state — and, sure, arithmetic operations were more exercises in probabilistic reasoning than “calculation”. But we managed! I’d like to see any of you wet-behind-the-ears adolescents writing one of your “E-MAIL” programs with just zeroes! Good luck with that. And, when the world runs out of ones, don’t come crying to us, ok? It’s not like we didn’t warn you.
More bad news on the iPhone front today. Lord Jobs unveiled the latest iteration yesterday, faster and thinner and, if possible, even purdier than before. It remains one of the loveliest consumer devices ever to grace our narrow visual spectrum, but its unholy coupling with AT&T has just become more bindingly unholy. They now require you to register with AT&T when you buy the phone, so there’s no longer any easy way to take it home and exorcise its demons.
I’ve already ranted, at some length, about the problems that Apple is bringing on itself by hitching its wagon to AT&T, so I won’t go into all that again. But I will say this — they’ve just added to another level on inconvenience and crappitude to the buying experience, forcing you to spend a quarter of an hour signing your life away to a service that is guaranteed to sell you out to the first government agency that decides to turn its lidless eye in your direction. Seriously, Apple, what the hell? You put together this beautiful bouquet, sunflowers and roses and daffodils, as lovely as it is thoughtful, and then send it to us in a box made out of dogshit and pureed cockroaches.
Meanwhile, Starbucks, my home away from home, creeps inexorably toward its vile accommodation with AT&T, slowly pushing T-Mobile1 out of the picture entirely. I guess sometimes the bad guys win.
Although, to be fair, T-Mobile is in some sense the author of its own problems. Charging $6 an hour for internet access in 2008 is just dumb. ↩
I went to the Apple Store this morning to see if they could fix my damaged iPhone, and was rebuffed — but not for the reasons I expected.
So I got home, brooded a bit, then wrote a letter to Steve Jobs, bitching about the whole experience. Which is mildly ridiculous, of course. In the larger context of Bad Things That Can Happen, this is microscopically small potatoes. And the phone still works fine. And really I’m incredibly lucky to have one at all. So I have no reason to bitch.
But I’m bitching anyway. This really rankles, and it rankles at a level that transcends the experience itself. So I wrote the letter.
Now I just need to get up the nerve to send it. One does not anger Lord Jobs lightly.
Anyway. Here it is:
Dear Mr Jobs:
I have been a wild-eyed Apple enthusiast since around 2001, when I got my first Mac — a Titanium Powerbook — and fell instantly, ardently in love. And that love hasn’t waned in the past seven years. Really, it hasn’t had a chance to. Every time I think you guys can’t possibly do anything cooler, you do — tiny Nanos, perfect Macbooks, beautiful Airs, paradigm-changing iPhones — all rolling out of Cupertino in a steady stream of unadulterated awesomeness.
So I feel kind of bad that my first letter to you ever is a complaint, and such a minor complaint at that. But it is, I’m afraid.
A couple of months ago I came into possession of a beautiful iPhone. I’ve been slobbering over this lovely piece of machinery since you first announced it, early last year, and it was everything I’d hoped it would be. Beautiful, elegant, effortless. Everything a revelation, everything a delight. It still takes my breath away, every time I pull it out of my pocket.
And then, last week, I dropped it. My heart stopped. I took a moment to curse the gods for their cruelty, and then myself, and then the concrete floor for not getting the hell out of the way when it saw the phone coming. And then I picked it up — and, found it, miraculously, undamaged. Not a scratch. Everything working perfectly.
And so I breathed a sigh of relief, quickly apologized to all the gods I’d cursed — no hard feelings, ok deities? — and went about my business.
Three days later, a crack developed on the screen.
I wept, re-cursed the gods, then went into my local Apple Store, hangdog, and asked how much it would cost to repair the damage.
The Genius I spoke with — friendly, pleasant, competent — said that they would replace it, for free, since there wasn’t any apparent damage to the rest of the phone. I exulted, uncursed the gods, and went off to my corner to wait for him to process the transaction.
But then he called me back, and apologetically told me that he couldn’t replace it after all. I’m not using AT&T — I’m a T-Mobile customer — and so he couldn’t, as a matter of policy, do anything with the phone. I offered to pay for the repair, but he shook his head. Unless there’s an AT&T account attached, Apple can’t help me.
I walked out of the store as I’d walked in — hangdog, crack intact, with absolutely no recourse.
Apple’s insistence that everyone use AT&T with the iPhone has always bewildered me. There’s nothing about the device that should pin it to one carrier, and the notion of inextricably tying hardware to online services is a terrible, terrible policy that the carriers have used to their advantage — and the consumer’s detriment — for far too long. Think about the world that would have been if the same ruinous policy had been foisted on us early in the history of the computer industry — we’d all be buying computers that forced us to use Compuserve, or Prodigy, or MSN, or — god help us — AOL.
The iPhone is a paradigm-changer — the very first usable smartphone. And more than usable. It’s an absolute revolution. It’s what we’ve been waiting for for years. So why not extend the revolution to actual policy, as well? Why not break the shackles that have held us these corrupt carriers for so long?
But leaving all that aside for a moment — of all the carriers to tie the iPhone to, AT&T is the worst that Apple could have picked. It’s not just their substandard service — that I could live with. What I can’t live with is AT&T’s cavalier surrender of their customer’s privacy to to government and industry. From NSA bugs implanted directly into switching stations, to proposals to monitor every packet that passes through their lines at the behest of the entertainment industry, they have demonstrated an unparalleled eagerness to betray their customers’ trust, at every turn.
I understand that many people don’t care about this, or don’t care about it enough to deter them from going with AT&T. Fair enough. But many people do — I do. And I can’t stomach the thought of giving that company any of my money, much less committing my data to their compromised pipes. Not even for an iPhone.
So, after I got my phone, I unlocked it, and started using it with T-Mobile. This is my great sin — wanting to use this beautiful piece of hardware with a service that I can believe in, and trust. And for this sin, I’m relegated to second-class status. My phone is an untouchable now, stranded in this nether-world between what’s allowed and what’s reasonable.
The obvious answer here, then, is DON’T BUY AN IPHONE, DUDE! And that’s right, of course. I am under no obligation to purchase this miraculous piece of hardware, and Apple is under no obligation to support me if I choose to use it in ways it deems inappropriate.
Fine. But not the point, I’d argue.
I think the reason that I — and people like me — are so zealously attached to Apple isn’t because you guys make beautiful machines, or write lovely software, or have miraculously good customer service. It’s all that, of course. But, fundamentally, it’s the aesthetic that attracts me — this manic devotion to the user, to providing a satisfying experience on every conceivable dimension.
But that’s not quite it either. Apple is doing more than trying to please its customers — it’s working toward some inchoate ideal of perfection, a kind of shadowy Platonic form, and is unwilling to compromise anything to get there.
Ok, a little overboard, maybe — but that’s more or less how I feel. Apple appeals to the bits of my lizard brain that respond to that kind of passion and purity. But when Apple does something like this — turning its backs on legitimate customers who have done nothing worse than go the extra mile to use their products — it subverts the whole thing. It’s not just that it’s screwing us over. It’s worse than that. It’s poisoning the beautiful ideal, in a fundamental way.
So that’s my beef. Take it as you will. My addiction to all things Apple continues unabated. I’ve already begun to feel the unmistakable heartpangs of pure love whenever I see an Air, so I’m clearly just as smitten as ever. But there’s a fly in the ointment now. It doesn’t make me angry, or irate, or even annoyed. This is, after all, a very minor thing. But it does make me sad.
Anyway. I hope you guys are planning to drop this exclusivity thing, and soon. It just doesn’t belong.
My work computer decided to freeze up and eat itself last night, and this morning it wouldn’t boot. I pawed ineffectually at it for a while, then broke down and called IT. I haven’t had to do that in a while, so it took me some time to track down their contact info. It turned out to be an 800 number. This was immediately troubling, but I dialed anyway, and sure enough … it was a call center.
We’d outsourced our own tech support.
I sighed, and resigned myself to the inevitable. Five hours and two calls later, my computer still isn’t working. But at least my ticket has moved down the chain to someone I actually share a goddam building with.
I was bitching about this to my brother, who wondered when corporations would start outsourcing their bathrooms facilities. It really isn’t all that far-fetched.
Call Center:
Hello, thank you calling bowel support. How may I help you today?
Me:
Yeah. I need to take a dump.
Call Center:
I’ll be very happy to help you with that sir. What is your first name?
Me:
What?
Call Center:
Your first name?
Me:
Why do you need my first name?
Call Center:
In order to better serve you, sir.
Me:
[sighing] Ok, fine. My name is A.
Call Center:
Can you spell that please?
Me:
Sure. A.
Call Center:
Thank you. And your last name?
Me:
B.
Call Center:
Can you spell that please?
Me:
B.
Call Center:
Thank you Mr. B. May I call you A?
Me:
Look, I’m about to crap my pants here.
Call Center:
I will be more than happy to assist you with that, A. Can you tell me the nature of the bowel movement?
Me:
[pause] I don’t think so.
Call Center:
On a scale of 1 to 10, can you rate the urgency of your fecal event?
Me:
Ten. No, wait. What’s one?
Call Center:
One is distant intimations of a possible bowel movement, with accompanying though distant suggestions of impending micturition. Ten is an imminent and seismic defecatory event.
Me:
Yeah, ten. Actually, make it eleven.
Call Center:
There is no eleven.
Me:
Well, I’m just saying, I really have to …
Call Center:
There is no eleven.
Me:
Ok, fine …
Call Center:
Can I put you on hold, sir?
Me:
What? No! Why!
Call Center:
I need to research your eleven event.
Me:
No, it’s ten! Ten!
Call Center:
Thank you for your patience.
Me:
Dude! Please!
Call Center:
[muzak] In the naaaame of love … one man in the name of love …
Me:
God damn it.
Call Center:
The hills are alive … with the sound of muuuusic … with songs they have sung … for a thousand yeeeears!
Me:
Oh please. Please. Please please please please …
Call Center:
Hello sir. Thank you for your patience.
Me:
Oh thank god.
Call Center:
I have researched your situation and determined that you are experiencing an urge to defecate.
Me:
Yeah, no shit.
Call Center:
[pause] You do not need to defecate?
Me:
No! It’s just an expression!
Call Center:
Can I place you on hold sir?
Me:
Dude! I’m begging you!
Call Center:
Like a virgin … touched for the very first time … like vir-ir-ir-ir-gin … with your heartbeat next to mine …
Me:
[sobs]
Call Center:
Thank you for your patience, Mr B.
Me:
God damn it!
Call Center:
I have opened a low-priority ticket. Someone will contact you as soon as possible to assist you with your issue.
Me:
I! Need! To! Crap! Now!
Call Center:
Can I assist you with anything else today?
Me:
[sighing] Go to hell.
Call Center:
Thank you for calling bowel support. Have a nice day.
The 4th Edition of Dungeons and Dragons is coming out next year, and the geek community is all atwitter with anticipation, derision, or complete ambivalence. I’m with the breathless anticipation crowd, in no small measure because some of the rules in the current edition are really kind of broken — not mechanically broken, just monstrously unpleasant to play. Things like grappling and detecting magic and turning undead — stuff that’s so ridiculously complex that most rightminded players avoid them whenever possible.
But not all players, alas. There are some who insist on grappling everything, or knowing exactly what schools of magic are emanating from every faintly enchanted bauble they come across, or turning every zombie cockroach that skitters across their path. These players are the bane of DMs everywhere.
You kind of have to humor them, of course. But that doesn’t mean you can’t dream:
Player:
I want to grapple the gelatinous cube.
DM:
[sighs] Ok, roll a d17.
Player:
A what?
DM:
Hurry. You have 5 seconds.
Player:
But what’s a d17?
DM:
Too late. You die.
Player:
But …
DM:
Now get out of my house.
Or:
Player:
I cast Detect Magic on the entire town. I’ll need school of magic details on everything, please.
DM:
[sigh] Ok. You start glowing blue.
Player:
Me? I don’t have any magic items.
DM:
Oh … sorry. I thought you said Detect Asshole. My bad.
Or:
Player:
I look at the purple rune. What does it say?
DM:
You can’t read the purple rune.
Player:
I think I get a Knowledge Arcana check? Hello?
DM:
Fine. [perfunctory roll] You can’t read the purple rune.
Player:
I take 20.
DM:
[sigh] You can’t.
Player:
Why not?
DM:
Because you’re on fire.
Player:
No I’m not!
DM:
And you have syphilis.
Player:
But I’m a Priest of Abstanium! I’ve never had sex with anything!
DM:
It’s an airborne strain. Roll a Fortitude check.
Player:
[rolls, grins smugly] 27.
DM:
Good. Only one of your balls falls off.
Player:
This is ridiculous.
DM:
Now roll a Get the Hell Out Of My House check. Use a d17.