Foo Hack » 20/20 Hindsight Isaac Schlueter on Web Development Tue, 03 Nov 2015 06:34:16 +0000 en Software Development Meme Sat, 27 Sep 2008 21:35:55 +0000 Isaac ...Read More]]> I’ve been tagged by fellow yahoo and javascript hacker extraordinaire Matt Hackett.

How old were you when you first started programming?

I guess I was about 7 or so when I first typed BASIC commands into my dad’s DOS computer. Back then, buying a “computer game” meant you bought a book and typed it up. And then it didn’t work, most of the time.

In High School, I got into programming for the Ti-8x series of graphing calculators, so that I didn’t have to memorize any of the equations in Calculus or Physics. Mostly, those programs were designed to let you enter all but one or two of the variables in an equation, and then they’d solve for the missing piece, so that I could finish my tests in record time. One teacher accused me of cheating once, but she let it slide when I showed her how I wrote the program.

I also wrote a few simple games for the Ti, and heavily modded Drug Wars to add graphics and some new game mechanics.

What was your first language?

QBASIC was the first language I was exposed to, but the Ti’s BASIC-esque language was the first one I ever got creative with.

After that, it was nothing but C and C++ in college.

What was the first real program you wrote?

I consider those physics and calculus shortcut programs in High School were “real”, because I ended up with customers, and having to do tech support and take feature requests. The Ti had a data port that would let you send programs from one calculator to another, so other students started passing my programs around, and bugging me for new ones. Early on, I learned the importance of “no warrantee expressed or implied”.

What languages have you used since you started programming?

  • C/C++ in college
  • VisualBasic, in its ASP, compiled, and Script forms
  • php
  • javascript
  • bash
  • perl
  • sql

and strictly dabbling for fun or education:

  • erlang
  • python
  • ruby
  • ada
  • lisp (scheme and arc)
  • java
  • flash
  • haxe

What was your first professional programming gig?

At Data Strategies, I started out in technical support, and after a few years, did some part-time programming. Eventually, I became the “web guy”, in charge of the help pages and website, doing everything from server-side programming to javascript to graphic design to technical writing.

If you knew then what you know now, would you have started programming?

Yes. In fact, I would have probably pursued it a bit more aggressively. A lot of my education amounted to various forms of underwater basket weaving. But a lot of education is really about self-discovery, not just learning skills, and so maybe it’s better that I didn’t.

If there is one thing you learned along the way that you would tell new developers, what would it be?

Read a lot of code.

Go to college, but don’t stress too much if you don’t, or if you don’t finish. It’s no big deal, really. College is a great forum to learn about yourself, what you like, what you’re good at, etc.

Learn to talk to people, both online and in person. Programming is a team sport most of the time.

Deal with real live customers as early in your career as possible.

Be compassionate. The user has entrusted you with their time and data. Care about that.

Program for fun. Fall in love with coding, but not with code. Never be afraid to rewrite something.

What’s the most fun you’ve ever had… programming?

The most fun thing in the world is making something work that didn’t work a little while ago. It’s a high that’s disturbingly akin to hard drugs. It keeps you up, makes you forget to sleep, subsumes all other pleasures, and is never enough.

Of all the projects I’ve been a part of so far, Yahoo! Buzz was the most fun to work on. But really, my favorite kind of programming, the thing that recharges my soul, is just wiling away a Saturday hacking on something without any constraints or compromises or deadlines.

Who’s next?

I’m going to keep this inside the yahoo garden for now, and kick it over to another cubicle neighbor Laurie called Seldo, a very talented writer and programmer.

Programming Puzzles and Our Mismatch Problem Mon, 07 Jul 2008 17:00:46 +0000 Isaac ...Read More]]> In interviewing candidates for programming jobs, a common technique is to ask them to solve some programming puzzle. Makes sense, right? If the guy’s smart enough solve random silly questions, he’s probably good at programming, since that’s most of what programming is.

As it turns out, this bit of common sense is common bullshit. It’s just another mismatch problem, along with requiring elementary school teachers to have lots of formal education, cops to be big and strong, and law school applicants to have great grades in high school. It doesn’t predict success even a little.

A Tale of Two Coders

Feel free to skip to the fun stuff.

