Archive for January, 2008

Code Head

I’ve got a bad case of “code head” at the moment. We’ve been working non-stop on our prototype for the last week, and after spending all that time in deep conversation with my computer I find it hard to communicate with ordinary people.

It’s hard to describe what programming feels like to someone who’s never written code. My best analogy is that it’s like trying to give instructions to your annoying kid brother, who happens to be a bit forgetful, somewhat hard of hearing, and very lazy. A typical conversation might go something like this:

You: Hey computer, I’d like you to add something for me.

Computer: Add what? I can’t add just anything.

You: I’d like you to add a number.

Computer: What number?

You: Five.

Computer: What about five?

You: Add five to something.

Computer: What do you mean something? What kind of something?

You: Add five to another number.

Computer: Which number?

You: Any number. It doesn’t matter. I’m creating a routine.

Computer: Oh. I see. You’ll want a variable, then.

You: Yeah, a variable. So I want you to add five to this variable–

Computer: Can we give it a name? I don’t remember things very well unless they have names.

You: Oh, OK. Call it x.

Computer: Call what x?

You: Call the variable x.

Computer: What kind of variable is it?

You: It’s a number. We’re going to add five to it.

Computer: Is it a big number?

You: [confused] I don’t know… No. No, it’s a small number, OK?

Computer: Does it have decimal points in it?

You: What does it matter?

Computer: I’m curious.

You: [slowly] No, it’s a very small number without decimal points. It’s an integer, OK?

Computer: What is?

You: The variable. The variable is an integer.

Computer: Which variable?

You: The one we were talking about before: x.

Computer: What about x?

You: [frustrated] Look, the variable called x is an integer, OK?

Computer: Oh, right. Gotcha.

You: OK, now I want you to add five to it.

Computer: Add five to what?

You: Add five to x.

Computer: You didn’t say, “Please.”

You: [angry] What? Why you little…

Computer: And I’m doing this in my own language, so you have to use “semicolon” for “please”.

You: [resigned] All right. Fine. Have it your way. Here you go: 5 + x;

Computer: OK.

You: Now if x is 20, what’s the answer?

Computer: What answer?

You: The answer to the question I asked!

Computer: Oh, you’ll want another variable for that.

You: Huh? Oh, fine… call the answer y. And before you ask, the variable y is an integer, too.

Computer: OK.

You: So, I’ve got an integer called x, which in this case happens to be 20.

Computer: OK.

You: Now add five to x.

Computer: OK.

You: Now what’s the value of y?

Computer: Zero.

You: [incredulous] What?

Computer: You didn’t assign a value to it.

You: I want y to be the answer!

Computer: The answer to what?

You: [exasperated] Look, y = 5 + x; OK? Have you got that?

Computer: Yes.

You: And in this case x is 20, which makes y

Computer: 25.

This is the sort of dialog that occurs between the computer and the programmer all the time. Getting into the appropriate mindset to deal with a computer requires a lot of concentration. Programmers call this a state of flow, or being in the zone, where the programmer is able to think like a computer does, so that the conversation above never happens and instead the programmer just types the lines:


AddSomething()
{
int x, y;
x = 20;
y = 5 + x;
return y;
}

Sometimes it’s just as hard to get your mind out of a state of flow as well. That’s part of what makes working at a small software startup like infovark challenging. We have to toggle between pedantic, logical computer mode and natural, relativistic human mode. In one minute we can be thinking about strategic marketing campaigns and the next about how to explain to our idiot kid brother exactly how to do the next step in the task without him messing it up again.

In a way, it’s this frustration that drove Gordon and I to start infovark. We’ve seen far too much software that passes the frustration of being a programmer on to the end user, forcing non-programmers to go through painful, time-wasting conversations like the one above. Right now, we’re going through the tedious process of telling the computer exactly what should be done when so that our customers can get on with the important things in life.

Jabberwocky

Apparently, Gordon and I are behind the times. While we’ve been caught up in a discussion of Enterprise 2.0, ReadWriteWeb reports that the folks at Project10x have already mapped out the landscape for Web 3.0 and Web 4.0. Gosh, that’s embarrassing.

It’s almost as embarrassing as if we just uttered the phrase “Black is the new black” when “X is the new Y” jokes are as yesterday as “that’s so yesterday” jokes.

I’d like to see what a Web 3.0 semantic parsing engine would make of that last sentence. I doubt a linguistics program would come close to understanding what I meant by it. Even us humans have trouble seeing sarcasm in print sometimes. And that’s only one of the reasons why I’m skeptical of the semantic web concept.

