Category Archives: Technology

New blog post: I demand smarter tools

So, I forgot that I’d been cross-posting here. I’ve written several posts on since my last update here:


New post: Introducing Lazy.js

New post: Introducing Lazy.js


I know it’s been a long time since I’ve posted anything; and yes, I am bothered by this and plan (well, hope) to turn that around soon.

I don’t have much to say for myself today, but as it is a big day for the anti-SOPA movement I thought I’d at least use this space to post a link to my company’s (ThoughtWorks) official statement on the issue.

In traditional ThoughtWorks fashion, the statement not only addresses the technical shortcomings of the proposed legislation but also criticizes the process by which it has been drafted and promoted thus far. It was written by the company’s Technology Advisory Board, a group of prominent figures within ThoughtWorks including Martin Fowler.

Hopefully I’ll have a happier (or anyway, less gloomy) post up here in the near future.

What’s this? A Mac virus?!?

The Apple logo with a worm coming out of itSo, a new trojan has emerged targeting the Mac OS.

But I thought Macs were invulnerable to viruses!

Let’s take a step back. The security debate of Windows vs. Mac has been going on for a long time. Typically the back-and-forth goes like this:

Windows user: I have a virus on my computer. How do I fix it?
Mac user: Just get a Mac.
Windows fan: (coming out of nowhere) The only reason Windows has more viruses than Mac is that Windows is more popular. It’s a bigger target.
Mac fan: (coming out of nowhere) That’s not true! Mac is an inherently more secure OS!

This strikes me as, honestly, kind of a stupid conversation, because it’s completely missing the real issue: it’s easier to break a system than it is to build it. I’ve written about this before.

That is to say, let’s suppose Mac is inherently more secure than Windows. I don’t know whether or not this is true (I haven’t exactly studied the code bases of both OSes, nor could I considering both are proprietary), but I don’t really think it matters, either.

The fact that Windows is more popular than Mac is definitely the main reason Windows has more viruses than Mac. It doesn’t matter which one is “more secure” than the other; when any system is easier to break than to build (I have yet to see an example contradicting this rule), all systems are vulnerable, and the single most effective way to protect yourself (if that’s your highest priority) is to adopt a system that represents a small, unattractive target for malicious parties.

Suppose the U.S. were being attacked by some foreign power. And suppose you could go literally anywhere, instantly, to protect yourself. Where would you go?

Billy the KidThe argument of whether Mac is inherently more secure than Windows is a pointless one in my opinion because it’s like debating whether, in this scenario, you should hide in the Pentagon or the J. Edgar Hoover Building (FBI headquarters). Neither would be safe; they would both be prime targets. You’d be much safer hiding out in some random residence in a rural town in Montana. Whether this residence even had locks on the doors, let alone fortified walls or a sophisticated security system, would be basically irrelevant. The reason it’d be safe is that it wouldn’t be a target.

So I’m certainly not surprised that this virus has surfaced, nor that Apple recently started recommending for the first time that OS X users install anti-virus software. Really, it’s just a sign that Apple is becoming much more of a market presence than it used to be. In fact, in some small way, I wouldn’t be surprised if some folks at Apple were even a little bit proud about this: Check it out, somebody wants to take us down! Look out, Windows!

One final note: It just occurred to me that this post may come off as a bit patronizing towards Apple; I don’t mean to sound like I honestly believe Apple is in some way a “small” player in the tech industry; that is clearly absurd. They are about as big as they come. I am specifically talking about operating systems; and there is really no denying that Windows is a far more popular operating system than OS X. That doesn’t make it better, just more popular. That’s all I’m sayin’.

Is Apple just the default everything?

Today I give you a brief interlude from the subject matter I’ve been covering over the past several days.

A coworker earlier this morning noticed the devices sitting on the desk in front of me and said: “Wow, you’ve got a Zune, an Android phone, AND a Windows PC. Do you hate Apple or something?”

No, I don’t hate Apple. (To be fair: I definitely used to hate Apple, but not for any particularly good reason. I just didn’t think—and still don’t think, actually, but I’ve gotten over it—that they’re as amazing as everyone seems to think they are. Just another company with some cool products and some not-so-cool products. The idea that the iPad was a revolutionary idea irritates me, and will continue to irritate me even as everyone and his/her mother purchases one.) But I do question this assumption that just because I don’t have a particular Apple product (e.g., an iPod), that could only be because I hate Apple.

To me, this is just giving Apple way too much credit for being the obvious choice for just about everything. The truth is that I don’t really like iPods. And when I looked at smart phones to decide which one to buy, I loved the Droid X for its ridiculously big screen (for a smart phone). And Windows is just the OS I’m most accustomed to (though I’ll very likely install Ubuntu or some other Linux distro on my machine very soon).