Let me tell you about two programmers I’ve worked with.

The first graduated from Stanford University in the top 10% of his class with a degree in Computer Science, and went on to get an Master of Science in the subject. He knew about B+ trees and maps. He could tell you what a directed acyclic graph was, and what it should be used for. He built an MVC system from scratch to design business cards in a web browser, 2 years before Ajax was “teh new hotness”. He interviewed well, and had a host of companies to choose from. He chose a job, and was one of the highest paid new hires in the history of the company.

The second graduated from high school, and had absolutely no intentions of ever taking classes again if he could help it. Not sure what to do with his life, he worked at a local electronics store (Circuit City, I believe) for a few years. He’d messed around with computers plenty, programmed a bit, but nothing serious. A friend of his worked at a software company, and managed to get him a job, despite his lack of experience and education, and despite the fact that he interviewed terribly. He came in at the low end of the pay scale.

Who was the better programmer?

Since I tipped my hand by talking about the mismatch problem, you’re probably guessing that the second one was better. You’d be right. But I doubt you’d realize just HOW right you are.

Despite the fact that I think he deserves any reputation his lack of skill earns him in life, it strikes me as being in poor taste to name him here. Let’s call the first programmer “X”.

Over a year after X left the company, one of the other guys found that he could reliably predict and fix crazy strange bugs by searching for the guy’s initials in the codebase. (There was a fairly strict rule about commenting changes in existing code, which, thankfully, X followed.) I’m talking real bone-headed stuff like:

If Len(".837") = 3 Then

When is “.837″ ever 3 characters?! To make matters worse, that If block was wrapping about 250 lines of code, some of it essential to our customers getting paid. X was clearly operating in some kind of alternate universe. Real DailyWTF type shit. And, he was the kind of asshat who was nearly impossible to work with. I mean, imagine any quality that a programmer needs to have, except for IQ, and he lacked it. He was arrogant, rude, passive aggressive, and lazy. He was a bully who would go out of his way to make people feel uncomfortable once he decided that he didn’t like them. Every design discussion was an Argument from Intimidation—either you agreed with his idea and stroked his ego, or you were an idiot, plain and simple. He was good at (useless) puzzles, but his attention to detail in real work was beyond terrible.

Within 2 years at the company, the second guy—the uneducated, inexperienced, bad interviewer—was one of the go-to architects who really grokked how everything was supposed to work. He picked up Visual Basic fast enough to pass by most of the existing team, some of whom had been writing code since he was in high school. He was responsible for designing and implementing a part of the software that was the primary killer feature. He redesigned a huge chunk of the program that never quite worked right. He was in databases, in the presentation layer, and in between. By any estimation, a very significant portion of the product’s value was entirely his doing.

After we’d both left that place, I referred him to Yahoo. Despite not having very much experience in front-end web development, and again interviewing terribly, the hiring manager was wise enough to heed my very strong recommendation. And good thing, because he very quickly became one of the most important members of the Yahoo Games team. (And he occasionally reads this blog and comments on stuff. Hi, Geoff.)

So, at this point, you might be thinking, Well, if the super educated brainiacs are bad programmers, and the lazy hobbyists are good programmers, then we just need to flip the test around, and use it in reverse. Then we’ll find the Geoffs, and avoid the Xes.

If only it was that easy.

You see, there actually are quite a few very good programmers that are very good at silly puzzles and have degrees in Computer Science. Almost every problem has some kind of mathematical component; a lot of the theories were discovered because they’re true and relevant. Some of X’s abilities are quite useful, so having both the will and the skill is best. The hobbyists eventually find that they have to hit the books and learn theory at some point, or else they get passed by.

But those skills aren’t nearly as useful or predictive of programming ability as we might think. Geoff has the attitude of a great hacker and a mind that is capable of learning quickly, which, as it turns out, is much more useful in the long run, and much harder to test for. X had a big brain and a bad attitude. Most of programming is not solving puzzles with algorithms. Most of programming is communication, attention to detail, and a relentless desire to build something beautiful.

Some Puzzles