Chief among those reasons is the notion that we ought to change the world wide web such that every URL comes with a list of ontologically correct statements that describe the related content in a structured way so that computers can draw meaningful inferences from it.

See, the semantic web is easy! What? Oh, OK, I’ll pause here while you look up the word ontology.

Still not enlightened? Well, here’s the basic idea: The Internet contains a wealth of information. Humans use this data in all sorts of interesting ways for a bewildering array of different uses. At times, though, all that searching and skimming we do can get a little tedious. Wouldn’t it be great if you had a little robot (excuse me, an intelligent agent) that could surf the web for you and assemble all the information you needed? All we’d need to do is restructure all of our messy webpages into a consistent, logical format, build a parsing tool able to read, relate, and understand the information, and construct an artificial intelligence that can apply this knowledge in the context of your daily life. No problem. The scientific community will wrap that up sometime after they finish working on Cold Fusion, perpetual motion, and that personal jetpack they promised me.

I think there are three faulty premises at work here:

1. The majority of us humans are willing to adjust our habits to accommodate our computer tools. If the history of design is any guide, it is the tools that adjust to conform to human habits, not the other way around. We’re not about to redo all the pages on the Internet just so our computers can do a little surfing in their downtime. While certain high-value datasets will incorporate the technologies of the semantic web — RDF, OWL, SPARQL, etc. — the vast majority of pages on the Internet will be plain old human-readable text. Despite considerable investment in the well-understood technologies of relational databases and document management, it’s unstructured information that’s outstripping the structured kind in today’s enterprises.

2. The Web 2.0 revolution was about technology. It wasn’t. The technical ability to blog, to comment on articles, to participate in a social network, to join a discussion forum, and to contribute to wikis, were all secondary to our human desire to communicate and collaborate with other folks. Web 2.0 provided new and interesting ways for people to interact with other people. The semantic web promises new ways for computers to interact with other computers, or, at best, new ways for people to interact with computers. Those interactions might be interesting to us academics, technophiles, and geeks, but I doubt the general public will find them terribly engaging.

3. You can have human intelligence without being human. I’m a fan of Issac Asimov. I’d like to believe that, one day, we can build a machine that can simulate the reasoning ability of the human mind. But I’m also a fan of Douglas Adams, so I believe that any thing we build that thinks like us would also exhibit all of our emotions, idiosyncrasies, and eccentricities. And for all the time, trouble, and expense it would take to create such a machine, creating and training another human would be much easier (and more fun).

Don’t get me wrong; I think that a semantic web could have real benefits. But does it have the potential to be as game-changing as Web 2.0? I think I’d defer to HAL 9000 for the answer:

“I’m sorry Dave, I’m afraid I can’t do that.”

Collaboration: You’re soaking in it

While we’re defining our terms, let’s think about the word “collaborate” for a moment. For the etymology buffs, collaborate has its roots in Latin. “Co-” is a prefix meaning “together” or “jointly.” “Labor” means to work. So to collaborate means literally “to work together.”

It sounds easy enough. People have been working together for thousands of years. It’s an essential skill we’ve developed since humanity’s earliest days in primitive hunter-gatherer societies. You’d think after all that practice, we’d be quite good at it.

Yet you might be tempted to draw the opposite conclusion after looking at all the software tools aimed at fixing collaboration problems. If collaboration is such a simple thing, why is there so much noise in the enterprise market about it? It isn’t because the human race has suddenly become antisocial. It’s because most of our existing computer hardware and software has all the interpersonal skills of an idiot savant.

Just another battleship grey dialog box…

The vast majority of office productivity software got its start in the PC era, from the early 1980s through the early 1990s. During this period, the predominant office technology paradigm was to have a computer-to-employee ratio of 1:1. Also during this period, linkages between computers were rare while linkages between people were common. Thus was born the concept of sneakernet. Sharing and communicating information was a human task; storing and processing information was a computing task. The PC’s of that time were little more than advanced pocket calculators.

What’s remarkable is that that the mindset has persisted into the Internet Age, where linkages between computers are often more constant than the linkages between people. Our computers are used for much more than information processing and management. They are now tools for communication and self-expression. As such, they can become social objects in their own right. But it will only happen if we in the tech industry can get the interface right. Just as in real life, appearances matter and bad behavior is noted on the permanent record.