It’s like, if you went to my apartment and saw that I had a Mac PC, and a BlackBerry, and a Playstation, would you think: “Wow, you must hate Microsoft”?

Or if I drove a Harley Davidson motorcycle, and played a Gibson guitar, and owned a Kawasaki jet ski, would you think: “Wow, you must hate Yamaha?”

I don’t think so.

The anthropomorphization of computers

You know what’s funny? A lot of my blog posts have to do with ideas of mine likening humans or human activities to computers or software phenomena in some way. But it is quite common to do the opposite: to view computers as being like people.

A computer with a faceWhen’s the last time you heard somebody say (or you yourself said), “This computer doesn’t like me”? Or “It doesn’t want to do this”? Or “It’s thinking”?

Not that this is necessarily specific to computers, of course. We do this with cars, TVs, microwaves, basically every mechanical and/or electrical thing in our lives. But I think computers are in a league of their own, probably because we view them as machines that do work our brains would normally do (e.g., perform calculations). This makes it seem sometimes almost as if they have wills. And that’s when we start to get a little ridiculous.

I recently developed a small program for my wife to use at work; it simplifies some of the mundane everyday stuff she otherwise had to spend an hour or so doing from time to time. It’s nothing special, but it’s useful enough that she shared it with a coworker.

A sick computerHe was apparently quite enthusiastic to start using the program… until it didn’t work on his computer. Hearing my wife tell the story, it was really quite sad to hear: he would watch her use it on her computer, then go back to his own computer, follow exactly the same steps, and nothing would happen. It wouldn’t do the work it was supposed to do.

My wife’s coworker then made a joke about how I must’ve engineered it specifically to work only on my wife’s computer. Or anyway, not on his computer.

Obviously, he was joking. We’re always joking. But as they say, behind every joke there’s a small piece of truth.

I think that, in all honesty, we all find it a little bit unnerving how human-like our computer friends can sometimes be: seemingly intelligent and able to perform complex tasks, yet at the same time fragile, temperamental, and easy to confuse.

So I’m going to fix the problem that’s keeping the software working on my wife’s coworker’s machine (I actually already know the cause; fortunately it’s about a 5-minute fix), if only to silence that uneasy feeling I know he has: Does my computer just not like me?

It’s not a person. It doesn’t “like” or “dislike” anything. I swear.

I think.

A brief message from the school of .NET apologetics

Someone far more experienced and knowledgeable than myself recently made the following remark in a personal correspondence:

Too bad you’re working in .NET. There are TONS of tools out there for the Open Source world. And they’re all free and well-documented, with huge communities of helpful users to answer any question you might have.

To be clear: I don’t have the perspective on this issue that years in the industry naturally bring. My view of the software industry is quite limited. So yes, I am about to offer a quick defense of .NET, and I will be the first to concede that it is biased and perhaps naïve. But I also see this as a two-sided coin: approaching an issue with a boatload of experience to draw on sometimes colors one’s perspective in a way that might not actually be entirely fair to that specific issue.

Let me give an analogy to hopefully explain what I mean, and then I’ll move ahead to my main point.

Imagine you’re a kid, and there’s a family—we’ll call them the Smiths—that lives in your neighborhood. They are a very large family; let’s say a dozen children, all mostly grown. Your mom and dad really dislike the Smiths, based on a substantial history of bad experiences with them. The couple is manipulative and conniving, not to mention greedy and unprincipled. Most of the children are likewise disrespectful, poorly behaved, and just downright mean.

Now let’s say you actually don’t know any member of the Smiths. You’ve never had any occasion to interact with the parents, and most of the children are significantly older than you. But there is one kid in your grade—Billy Smith, the youngest sibling—whom you meet one day during class. He seems like a pretty decent guy, actually. You crack some jokes together, get along fairly well, and you eventually get the impression that Billy is really quite a nice person. You decide you’d like to be friends.

When you go home and tell your mom and dad about this, they immediately disapprove. “Billy Smith?” they ask. “No way. Those Smiths are all a bunch of hooligans, always up to no good. It’s a shame you want to be friends with Billy Smith.”

The point of this analogy should be obvious. It might be true in general that, for example, Microsoft as a corporation has many flaws (not that I have any reason to bash the company personally—but I must acknowledge that they have lots of detractors, and that generally happens for a reason); but this does not necessarily reflect on the quality of every existing Microsoft product. I propose that .NET is like Billy Smith from the analogy; while I can understand why someone who is jaded towards Microsoft with no doubt plenty of good reasons would have no interest in it, I also think that I have valid reasons to respect the framework, and that it is probably easier for me to recognize its merits since I lack the background experience that might cause me to be similarly jaded.