Despite the fact that programming puzzles are almost 100% useless in the hiring process, they’re fun, and a good mental work-out to keep your thinking sharp. They’re a good part of a practice regimen. Here are a few that I’ve come across lately that were pretty interesting. (Sadly, my beliefs about the foolishness of puzzles-as-hiring-tool are not shared by all of my managers, and I learned about two of these because they are used in our interview process.)

I’ll edit this post to include solutions later. I didn’t make up any of these, but I did revise them somewhat. The goal in each of them is to devise a program or algorithm that will find a solution in the least number of steps/iterations/whatever.

Square the Sum

For all 6-digit numbers from 100000 to 999999, find the numbers that, if you add the top three digits to the bottom three digits, and square the result, it will equal the original number.

For example, for 123456, you’d add 123 and 456, which equals 579. Then, square that sum, which yields 579 * 579 = 335241. 335241 ≠ 123456, so 123456 is not in the set.

Dropping Eggs

Let’s say that you have 2 eggs, and a building that is 100 floors tall. You need to figure out how high up you have to drop the egg to have it break when it hits the pavement. Assume that the egg either breaks completely or is completely undamaged. That is, repeatedly dropping from the second floor will not make it more likely to break. (Hypothetical eggs are very hard, but when they break, they really BREAK.)

For example, if you drop the egg from floor #50 or below, it won’t break. But if you drop it from floor #51 or above, it will break.

What is the optimal approach to testing floors? Assuming that you take that approach, and the egg breaks on the last floor you test, how many times did you have to drop it?

Part 2

As the number of floors n increases to a very large number (millions, billions, whatever—since it’s really not floors and eggs but a sorted database of records or something), how does your solution scale?

Let’s say that you have 3 eggs. What’s the value now?

As the number of eggs increases, how does the worst-case number of tests change? If you had an unlimited supply of eggs, is there a better solution?

I heard this one at work, and it sounded kind of familiar, but I didn’t remember the solution right away. I dug up my textbook from “CSC212: Data Structures and Algorithm Analysis”, and sure enough, it was one of the examples Dr. Sayed used to teach us big-O notation.

Non-Repeating Digits (Cedric’s Challenge, slightly revised)

Find the count of all natural numbers below a certain number of digits that have no repeated digits. For example, for length=2, the following numbers all satisfy: 10, 12, 21, 23, 32, 34; but these don’t: 11, 22, 33. For length=3, 97 and 102 are valid, but 99, 100, and 101 are not.

Additionally, find the two consecutive numbers that are furthest from one another, and the difference between them. For example, in the length=3 case, the greatest difference between two consecutive numbers is 4, between 98 and 102.

For example, in length=2, there are 90 matches. (1-99, except for 11,22,33,44,55,66,77,88,99.) The biggest jump between two consecutive numbers is 2, between 10 and 12.

Part 2

In addition to specifying the length in digits, also make the base variable. For example, in the (base=3,length=3) set, the following numbers are valid: 10, 12, 20, 21, 102, 201.

Compute the values for length=100,base=1000. Speed matters.

Part 3 (Cedric’s Challenge + arbitrary bases)

Print all the numbers in order before printing the count and difference. (Hint: if this doesn’t make it any more complicated, then you didn’t do parts 1 and 2 properly.)

Since the base can be arbitrarily high, express numbers in bases greater than 10 as a comma-delimited tuple rather than using character digits, optionally with a trailing comma. For example, the base-16 number normally written as “FA9″ could be printed as either “15,10,9,” or “15,10,9″.

Birthdays, 10,000 Hours, and the Myth of the Ding Tue, 01 Jul 2008 17:00:41 +0000 Isaac ...Read More]]> My earliest “motion picture” memory is from the afternoon of my 3rd birthday. The footage is shot in a fish-eye lens, and a bit blurry, either because of the age of the memory or because I was always a bit nearsighted. I guess hindsight isn’t always 20/20, eh? It’s only a few seconds long, but there’s a bunch of embedded context attached.

We were sitting at the kitchen table. I was playing with a new toy I’d gotten, some kind of plastic action figure (“dolls” are girl toys), and some lady I didn’t know was talking to my dad. I found myself woefully underwhelmed at the fact that not much seemed to have changed that day.