The buzz around collaboration technologies means that the software industry has noticed that the thing we do most with our computers is work with other people. The first generation of enterprise software got things wrong by trying to gather the data together while keeping the people apart. The next generation of software may very well do the opposite, by bringing people together while keeping the data separate.

This idea is at the heart of the infovark solution. Everybody has their own ideas, thoughts, documents, and messages. Some of these need to be shared with others. We want to enable that communication in the most natural and seamless way possible, without impinging on other coworkers’ space. We want to find and retrieve only the most relevant items, rather than distracting employees with useless data. We want people to collaborate as they always have, while allowing the computer to track, process and manage the information that results from that collaboration.

A line of shiny happy plastic people..

Collaboration is not new. It’s at the center of every business enterprise. What’s new is the emergence of software to enhance that collaborative experience.

An Enterprise 2.0 Definition

There’s a change blowing through the dusty confines of enterprise software. Even establishment figures such as Bill Gates and Robert Scoble have begun criticizing it. Then half the tech blogosphere joined in. The alternative appears to be “Enterprise 2.0″, but what does that really mean? It’s time for us to have a go at defining this nebulous and controversial term.

Oh, Please…

Lots of people are uncomfortable with the phrase Enterprise 2.0. (The wikipedians are in a state of constant merge/don’t merge.) For the progressive and hip, appending the “2.0″ to anything somehow makes it fresh and trendy and interesting again. I understand that. To the more pragmatic and cautious among us, however, it sounds like an over-inflated and hype-laden marketing fad. We want to avoid making big promises and then looking stupid later. Should we find another label?

Most of the complaints stem from the fact that both parts of the term are hard to define. I’ve written so much code lately, I immediately thought of it as an array:

String[] TheProblem = “Enterprise 2.0″.Split(’ ‘);

TheProblem[0] - Defining “Enterprise”

Dean and I currently use this as our working definition: An enterprise is a group formed to work on a task that is too big for one person to accomplish alone.

To us, it doesn’t matter if you are two people or 20,000; As soon as you find that you need to add a second person to get whatever it is done, your effort just became an enterprise. And no matter the size, a bunch of people gathered together without a job to do is definitely not an enterprise. (It might be a Facebook or Myspace, though.)

Both parts are necessary: You must have multiple people working toward a goal to qualify as an enterprise. If you’ve got those things, you’re the target market for the tools emerging under the Enterprise 2.0 banner.

TheProblem[1] - Defining “2.0″

When television broadcasts first started, people weren’t quite sure what to make of them. The new technology made it possible to beam entertainment into people’s houses, and so the broadcasters turned to existing sources of entertainment — theatre and radio. During The Golden Age of Television (1949-61), the most popular programs were adapted radio plays or live “telecasts” of Shakespeare plays and the ballet. They simply took old media and repackaged it in a new form.

A second wave of innovation occurred as people became more comfortable with television. They began experimenting with the new medium, trying different approaches to producing and delivering the content. Television programming branched out, fueled by advertising and new business models, and changing personal preferences. Existing genres spawned entirely new sub-genres and whole new forms of entertainment appeared.

The Internet has gone through a similar transition, in what Tim O’Reilly famously termed “Web 2.0“. This is the point where the Internet changed from being a publishing medium to an interactive platform. Like it or not, we all add content to the Internet now, not just companies, scientists and scholars. Just as with television, this new medium offers us new and different opportunities. Things like User Generated Content (Happy Birthday, Wikipedia!) are hallmarks of Web 2.0.

Back to our definition: The “2.0″ bit is about leveraging Web 2.0 tools for work. It’s about applying some of the lessons from the public Internet space to the smaller, private confines of organizations. Not all of the Web 2.0 concepts will make the jump to the “small cloud”. Some will be more valuable than others. As with all software, actual mileage may vary.

TheProblem.Join();

So there it is: Enterprise 2.0. If it helps, think of it as “Enterprise Web 2.0″.

As to this notion that Enterprise 2.0 doesn’t exist because there is no market, I call shenanigans. Businesspeople have spent money on trying to improve their organizations in the past. They will continue to do so. If Web 2.0 tools provide value — and we believe they do — they will start to permeate the organization, regardless of what you call them.

And to those who say “It’s just marketing hype“, well, is that so bad? Enterprise Software 1.0 is seen as boring, complex, and hard to use. It has a dreadful reputation among users, consultants and developers alike. Perhaps encouraging people to expect more from their enterprise software will drive us all to meet those expectations.