Conservative and liberal

The ideas of conservative and liberal have become very confused, and in many cases exactly backwards. Let’s try to understand them — as adjectives instead of nouns — and strip them of some connotations.

A conservative idea is one that sees value in limiting change. The assumption is that an organic system is a long accretion of wisdom or value, and should not be changed lightly. The built-up information in the system might not be obvious, and so changing it risks a greater loss than one anticipates. One wishes to conserve.

A social conservative is one who sees social mores this way. In programming, a fear of rewriting legacy code is conservative. Stare decisis is conservative. To be green is to be an environmental conservative.

A liberal idea or system is one where individuals are given greater ability to make choices. It is not necessarily the opposite of conservative.

A liberal democracy allows greater participation of citizens in choosing a government. A social liberal believes in fewer social restrictions. In economics, to liberalize is to make a market more free.

One can begin to see what misnomers these terms have become in modern politics. “Liberals” are often those on the side of greater government control. Radicals are often called “conservative”. Weird.

These ideas are not necessarily opposites, and can be complementary. For example, citizens participating in the so-called Arab spring have liberalized their political systems, but subsequently chosen conservative leaders.

One can abhor recreational drug use — a conservative premise — and understand that it should be legal — a liberal conclusion. A liberal system offers space for conservative choices.

I have largely stopped using “liberal” and “conservative” as political nouns, as they are misleading at best and pejorative at worst. Most politicians — most people — are not consistent enough to be called either. It is a tribal distinction, which I find nearly useless.

Posted in Uncategorized

What’s next for Better Bird?

We’ve got a few hundred folks using Better Bird, my Chrome extension for fixing the Twitter web UI, and I’m thrilled.

I need feedback on what to do next. What do you think?

Posted in Uncategorized

The inorganic app

It occurs to me, as I look at my Google+ stream for the first time in two months, the reason I never use it: it never had a chance to grow on me.

It’s beautifully implemented. It fills in niches that other platforms miss. It’s not an imitation of Facebook or Twitter (though it is obviously a reaction to those things).

No, the problem is that it is inorganic. It revealed itself to the world fully formed.

Contrast with Facebook and Twitter. These apps started small, and in fact, neither of them knew what they were or what their real appeal was. It took them years to discover it, in small steps, organically.

During that time, they grew on me as they, well, grew. Their use cases, their addictive qualities, were emergent.

Google+, on the other hand, made all its decisions made before we ever saw it. As such, it emerged nearly perfect, while being perfect for no one.

G+ does social networking like Annie Lennox does blues: a perfectly executed imitation of soul. She is extraordinary is many ways, and so is G+.

But. Imagine if you could see the brain scans of people when they first try G+, and then go back in time and do the same for Facebook and Twitter. You and I know people who lost their shit when they got turned on to those latter sites. Know anyone that had that reaction to the former?

G+ is correct, in the way that Salt Lake City planning is correct.

But, to my eye, G+ reveals no influence of its users — like the de facto footpaths that emerge on campuses and in parks. G+ is plastic where the early Twitter and Facebook were clay.

comments on Hacker News

Posted in Uncategorized

A failure of empathy

Consider for a moment the logic of the leading paragraph of this article:

Research suggests that consumers spend only about one second looking at nutrition information when making myriad choices. A parent dashing through the grocery store aisles with kids in tow has to decide, in that one second, which is better: Triscuit vs. Saltines vs. Wheat Thins vs. Ritz? This is why Americans need a simple, standardized and truthful label on the front of all packaged foods.

This puts empiricism on its head. Labels have failed, ergo, we need more labels.

The evidence says nutrition information is not relevant to most people. The logical conclusion is, ok, we’ve learned something about people’s values and should proceed with this new information.

The empathetic response would be: humans have made their feelings known, let’s cater our policies toward their demonstrated behavior.

The less empathetic response: to be informed, but to make choices different than mine, is logically impossible. Thus, the only explanation is that they are uninformed.

This is the writer’s position. What has escaped his attention are myriad possibilities for human motivation. To ignore these possibilities is simple ignorance and lack of imagination. They include:

  • They’ve read the label before and understood it just fine. It wasn’t salient then, and it’s not now.
  • People’s choices on everything  — food, mates, work — are about 90% emotional.
  • Pleasure is more interesting to most people.
  • Attention is expensive, and there is no tangible payoff for seeking a product with 20 fewer calories.

Each of these things is a personal choice — we balance pleasure vs. health every day. If you don’t go the gym tonight, you’re making such a trade-off. Does this mean you are uninformed?

The great lie comes in the final paragraph:

I want my Häagen-Dazs to tell me how many calories I am consuming — up front.

If one is considering ice cream, then calories are, objectively, not driving one’s decision. He lacks empathy even with himself.

Posted in Uncategorized

C# should be truthy-y