I’m not sure what I was expecting to happen upon turning 3. Wings? X-ray vision? A car? Something to justify the big deal everyone was making, I guess. I was happy to have gotten toys and to have been the center of attention for a while, but I remember a distinct feeling of disappointment that not much seemed to have “turned” when I “turned 3″. I expected a ding.

The lady stopped talking to my dad and looked at me, saying in that lilting talking-to-a-little-kid voice, “And how old are you today, birthday boy!?” I liked being called birthday boy, because that was a Special Status, but even then, I hated that voice. I remember always being glad that my mom and dad never used that voice when they talked to us, and as an adult, I’ve made a point to never talk to children in that voice.

Aha, I thought (though of course not in these words). An interested adult who will understand and explain this strangeness. What I wanted to say, but didn’t have the vocabulary for, was something along the lines of So, what’s this all about? I’m supposed to be 3 now. Everyone said I’d change, that I’d be a Big Boy now, and nothing changed at all. Did I miss something, or is this “birthday” thing just a very silly custom that makes no real sense? Can you please explain it to me? What I actually did was hold up 3 fingers and say, “3. I just turned it.” and scrunched up my face like I did when something confused me and my mom would explain it to me.

But this lady didn’t explain it. She made some stupid human noises out of her stupid face hole about how great it was and that I’m such a Big Boy now, and went back to ignoring me. She didn’t get it at all! Either that, or she just didn’t care enough to explain it to me. Frustrated, I resumed working out my existential dilemma alone with my plastic superhero, now faced with the additional oddness that apparently some adults are not all-knowing benevolent gods like mom and dad. That’s where the tape cuts out.

I’ve met other 3 year olds since, and my hindsight tells me that I must have been a pretty weird kid.

Flash Forward 26 Years

Today (July 1, 2008), I turn 29 years old. Usually, a month or two before a birthday, I start thinking of myself as the new number, and reflecting on where I am in my life and how the last year has gone. In the last 26 years, I’ve gotten a bit more used to the fact that it’s pretty much just another day. No wings, no super powers, same empty “turning”. Granted, it’s a day that friends buy me things, and I get to do whatever I want without being hassled, but once you get to be about 20 or so, people tend to stop hassling you about your daily routines anyhow.

In reality, you don’t do all your learning and growing and aging on one day each year; you do it bit by bit every minute you’re alive, and just reserve a day each year to celebrate the process. If a little kid ever makes that scrunchy confused face at me about “turning” a particular age, I’m going to tell them this. It would have saved me a lot of angst that day.

This year, I’ve been busy enough with work and personal matters that I hadn’t really had much time to reflect on it. Today, however, something about it hit me that seemed to coincide in an interesting way with some other recent events.

A few weeks ago, a talk by Malcolm Gladwell floated into the “find cool stuff” network that I’ve built up (a combination of Hacker News, Yahoo! Buzz, and several valued friends and associates, all fed through my twitter stream). The talk was about hiring and the “mismatch problem”, and came around the same time that my manager was working on adding some people to our team at Yahoo. In another synchronous aspect to this story, just prior to seeing this talk, a friend of mine had mentioned Malcolm Gladwell to me, and suggested that I take a look at his work. Impressed by his talk, I found a free podcast of all the talks in the conference, Stories from the Near Future. Definitely worth the download time.

10,000 Hours

I don’t remember if it was in the mismatch talk or in his discussion of genius, but he mentioned a point that I had heard tossed around before. Apparently, in almost any discipline with a significant level of complexity, whether you’re talking about chess masters or black belts or neurosurgeons or tennis pros, it takes about 10,000 hours of practice to become an expert. Doing your day job doesn’t count; those 10k hours only take into consideration diligent focused study, actively working to become better at what you do.

This works out to around 10 years, if you spend an average of about 3 hours per day at it. While our species does seem produce the occasional old style “lightening bolt” genius, to whom inspiration seems to come inexplicably from the ether, most “talent” is just work in disguise. Tiger Woods makes golf look easy because he’s spent so much time training. It’s not magic. If you threw 10,000 hours at the task of becoming a better golfer, and you’re in reasonably good physical shape, you would probably play at his level.

While 10,000 hours is a daunting figure, this is actually encouraging information. Many people go to college, and some time after, pick a career, and more or less stick with it for the rest of their lives. You may end up going in unexpected directions, but the basic skill set, the things that you would be practicing, people don’t tend to switch that. It also means that, with little more than a willingness to practice, anyone can become great at almost anything.