With that said, what follows is my attempt to concisely respond to the main arguments typically made against .NET, both from the statement I quoted above—which I believe fairly represents the viewpoint of a very large portion of software developers who shun .NET—and elsewhere.

Objection: From the quote above:

There are TONS of tools out there for the Open Source world.

Response: The open source world and the .NET world are not mutually exclusive; there are plenty of resources (OSS and otherwise) for .NET as well. Note that the source code for the .NET base class library (yes, Microsoft’s version) is actually freely downloadable, though the code for Microsoft’s CLR (a proprietary implementation of the CLI, standardized in ECMA-335) is not. There is, however, an open-source implementation of the CLI called Mono; and this implementation enables running CLI programs (a.k.a., what we commonly refer to as “.NET programs”) on plenty of non-Windows platforms. Also, plenty of open source .NET applications and toolkits exist; for examples, see CodePlex or go to SourceForge and search for projects written in C# (there are currently over 13,000 of them).

Objection: Again, from the quote above:

And they’re all free and well-documented, with huge communities of helpful users to answer any question you might have.

I know this is just one example, but there is a very huge community of helpful users that is heavily slanted towards .NET: Stack Overflow (though the site is actually language-agnostic in principle, and plenty of non-Microsoft technologies have lots of users on the site, there’s no denying that the site’s largest demographic comes from the .NET community), which also happens to be one of the top 500 sites on the internet.

Objection: .NET is owned by Microsoft, which means the company has complete control over the future of the framework.

Response: I am by no means an expert on this topic, so take my response here with a grain of salt. But I don’t think this is really accurate. Consider the fact that both the CLI and C# itself are standardized in ECMA-335 and ECMA-334, respectively (to be fair, the latest versions of C# are not standardized, unless I’m mistaken). And remember that Mono provides a cross-platform implementation of the CLI, which means that even if Microsoft decided to “pull the plug” on .NET, there would still be a totally feasible way to build and deploy CLI applications written in C# to all platforms, including Windows (unless Microsoft could somehow refuse to allow Mono to run on Windows, which I suppose is at least feasible—but that would seem disastrously harmful for them). Porting existing Windows-only .NET apps to Mono would be, in most cases, very possible, if not downright trivial (in many cases, no work would be needed at all).

Objection: .NET is just a Java rip-off.

Response: This one I’m less qualified to respond to. All I can do is point out that Java is getting old at this point, and with age comes a certain degree of stagnation. I’m not saying that Java is not a stable, robust, and very valuable technology within the software industry; but from my limited knowledge, I perceive C# to be in many cases a significant improvement over Java (see here for a detailed comparison; note C#’s unified type system, mechanism for defining custom value types, support for passing parameters by reference, superior generics implementation—e.g., better constraints, no boxing for generics with value type parameters—and superior support for functional programming constructs, just to name a few). And I don’t think I’m alone in feeling this way: take a look at the April 2010 Technology Radar document released by Thoughtworks (a well-respected company in the industry, certainly not a Microsoft puppet), in which C# 4.0 is given a rating of Adopt while “Java Language end of life” is rated Assess. The company has this to say about Java as a language (note that as a platform, the JVM is still regarded as vital within the software industry):

With the increase in number of languages available on the JVM, we expect enterprises to begin to assess the suitability of reducing the amount of Java specific code developed in their enterprise applications in favor of these newer languages.

Anyway, I just think a lot of people don’t give .NET a fair shake. And while I understand why this is—just as I could understand why the parents in the above story would be skeptical of anyone in the Smith family—I still believe it deserves some consideration.

By the way, I am very interested in receiving feedback on this post! I am certainly not a “disciple” of .NET (I really do enjoy Ruby, though I am a novice at it; and I am also quite interested in learning other languages completely unrelated to .NET). If I have made any inaccurate or misleading claims above, please let me know and I will do my best to fix/clarify/resolve them.

Guess what I’m doing right now? (a.k.a. another random post)

You would not believe what I am using to type this blog post right now. That’s right, I’m typing on this!

Crazy Keyboard

Behold the Kinesis Advantage Pro

OK, so you probably could have guessed that if you read one of my recent posts. But still. It feels so crazy!

I told my wife, even though I definitely don’t have the hang of it yet, I can totally see myself falling in love with this keyboard. The only concern I do have is this:

Kinesis Advantage Pro with curly braces is a weird place

Gah, I need those curly braces!

I am a software developer, and those curly braces are in kind of a tough place. (I mean, gosh, it’s almost like they think that most people don’t use curly braces that often.) But I’m sure I’ll get used to it. And hey, if not, maybe I’ll just start using VB.NET a lot more instead of C#.

Actually, that’s a joke. There’s no way that would happen.