While “truthy” values in JavaScript can cause no small amount of heartache, one must admit they help readability. For objects anyway, it’s very nice to say if (object) {…} and get on with business. If the object is null or undefined, “false” strikes me as a perfectly legitimate behavior in that context.

I’d love to see something similar in C# — not truthiness, but an implicit test for existence.

Every object in C# has a ToString method. What if every object had a similar Exists method? The compiler could simply interpret if (object) — or any boolean expression — to the Exists() value, without requiring the developer to type it out.

The default implementation, from which every class would inherit, would be this != null. Yes, the current syntax wouldn’t support that evaluation (one can’t call a method on a null). The trickery would be akin to extension methods. Syntactic sugar, yes.

Like ToString, it might be overridden, depending on how one defines a legitimate value for their particular class. Doing so is fraught with danger if one goes about changing it a lot (careful with that axe, Eugene).

I would only support this idea for Object and Nullable<T>. And note this is not truthiness — it’s an explicit definition with a sensible default. Thoughts?

Posted in Uncategorized

Nobody cares about “channels”

There are rumors afoot that Apple will offer TV channels as apps in an upcoming release. This might work as an interim idea, but it has no legs long-term.

This idea is not new — for years, people have been arguing for “a la carte” cable television. The idea being, instead of simply signing up for several dozen channels, a consumer might instead select their own menu of individual channels, and pay accordingly.

Sounds good in theory; many people instinctively say “Yeah! I don’t need all the crap channels I get, just give me the good ones.”

But this suits no use case that I am aware of, and I think it explains why no cable company has given it a proper try.

How so? Because nobody watches channels. They watch content.

A channel is in fact an arbitrary grouping of television shows, most of which we don’t watch. Have you ever suggested to a friend, hey, let’s watch some ABC tonight?

If you believe that your cable plan is arbitrary and mostly junk, an “a la carte” offering of channels is much the same, at a slightly different level of granularity.

Think of movies or music. Do you say, hey let’s watch some New Line Cinema tonight? Or, hey, I wanna get that new Sony album?

No, you say “let’s watch Iron Man” or “I gotta get that new Cee-lo”.

Channels are an accident of history. The only a la carte offering that makes sense is content.  Confusing “channels” with television is status quo bias, but not sensible in terms of your user experience.

Apple (and Amazon, and Hulu) are already doing a la carte television, on a show-by-show basis. Because it’s the only a la carte for which there is a market.

There are some exceptions; a few channels might legitimately be said to be content in their own right. I can imagine a paying audience for the Home Shopping Network or the Golf Channel.

Consider this. If you pay for cable, it’s because you actually prefer bundling. You like to pay one price, and know that you’ll get Modern Family and Dexter and Masterpiece Theater. Perhaps you like the experience of random browsing (a legitimate use case). You might also think it worth a premium to get shows as soon as they are available.

Barring those advantages, what are we left with? I can imagine paying for Modern Family. But I can’t imagine paying for ABC.

Posted in Uncategorized

Suspension of disbelief

You watch a movie. In order to get something from it, you have to enter the world that it presents. You must suspend disbelief.

This is essential for the product to work correctly. If you are unwilling to believe, say, that space mercenaries have Wookiee friends, or that the bumbling Bluth family exists — then it’s very unlikely the product is for you.

Restated, you know full well that none of what you perceive actually exists, but you believe it in order to get something out of the experience.

And so it is with programming abstractions. It might be a language, like C#, or a framework, like jQuery. What they actually do is much less important than your perception of what they do.

There is in fact no “integer” named “x” — but you operate as if it exists. You suspend disbelief. To do otherwise would be counterproductive.

It would puzzle me immensely if a person continues to watch a movie while insisting that Meryl Streep isn’t actually a nun or that there is no such thing as a warp core. Commit, or find another movie.

Similarly, it puzzles me when programmers choose an abstraction while being unwilling to adopt its mental model.

This usually expresses itself as poorly separated concerns: observables that try to look at their observers. Business logic that’s tied to a web server. Jamming arbitrary SQL into an ORM.

I know your reaction: sometimes this is necessary. And you’re right! Abstractions can be leaky.

Indeed, films can be poorly made. There might be continuity errors, or bad costumes. In which case the creator has failed to a degree, and broken your illusion.

But your choice is still: believe in Wookiees or find another movie. Each is reasonable, but not both.

With a language or a framework, you have the same choice. The creator of the abstraction is offering you an illusion and a mental model to go with it.

If poor coding breaks the illusion, you might need to work around specific bugs. If the model is confusing, you might not think it worthwhile.

But if you adopt an abstraction, while enforcing a different mental model than the designer intended, I don’t get that. It’s like staying in the theater, but telling everyone within earshot that Robert DeNiro is not, in fact, a taxi driver.

Commit. Or find another movie.

Posted in Uncategorized