But you do need a willingness to practice. A lot. For 10 years. So it’d better be something your really love, or else you may as well quit now.

Thankfully, it’s not like you’d have to suffer through 10 years of utter n00bish novicehood. David Seah wrote a pretty good break down of rough levels:

  • at 1 hour … you know some basics
  • at 10 hours … you have a pretty good grasp of the basics
  • at 100 hours … you are fairly expert
  • at 1000 hours … you are an experienced expert
  • at 10000 hours … you are a master

Practicing Programming

Recently, Jeff Atwood wrote about “code katas” (reviving the old programming/martial arts analogy that programmers love, since it makes us seem way cooler and less beat-up-able). Back in 2005, Steve Yegge wrote about “practicing programming”. They’re two of my favorite bloggers, so I feel like I’m in pretty good company talking about this subject. Jeff Atwood is kind of like a “Steve Yegge for the masses”. Same basic idea, but more frequent and much shorter, kind of like when a good movie gets repackaged into an equally good but lighter TV series.

Steve Yegge captured the difference between doing and practicing pretty eloquently:

Picture the average amateur guitarist: A teenager. Messy hair. Cheap guitar. Plays alone, or for baked friends in bedroom in parents’ house. Knows a few riffs, a few licks. Can play almost every track on the first two Nirvana CDs. Puts on a good show for an hour, if you’re a forgiving listener.

The point that I think both of them make in their different ways is that, if you are a programmer, and you want to suck as little as possible, you’d better practice. Just doing your job is not enough, unless you want to waste away in anonymity maintaining someone else’s code base and doing one-off features whenever the business people make some new deal.

That’s the other hidden piece of the 10,000 hours message, I think. It’s not enough to put in your 10 years and attain mastery and be done. If you don’t keep practicing, skill will fade over time; the greater the mastery, the faster it fades. I once saw an interview on television with Yo-Yo Ma, where he said, If I don’t practice for 1 day, I notice. If I don’t practice for 2 days, the musicians I perform with will notice. If I don’t practice for 3 days, other musicians will notice. If I don’t practice for 4 days, the whole world will notice.

Clearly Ma was either exaggerating for effect, or he had an absurdly high opinion of the common person’s appreciation of cello mastery—he could probably take a few years off before my ears would detect any change. But the point is valid. Enlightenment is a myth. Every day that you don’t get better, you get a little worse. As you get better at something, this fact increases in relevance, despite the common sense belief that some day, you’ll be “so good that you won’t have to practice any more”.

So, you’d better REALLY love whatever field you pick, because you won’t ever be done training. Even Einstein kept at it.

The Past 10 Years

When I started college, I was a cocky 18 year old who knew almost everything there was to know about programming, and just needed to learn a little more so I could go out and do it. I’d been making web pages for a few years already, and was a whiz with BASIC. I added graphics to DrugWars on my Ti-82. My physics teacher only allowed a 3×5 index card of notes for tests, a rule that I circumvented by writing programs on my calculator for all the relevant equations; I remember finishing one test in about 5 minutes, and getting 100% on it. (She accused me of cheating, but let me by when I pointed out that I’d actually written the program I was using, so clearly knew the material well enough.)

My first programming class only encouraged this hubris. After Programming in C I and II, I could do everything there was to do in C as well as BASIC. I was unstoppable. I had structs and subroutines, I was running code on DOS and Unix and VAX. Sadly, I was also a bit bored. But computers were cool, and there was still a few things that I didn’t quite know how to do yet, so I didn’t change my major. After the next few classes, I’d be able to crank out any program that exists, that much was obvious.

Sophomore year was a humbling dose of reality. We started in on Big O() notation, complex data structures, tree walking algorithms, recursion, strange non-procedural languages, and a bunch of other concepts that were brand new to me. I’ll remember 19 as the year that I actually had to study in order to get good grades. To use Stevie’s analogy, that’s the year I stopped banging out Nirvana songs and started learning to read music.

Two or three years later, I remember reading Peter Norvig’s Teach Yourself Programming in 10 Years, which is still, in my opinion, the best “how to not suck at programming” guide that has ever been written. A lot of it was over my head at the time, but I’ve come back to it every few years or so. It’s brilliant.

No Ding

When I sat down to write about Gladwell and practicing and the 10,000 hours phenomenon, it occurred to me that I’d passed the 10,000 hour mark myself fairly recently. Partly because it’s something I’m just interested in, and partly because I always want to be better, I’ve been practicing for about the last 10 years.

Again, I heard no ding. No wings. No glowy effects to signify the XP bonus at the completion of the quest. Nada. Just more work, more practicing, more gradually finding one thing after another to investigate, more new nuggets that haven’t yet been cracked.

My conclusion is that the ding is a myth, for expertise just as much as for birthdays. 10,000 hours is a very approximate measure of what it takes to be good enough at something that you have to look a little harder to keep being challenged, and you can do a few tricks that impress novices. After 10 years, I still learn new things every day, I still get frustrated sometimes, I still routinely feel that sense of needing to catch up, still looking up to programmers much better than myself.

Even Newton said that he felt like a boy on the shore amused by the next interesting pebble while the great ocean of wisdom lay at his back, and that if he saw any greater distance, it was only by standing on the shoulders of giants. If there was ever a person arrogant enough to claim expertise, or more deserving of such a claim, Newton was it.

There is no ding. Just one day after another, in a gradual progression that hopefully leads in a beneficial direction. So keep practicing.

The Internet is (today) a 16 year old child Sun, 01 Jun 2008 06:28:43 +0000 Isaac ...Read More]]> The web today is in its teenage years.

When you were a baby, you had one name (if even that, as far as you were concerned), and a very small network of people that you knew and trusted completely. Access equals trust for a baby. Identity is not worth thinking about, because it’s so simple. Exploration is everything, and while every step is clumsy and every word garbled, it’s all happening for the first time, so it’s magnificent and beautiful. Meaningful accomplishments happen almost daily, and every advance is huge.

The advent of TCP/IP and the HTTP protocol; DNS protocols; the HTML language, and powerful browsers to interpret it; email; the migration of a bunch of different networks into a single over-arching network. These were the internet’s baby steps and first words.

The web entered the “I WANT” phase of toddlerhood through the 90s. Suddenly, the notion that you could actually BUY and SELL things on the web hit the fan. People made MONEY, and that opened up all these doors. Everyone got crazy with the frenzy of it. Venture capital poured into the valley, backed by the absolutely magical idea that advertisers’ budgets would grow as fast as online advertising space. Instead, the simple and timeless rules of supply and demand kicked in, and the bubble burst. The web got put on time-out, and pouted for a while about it.

In the bubble, as in childhood, there were some fantasies crushed, and some lessons learned. We got Yahoo and Google and Amazon out of that frenzy, and a bunch of other technologies and companies and insights that I’m sure we’re all really glad to have. didn’t make it, but let’s face it, was pretty damn stupid. I pick on unfairly, because it’s one of the only failed bubble companies that I remember. But I do remember, and that’s actually pretty respectable, compared to all the other failures that are completely forgotten.

Between the bubble bursting and today, the web has been in Junior High. Angsty, a bit more aware of the world, and just starting to make the first groping steps towards self-identification and social activity; but it’s still essentially immature. Friendster and Blogging and MySpace and Facebook got everyone realizing that the web really is a person-to-person thing, and not just a company-to-consumer thing. And of course, there have been posers at the party, just trying to look and act like the popular kids to get attention. You know the sites I mean. It’s a revolutionary new site! It’s got badges, and you can build a friend list! Upload your avatar! But you do that, and realize, there’s nothing here.

As in junior high, splitting the quality from the chaff is pretty tricky. I didn’t sign up for Twitter for a long while, just because I’ve gotten burned by the early adopter tax too many times. Yes, I know all these sites don’t cost money, but they do cost time, and that’s a limited resource. If I sign up and enter my info and upload an avatar and find my friends, and then never use the site, I’ve just wasted a lot of time. And it’s not fun enough to justify the expense.

The High School years, and especially the “tweens” from about 9 to 13, are often marked by exactly this sort of constant self re-invention, but it’s very superficial. You identify with a tribe based on music, or hair styles, or clothing. It’s practice for the real world when no one will establish our identities for us. Since they don’t really understand yet who they are as people, or what kinds of people they really want to be around long-term, kids in this age tend to get by with trial and error. Before this age, children don’t really “own” their identity; they are what their parents say they are. By the time they get to High School, they’re driving the identity ship, even if they do sail it around in circles.

The “social networking” sites, even the more useful or popular ones, are essentially shallow. There is a concept of a “friend”, and that’s it. Either we are friends, or we aren’t; maybe there’s 2 or 3 groups that I can put my friends in, but that’s just 2 or 3 binary choices instead of 1—there’s still very little richness. We need to invent our identity and pick our clothes every time we want to use a website. Without a lot of formal introductions, this group of friends knows nothing about my other groups. And so on.

Some people make a few life-long friends in High School, but that’s pretty rare, I think. More common are people who part ways, and then meet again after college, and find that they once again enjoy each others’ company. Far more common than that, though, are people who branch off after high school, and never look back, (except when they get a friend request on Facebook, that is, and even then it’s just a bit of Oh, you’re doing good? Me, too. You hear Joe had a kid? Yeah, I know. Well, take care! and then they go back to doing their own separate lives again.)

In college, things generally change. Some kids keep experimenting with different faces for a while, but at some point, they realize that they’re going to have to be grown-ups, and they’re hopefully faced with enough challenging work that the games get to be less relevant. When you have to keep a C+ average to stay on the football team and keep your scholarship, it doesn’t make much sense to be mean to nerds. The adults around you gradually stop telling you what to do, and instead tell you to pick what you want to do. The depth of our social interaction changes, as well. People date in high school; in college, people get married and have kids. (Not many of them any more, but we all probably knew someone who graduated pregnant. I was born while my parents were both students at USD.)

When you get out of college, they stop telling you to pick what you want to do. If you don’t want to do it, you don’t. The relationships are as deep or meaningless as you want them to be. You’re limited only by your own imagination.

I think that, today, we’re somewhere close to the highschool/college cusp. If the web is a child, it’s about 16; just got its drivers’ license, but still doesn’t have anywhere really worthwhile to go. The most interesting aspects of the web’s maturation are, in my opinion:

  1. Consistent, user-owned identity, which doesn’t change from place to place. I’m talking about OpenID, but OpenID is just part of the solution. OpenID is a name, but identity is also a whole brand. We’re not quite there yet, but the OpenSocial API specification and Facebook’s opening up of their APIs promises to lead towards some portability. And of course, there’s Own Your Identity and their yet-to-be released product, which looks very interesting. I’m definitely keeping my eye on that.

    The challenge will be to eliminate the management overhead of multiple personas, without eliminating the expressive power it affords. Your profile on LinkedIn might not be quite the same as your profile on Without user-controlled privacy, there’s no ownership in any meaningful sense, and thus, limited relevance. And, if it’s not easy, it’s not a solution.

  2. Many shallow social networks merging into a single rich matrix. While each site may only have one concept of “friend”, every one of their implications are a little different, and when I can link them all up to a single point of identification, it becomes very powerful and expressive. Just as you can have coworkers, friends, and family, and some coworkers are friends, some friends are family, and so on; if identity was user-owned and consistent, I’d be able to have twitter friends, some of whom I’m also connected to on Flickr, or talk to on IM, and so on. That social matrix exists today, but it’s very difficult to leverage.

    It’s yet to be shown (or even, fully conceived) what kind of information and usefulness can be teased out of this matrix. First, we need straightforward protocols to get at the data, and then I think we’ll all be surprised at how it can be used to enrich our lives.

That’s really what it’s all about: enriching the quality of our lives. People like to bitch about technology, but I think that’s just because people like to bitch. Remember in 1990, when you didn’t have a cell phone? What a compete and utter pain in the ass it was to meet someone at the movie theater? Remember when, if you wanted to show someone a document, you had to print it out—or, worse yet, photocopy it—and physically bring it to them? These are my “uphill both ways in the snow” stories for future generations.

The fact is, these things do make our lives better, overall, even with the new ways that we find to get annoyed by them. I’m very excited about what the Internet will look like when it’s all grown up.