Tuesday, November 13, 2007

Why Facebook Works

A few weeks ago, perhaps even a bit longer than that, I was invited to get a Facebook account. I had never thought about using, say, MySpace, but I had been somewhat intrigued by Facebook as a cleaner version of MySpace.

But until I started using Facebook, I didn't realize what was its appeal.

To take stock of this, let me backtrack a bit. One of the earliest social networking sites of the ilk of MySpace was LiveJournal. LiveJournal has been around a while, and it focuses on one thing: blogging. You can't do that much more than blog. You can add friends, but mostly it's just their names.

MySpace also allowed for blogging, but you don't have to if you don't want. You can put some information about yourself. It has a few attractive features. First, you can add music fairly easily. There's an annoying player that starts off when you visit a page. And, then the other part, as far as I can tell, was the list of friends, which you showed off like collecting cards, and these two aspects, music and a long list of friends, seemed to appeal to lots of teens (and horrid backgrounds).

Facebook seems to dispense with blogging altogether. It's not easy to point to why Facebook works, but in a nutshell, I'd say it's the constant feed.

You have a feed of what all your friends are doing, and this constant activity lets you see who becomes friends with whom, and what groups or networks people are joining, what games they might be playing, and then you can "poke" people as well, forcing interaction in the simplest of ways. Facebook is kind of a mishmash of features from stuff like IRC (in slow motion) and game-playing.

I go to do two things. First, to add more friends to see what they are doing, and then to play this movie game, which I do partly to annoy someone else, and partly because it's mildly addictive (and not very satisfying, I must admit, though it's decidedly clever by not telling you what the top scorers have score, but merely telling you your rank).

And there is a twitter like status bar letting others know what you are up to. In a weird way, it's news of your friends, and it feels like this idea grew organically rather than being completely planned. This feed idea works even as many people who use Facebook don't even know what a feed (e.g., an RSS feed) is.

I talked to someone who's younger than I am, but has a pretty busy schedule who feels (correctly) that he has no time for this. In the end, Facebook is a time-sink, whether you are interacting with your friends, or doing individual activities.

I suppose Facebook also appeals to Web 2.0 folks, because it has the fade effects, and overlays, and so forth. Stuff you expect to see in typical Web 2.0 sites.

I dunno how long this will last, but I came to it late, and people still seem to be doggedly involved, even as many have abandoned MySpace, partly because blogging is way too time consuming for most people, whereas a Twitter like status is low barrier to entry. Rather than spew paragraph after paragraph, it's only one line, and the others read it, and possibly react to that one line.

I'll fill you in if I figure out more about why Facebook works so well.

Monday, November 12, 2007

Repeat Business

I was at the orthodontist a while back. For some reason, there were several seats side by side. Perhaps it's because it's cheaper not to have several rooms, or they were meant for kids, but now have been retuned to handle adults.

In any case, next to me, two people were discussing their Comcast cable, and basically complaining. Here's the issue in a nutshell. Comcast provides cable and charges probably 40-60 dollars per month. People just don't like spending that amount per month. If they could get the same service for, oh, 20 dollars a month, they'd be super happy. Maybe not super happy, but happy.

And this has prodded some people to get rid of cable altogether, because it ain't cheap. The basic point is that people don't like monthly charges. Rent is bad enough already, but when you add on top of that services like TV, people start to think, is it really necessary?

Clearly, the cable companies want you to spend as much as possible, and people do. Is there going to be some valid alternative?

And maybe this is why DVRs haven't been more successful. Tivo requires monthly fees too. Even though it's about 15 dollars a month, when you add all the other monthly fees people pay, it adds up.

DirecTv has a clever add. They claim they have monthly services of 30 dollars a month. That's true, but the services are minimal, and the next service up is almost 50 dollars a month. It's not like you get more value at 35 or even 40 dollars. It jumps up 20 dollars to get the next set, and that's where most of the interesting stuff (for most people) are. In a sense, you aren't saving that much over regular cable, but many companies do stuff like that.

The most devious of this is U-Haul, that advertises 20 dollars. But there's that sneaky "plus mileage", which is often a dollar a mile, so you easily double it, and then they suggest insurance, and pretty soon you are paying 70 dollars, not 20, and you realize that 20 is totally ridiculous. You imagine the government would step in and force them to advertise something far more reasonable, which, of course, they won't.

It's too bad we don't have more people fighting on behalf of the consumer, who, by their very name, already consume more than they should.

Saturday, November 10, 2007

Ephemeral Actor

It's 7 AM, and I'm watching Whit Stillman's Metropolitan, and I was curious who played some role. After checking out with IMDB, I think it's Edward Clements, but even if it isn't, Edward Clements is interesting because he's only ever had two roles, the one in Metropolitan, and a smallish role in Star Trek 6.

And that's it. It's not perhaps nearly as bizarre as Chris Tucker's career, who, despite a flashy (read, annoying) role in The Fifth Element has really only had three roles in the last 6 years, namely, the three Rush Hour movies. You'd think Chris Tucker, a guy you probably have heard of, would have acted in something else.

In any case, Edward Clements. Here was a guy who had two roles in the space of two years, and it seems his first role was a rather large role in a rather unknown film. People who watch films, and I mean a fair bit of films, are likely to know of the quirky films of Whit Stillman, with his mannered characters and mannered dialog, it seems much like a British film of manners set in the US, which lends to its strangeness, as no one else makes films like it (which doesn't mean it's exciting, just different).

And as many people of that generation weren't really computer savvy, Mr. Clements appears to have disappeared. Where is he now? How did he get this role to begin with given that he's never acted before? Friend of the director?

And this, I imagine, is the story of many an actor, who has a breakthrough role (as much any role in a film is breakthrough), then decides, a year later, that they aren't going to be an actor anymore?

Such an ephemeral job, acting.

Thursday, November 08, 2007

Array Array!

Much in the tradition of repeated titles such as Europa Europa, Jamon Jamon, and Corinna Corinna, there's Array Array!.

Except this is not a film, but a play on words. "Array" roughly "hey" as in "hey you" in Hindi. And in computer-ese, arrays are the simplest data structures beyond the lowly variable. Once you teach a beginning programmer a variable, if-then, then it's time for loops and arrays. And, in this day and age, the next step is objects.

We say familiarity breeds contempt, but it also breeds love. People gravitate to the stuff they find easiest. Since arrays come so early on, people use arrays, even as, in principle, they learned objects.

To give a more drastic example, I heard of a project where students were asked to design classes for a project. Up until that point, they had been told classes and methods to implement. They didn't have to think it up themselves.

When asked to do this project, students fell into one of two categories. Those who used one super class to do everything. And those who treated each class as if it were a variable(!). Thus, if the program needed ten variables, they created ten classes.

Indeed, you also find, despite knowing better, that beginners prefer to write super functions hundreds of lines long rather than break it up into functions. The thought of having to pass variables to functions, even to break down a problem into functions drives them nuts. They have no idea how to do it. Indeed, given their druthers, they might prefer to code in FORTRAN, and forget about modular design, despite all attempts to teach them otherwise.

I have an idea how to solve this.

Teach design.

And teach design separately from coding it up. There's perhaps many a entry level coder, who goes to a computer job, and finds execs who've never programmed seriously a day in their lives making decisions on how this should be done and that should be done, and says "I could make those decisions too!" (They probably can't, but it seems easier than coding).

Design is something like making managerial decisions. If you don't have to code the design up, you might create a more sensible design. Then, the design can be critiqued on its own, and eventually, this might lead to better designs, which means coders will care about design rather than care about getting the code to work with the least hassle possible.

Of course, after the novice coders create a design, then they should implement it, to see if they regress into arrays and huge functions. If they don't, then the idea has merit.

Tuesday, November 06, 2007

On Awesomeness

I'm listening to All Kinds of Time by the group Fountains of Wayne who made such quirky pop-melodies as "Stacy's Mom", a song about a guy who's fallen for Stacy's mom (implied that Stacy is his age).

All Kinds of Time is about football, but more precisely, it's about reaching a kind of nirvana in a sport where avoiding mistakes is emphasized. To give you a sense of this, football (American) is essentially a game of errors. A quarterback tries to make good plays, while avoiding giving the ball to the opposition.

A quarterback's mistakes are no more dramatized then when he passes the ball, because this is a high risk move, that can lead to turnovers. In football, a turnover means the other team's offense gets control of the ball, and if you are deep in your own territory, it can be an easy score for the opposition.

In a typical scenario, the offense must move the ball about 80 yards to score a touchdown. They have three chances to move the ball ten yards at a time. If successful, they get three more chances, otherwise, they typically kick the ball to the opposition. Kicking the ball typically puts the ball deep in the opposition's side of the field, meaning they have to go about 80 yards to score.

If, on the other hand, the quarterback turns the ball over, the opposition might get the ball and only have to go, say 40 yards. In football, the shorter the distance, the better your chances to score. Turning the ball over means you've (temporarily) lost the chance to score, and your opponent may have a great chance to score.

When passing, a quarterback may only have a few seconds to decide whether a receiver is "open", i.e., it's safe enough to pass the ball without the defense (the opposition) intercepting the ball (thus, turning the ball over to the opposition). The more time a quarterback has to throw, the more likely they can be successful in making a decision. Even so, quarterbacks get desperate, and feel they can "squeeze" a pass, and often this leads to turnovers.

The song, then, is about when a quarterback has "all kinds of time" to make a pass. Even though the offensive line has a lot to do that, the song is about reaching a point when the quarterback "gets it", and that he's going to be successful. It's the aha! moment.

This leads me to Eric Hodel.

I was talking to Eric Hodel in what has to be the creepiest way to talk to someone (well, not really), which is merely to hang out while he's having a conversation. You resort to such breaks of decorum realizing such opportunities are pretty rare. After all, I'm not likely to meet Eric for months at least.

Oh, yeah, who is Eric Hodel. Hmm, well, that's a good one. From what I gather, he's a prolific Ruby coder who's contributed a lot to the open source community, in particular, writing autotest that removes one layer of human involvement in getting tests run. He's apparently written a fair bit of other code too.

From his talk, and from his general appearance, he seems like a meek personality, so it surprised me a little, when I followed up and asked him how does one become a good coder.

And he says (more or less) "Some people code, and some want to be awesome. I want to be awesome.".

Thoughts of Zig Ziglar came to mind. Zig Ziglar, as I mentioned in a previous blog, was a Christian motivational speaker back in the 60s, and might have single-handedly lead Americans to emphasize everything to the Nth degree. Rather than say "I'm good", you say "I'm great!". And of course, leading to "I'm awesome".

It was a brief comment, probably meant in the simplest of terms.

Eric Hodel wants to be awesome.

But as I am wont to do, I thought about what this meant, especially in light of what Marcel Molina (Junior) said about beauty.

Awesomeness, at least, when it applies to a person seems equivalent to "I do awesome things", which is more like "I write awesome code", as opposed to "My personality is awesome". Awesomeness, in this respect, appears to be about action. Getting stuff done. It is, presumably, also about a state of being. It is a goal, a task.

Awesomeness has a catch.

How do you obtain it? Part of it is, I'd imagine, inherent. For example, if you've never trained to be, say, a tennis player, then to be an awesome tennis player may be out of your grasp. However, if you've been a pretty good coder in some language, or if you're still in school learning to be a good coder, then becoming awesome might be in your grasp.

I had planned to ask Eric why he thought his talk was popular. He had given a talk on how to be more productive. My guess? People want to be more productive. But more importantly, they want to know if there's a secret. What does one of the most prolific coders in Ruby do, and can I do the same thing?

The likelihood is no, you can't do the same thing. You can only do better relative to yourself. Eric said that, in the end, he writes open source for stuff he cares about, and that he's not out to fix everyone else's wishlist of missing features. He figures they could do it.

Except, of course, they can't or won't because it takes too much work or smarts to be awesome. It's hard! They lack passion and brainpower. Eric might rightly point out, yeah, well that's your problem. And that'd be completely fair, which isn't to say some people don't ask anyway.

In some disciplines, most notably sports, there appears to be some criteria to judge how awesome you are. You can compare where you are to where you want to be. With coding, that's not nearly so clear. How do you know what to do to get better?

And in the end, why do we want to be awesome? Is it because society places a premium on success? That we strive to be better than others because we have pride? Or does it merely facilitate doing things. If I'm awesome, then I can things I want to. If I'm an awesome basketball player, I can dribble-drive and dunk. If I'm a chess player, I can compete against grandmasters.

And does the pursuit of awesomeness (as opposed to happyness) make one much more likely to achieve this level?

Somehow, I think it might make a difference.

Sunday, November 04, 2007

Ruby and VoIP

Jay Phillips (hope I have his name right) of Adhearsion gave the third talk this morning. You might imagine that there wouldn't be that many people interested in telephony, or at least, writing software for telephony (just like far fewer people design cars than drive cars), but the Ruby community seems diverse, and a good number of people had had some experience in telephony.

His talk was putting a Ruby layer on top of Asterisk, an API for telephony, that would make coding telephony applications easier than it is now.

My point isn't to summarize his talk, but to summarize the way he gave his talk. The most successful talks do several things right, and one thing that is amazingly overlooked is sound. Universally, getting audio right is horrible. No one can seem to do it. It requires engineers, you need to be close to the mike, and so forth.

Some guy named Dr. Nic gave a talk. Between his accent and the volume, it was hard to hear what sounded like quite an entertaining talk. If you do nothing right, make sure you can be heard. It is absolutely critical to a good talk. It can torpedo a great talk, which is why folks like Dave Thomas seem to know "get the sound right".

The second key is to have minimal slides. Play a bit with the fonts so it looks aesthetically pleasing, but don't cram much information. If you do, it's probably too technical for a crowd like this. Some of the most successful talks seem to be the least technical because it appeals to a wide crowd. Talks that make people think, even as it may not offer much in terms of improving skill, can be far better than those that attempt to teach something that requires a lot of time to figure out.

And so this talk went well because the sound went well, the slides were good, Jay spoke well. It meandered a bit at the end when he was just doing demo after demo, but other than that, it piqued interest, which is what most talks should aim to do.

The Unbearable Lightness of Being Matz

Yukihiro Matsumoto goes by the name "Matz". He's been going by it so long that I'm sure few people know his full name, being typically polysyllabic as Japanese names are wont to be.

Asian society tends to favor modesty, and so I had come to the talk a little late, but then it was running late anyway. "Matz" had been sitting up in the front row (I was in the front row, but off to the side) with his mini laptop clicking away on previous days. At least, they had a spot for him. But today, he stood near the back for some of the talks, standing, because, he wasn't going to be so presumptuous as to take someone's seat. After all, he's a nice guy.

But it's still interesting to see, that a society that emphasize modesty and circumspection affects its people so profoundly. You never know. Maybe Matz is really proud of what he's done, and perhaps that has gone to his head, but no one much could tell if that were the case.

It's a bit of a contrast to DHH who kinda revels in his rock star status, wearing his slightly modern indie dragon clothing. To be fair, Matz wears a leather jacket, jeans and nice shoes, creating the aura of Western cool, combined with typical Japanese reserve (mostly the language).

I had bumped into some woman getting an omelette this morning. She was asking what was going on in the conference, and the guy making omelettes said there was a Ruby conference (in addition to weddings and such). So I explained a bit about Ruby to her, which is to say that I told her it was a programming language (had no idea if this even rung a bell) and that the inventor of the language had come from Japan, and people were there to see him.

That wasn't entirely true, but neither was it entirely false. She seemed amused at the idea, but I'm sure had, say, the President been there, a guy who had invented nothing (or at least half-truths), she would have found that desperately profound. Things only seem silly in their context, but we all do sillier things, find things profound where others chuckle at the seriousness of it all.

I suppose I have a sense that being in the back of the room resembles some feeble analogy to Rosa Parks, but I guess it's all good. I'm sure Matz was compensated for his trip, and even if there wasn't some stately throne for him to sit, eventually, he found some place to sit.

Transiency

Here's my problem. I'm in Charlotte. The conference pays for some of the food. Which is to say I pay the conference which pays the hotel which gives me some food in compensation.

But usually the food is discounted, the kind of 5 dollar a person meal that hotels seem to do when the conference is on a budget. I don't mind that, because it gives me an excuse to look around and find places.

I didn't rent a car as there's really no place to park that I wouldn't get charged for it. As it is, transportation to and from the airport is overly pricey, so this is one way to save money.

One way to waste money, and one I'm reasonably happy to partake, is to eat at local establishments. The problem is getting recommendations and finding someplace close by. I had asked the folks at the Omni, and they provided a sheet with nearby restaurants, which seems to only scratch the surface of nearby places.

I wanted to go to a place called Belle's BBQ because it seemed local and it seemed North Carolina.

I looked for it yesterday and couldn't find it, so I went to a chain, sadly, called Rock Bottom Brewery or somesuch. Still, I got some beer, chicken, ribs, so a rough approximation of what I should have had.

This morning I got up early enough to go search for this Belle's BBQ. And this time I found it. Which is to say, I found a sign that used to have Belle's BBQ, but it's gone. Yeah, some other restaurant called Feast(?) would be opening soon.

Here's the problem.

I went to some other rival hotel, which escapes me now, and they assured me the restaurant existed. But it could have closed down last week, or it could have closed down a month ago. Who would even know? They surely didn't. I asked about a Dilworth Coffee House. That was supposed to be nearby. Webpage was wrong about that too.

This is the problem. Untrustworthy web. It gets stale, out of date, and no one feels much pressure to update it. And it seems the obvious thing is to get people to do this, and people could do it, if they cared. After all, people pass by these shops all the time, and so someone could note if the locations they see are correct, and it could be up-to-date, but it isn't.

So I spent time trying to look for two places, neither of which were where they were supposed to be. I did find the only other place I was looking for which is a place called Fujo, a Japanese place, which was so-so, but at least, not too expensive.

I had breakfast at the hotel, and that was a bit of a ripoff. The buffet was as small as could be consisting of sausage, bacon, grits, eggs, potatoes, and a guy making omelettes. All for 15 bucks. Not including drinks! Ok, there was also French Toast, but usually there's fruits, danish pastries, breads, and a few other items.

Oh well, it was something different, and prices at hotels like this are bound to be excessive. I should have known what I was getting into.

Anyway, now I have to arrange to get back to DC, which means I'll leave the conference early, but at least I should get back at some reasonable hour.

Saturday, November 03, 2007

Stupidest Elevator Evah

The Omni Charlotte has four elevators. They are the stupidest elevators in existence. You have to wait minutes before any elevator arrives.

Of course, by stupid, I mean that the algorithms used to govern its behavior is idiotic. For example, several guys jumped on an elevator marked to go down. They (smartly) figured that eventually it would go up. And so it must have, because when the elevator arrived to go up, they weren't in it, meaning I got the same elevator they did.

It's perhaps no surprise many elevators no longer tell you what floor it is on when you are waiting for it so this massive amount of stupidity isn't put on prominent display at every moment.

One Hand Clapping

Eric Hodel was giving his talk. He only had about half an hour speech, which is pretty good, especially when you know that there isn't 20 more minutes to talk. So he opened it up to questions, and because his topic was general enough, and because he seems like a prolific coder, people asked him questions that might pertain back to himself.

And so there were a series of questions. I asked one about how Eric learned to be a better coder (pair programming helped).

And then, there was a pause, and then someone clapped. And had that person not clapped, I'm sure Eric would have taken more questions, but it was a clever, though subtle way to end the conversation, and allow the next person to set up.

Clever.

More Presentation Sux

Besides a presenter not being great, another thing that kills presentations is when there are technical difficulties. If your talk is ready to go at 2:00, then it should go at 2:00. Nothing is more frustrating than sitting wondering why something that should simply work doesn't.

The good news is that I left, and went over to the session where they talked about contributing to open source. I think Stuart Holloway (hope I have his name correctly) is a great speaker. He pointed to some small piece of code in Rake, and how it bothered him, and how he strove to make it more beautiful. There was some agreement that it wasn't pretty, but not a general consensus on how best to fix it. Someone likened it to a bikeshed, where people could argue what color it should be.

I ended up skipping a talk on optimizing Ruby, and it seemed OK to skip, due to the quality of the presentation, not necessarily the quality of the content.

I'm now listening to a guy talk about "tightening the feedback loop". He's now doing a show of quick hands is that the Ruby community is heavily into testing. Apparently, there are two kinds of testing, some unit test and RSpec, which I heard during Railsconf, which is a unit test that looks like a spec. Apparently, the audience was split about half-half as to which they used.

He points out to something called autotest. Does this work in the background? Or run tests when you save?

He's now talking about something called flymake. Apparently does some on-the-fly syntax checking and shown within the editor (don't most IDEs do this?).

The guy wrote a e-lisp extension that does something similar to flymake with Ruby (flymake works with C). This highlighting works on tests, rather than on compiles. The code itself is highlighted in green and red, for good and bad.

Phil Hagelberg is giving the talk. The speaking rhythm could be a bit better. Some of it is not being particularly loud or into the talk. Not bad, but room for improvement.

Anyway, I decided to walk out on that one. I headed back to the open source development thing, but most people were coding, and nothing was being presented. I tried the next room, but got caught in the middle of something, and it didn't seem that interesting.

Did I mention how cool it is to be in the same hotel as the conference. When you aren't feeling it, you just go up to your room and rest. I took a quick shower, watched a touch of football. All cool.

Now I've moved to a talk on "maximizing productivity". I'm really hoping this will be a half-way decent talk. I'm telling you, a good talk is as much presentation as it is content. I know shy folks who don't like that, who are plenty bright, but have no idea how to engage a crowd. This is why they hire good actors for television shows than cast neighbors, because it would be nigh well unwatchable, even if what's being performed is intriguing.

Did I mention that conferences have another big issue? Because the rooms used to present are often combined to one bigger room, one big problem is that the floor is flat. That seems reasonable, but when you are watching someone speak, you don't want to be on the same level as the presenter. At the very least, you want the presenter to be elevated on a stage. As it is, without stadium style seating, you're forced to look over other people's shoulders, which is another reason I like to sit up front.

I was looking at the Rubyconf website. Compared to the Railsconf website, the content is minimalistic, only describing what the talks are. There isn't a wiki, places to go around town, ways to interact offline. Surely, with all the web development prowess in the Ruby community, someone would have produced a free version to handle conferences to give all these features, so it's trivial to set up. But apparently, these kinds of websites aren't particularly interesting to make?

This talk is being given by Eric Hodel. So far, his advice has been pretty straightforward, but one thing that's interesting is its simplicity. For example, being selfish, and just coding what you want, rather than solving everyone else's problems.

Eric is the second person who has mentioned autotest, which apparently is a tool that tests (on each save?).

Another key is having everything in sight. Code, autotest, test, and terminal as the primary windows, and a few other things.

He's the second person I've heard to mention something called heckle. Apparently, it modifies tests slightly and see if it still passes?

Another key is to automate as much as you can. Setup, migrations, and common tasks.

Spend time knowing your editor. That's usually a tough one because editors are complex beasts, and many people do the opposite. They find the fewest commands that allows them to work.

Apparently, releasing something is a bit of a pain. There's some involved process to create a release. There's a tool called "Hoe" that helps automates releases. It takes him about 5 minutes to do this.

One issue is that some people don't use bug trackers, and send bugs by email or as a comment in a blog entry. I would imagine that's because there's no uniform way to enter bugs. Each tracker does it differently, and people get frustrated.

Eric mentions "Hacking Night", which is something that happens at the Seattle Ruby Brigade. Apparently, this is useful to hash out ideas, or at least help other folks out, while avoiding your own problems.

Another goal is to write "pain-killers", which is code that allows you to do something less painfully.

So this was a reasonably good talk. I think the one thing that would improve it (other than humor) is volume.

Presentation Sux

Everyone does presentations, most likely on Powerpoint. Or maybe Keynote on the Mac. But they all have issues, and you don't even have to do presentations to see this. You just have to watch presentations.

The main problem is trying to do a demo. You have to stop your presentation, move to a new screen, continue, move back, and the audience gets to see all the presentation software, because, well, you can't easily imbed a window or screen in the middle of your presentation.

It's also difficult to back up correctly, especially with animations. You have to hunt around when someone says "Can you please go back". It seems the solution is that when you back up, you should skip over the animation, and force the person to have to restart it.

An interesting question is whether what you see, as the presenter, on your laptop, should match what is shown to the audience. After all, you might want to do all sorts of things the audience doesn't care about (take notes, for instance, or search through your slides).

It's interesting that this was one of the last "Office-like" items Google put into place, partly, I suppose, because compared to spreadsheets and word processing, it seems the least important.

And then there's simply the issue of displaying the information from the laptop, where you might have to tinker with resolution, and screen sizes, and how to mirror, and how this is far more difficult than it should be.

Indeed, Andrea O.K. Wright had to have her presentation postponed because no one could figure out how to get her laptop to display properly, leaving the audience vexed and confused.

Does anyone care about this, about how to make this kinda thing better?

Friday, November 02, 2007

Is There No Truth in Beauty?

This is Day One of Rubyconf 2007, held in Charlotte. The flight was pretty smooth last night. Clear weather, cool. For some reason, we still took off about 20 minutes after the scheduled time. I guess that's typical for flights to be arbitrarily delayed. At least, it landed on time.

The sessions at Rubyconf are being held much like Railsconf. There are morning sessions where everyone attends. The afternoon sessions break up into three groups, two with talks, and one more that's freeform.

The first talk of the day was given by Marcel Molina whose name, of course, reminds me of Alfred Molina (the actor). Marcel's talk was on the beauty of code. Since he had studied literature in college, he's long been interested in how humans define beauty, though in this case, how notions of beauty apply to code.

Several thoughts. I wonder if beauty is a social construct. Someone pointed out that his wife was beautiful, but he couldn't define why. All of advertising is meant to induce us to buy things, and sex sells. So advertisers want beautiful people.

So do people who make television programs. In fact, there are so many beautiful people in television, we don't even realize, except that we think that people are hot on this show, and that is not the norm of the world.

As Marcel points out, beauty can be transitory. What is a beautiful woman to someone from the 1500s may not be beautiful now.

To me, beauty has some transitory nature.

Yet, there are some things that feel like they hold on even years after they are discovered. Marcel points out Pythagoras's theorem (who also defined beauty) and that theorem is beautiful thousands of years later.

He points out beauty in language, but he points mostly to English. Is French more beautiful? Japanese? Are the equally beautiful? Can they really be equally beautiful?

I ask this because he eventually says that Ruby is beautiful, and therefore other languages, presumably Java or FORTRAN are ugly even if, at one point, they might have been considered beautiful.

He points out how assembly was the standard for a long time, and so the simple construct of a switch statement must have seemed beautiful at the time.

I wonder if beauty can only be produced by individuals. We think of artists as working in a solitary fashion. We don't think of art by committee. Maybe we can write code in solitary fashion, beautiful code. Can we write beautiful code if someone else is dictating what the code must do? Might it create mess that wasn't intended?

For example, at one point, the Communist party in the Soviet Union and China believed in utilitarian art, that glorified communism. Was this beautiful? What if you requested a person wear this bland uniform instead of a lovely outfit? Or if they smiled more naturally? Or more unnaturally?

He gave a particularly simple problem of converting strings to various data types. In particular, true, false, integers, dates, and then strings. What if he had ten types to convert? And it had to escape stuff? And it had to plug in different languages so true/false could also be vrai/faux.

You have to support internationalization! And this crappy date format, which odd exceptions.

As some point, all those constraints work against you to impact beauty. There's something to be said about simplicity, or even symmetry, in beauty. So the highly ornate decorations of buildings from old Europe or India might not be simple, but have beauty, partly because the constraints don't impact beauty.

Beauty is also comparative. We talk about beauty relative to things that are ugly. Can beauty mean anything if we aren't comparing? Is a person beautiful because they are beautiful relative to something that we consider ugly?

As related to code, beauty comes from making "mistakes". Writing code that feels ugly, and comparing it to code that feels clean, and starting to figure out principles of good code.

There's a sense that beauty refers to something permanent, as opposed to say, infatuation. So people always say you might fall in love when young but that is merely infatuation, and youth lacks maturity and lacks a sense of what love truly is.

That's all nice and touchy-feely, but implicit in the talk about beauty is that this is something we appreciate and should feel happy about.

And that's fine. After all, beauty, as it pertains to code, as touchy-feely as it is, attempts to address the question "what makes good code?". And people do strive for that, even if they aren't quite sure what that is.

Mathematicians and physicists talk about beauty and elegance in math. Beauty apparently need not be understood by all, even if some people treat beauty as if it were inherently universal, independent of human opinion. It's not. Beautiful code still looks like gibberish to the average person.

I have to hand it to Marcel, a guy who made the leap from literature to coding, for making me think about beauty in code. I have a book called Beautiful Code, which they were handing out copies during a raffle, and he gave some basic criteria for beautiful code, outlined by ideas of beauty from one Thomas Aquinas.

Marcel (and Thomas) said beauty consisted of proportion, integrity, and clarity. Basically, is the code nice and short, does it do what it's supposed to do, and can you tell what's going on? That is a practical measure of beauty, at least as it applies to coding.

Beauty is one of those things that it's hard to talk about to beginning programmers, because beginning programmers simply try to get the code to work. They don't care that it's convoluted, cut-n-pasted to death, not terribly robust, or perhaps doesn't even solve the problem. And in the end, programs don't have to be particularly beautiful, but the reason we raise the issue is that this unnatural way we write, that is, code, is something people often hate to read.

Indeed, in the early days of code, people would only do things themselves. They wanted to know how to do something, and they weren't prepared to read other people's code which has some weirdness to it. These days, it's important to learn how to read other people's code, and so beauty is an issue, because it really means readibility, but in the cause of getting stuff to work.

It's a complex issue, but it's interesting to discuss.

From The Mouth of Babes

The tech world, perhaps like many other niches, has its share of superstars. Of course, superstar is a bit of an exaggeration. Even within the programming community, not everyone has heard of "Matz", not everyone has heard of David Heinemeier Hansson. I was able to meet up with "Matz" and ask him a pretty silly question. Although he's attended many a Ruby conference, and although he has pretty good vocabulary, American accents and speed of talking seem to confuse him.

I asked him whether he thought about writing another language, possibly a crazy one, and he said that such languages have a very short lifetime, while languages like Ruby, being more general, have a longer lifetime.

I asked him this question because I recall that Niklaus Wirth, who wrote Pascal, wrote at least two or three other languages. But perhaps Wirth wrote languages at a time where its growth was not expected. Wirth probably figured he'd write it, and he'd be done with it. I'd guess that he would weary of thinking about what feature to add, what had to be supported, and so forth. I'm completely speculating of course.

On the flip side, two Duke students asked Matz about using Ruby as an intro language. He said that it has been used in Japan, though someone (Amy Hoy, to be precise) asked whether Ruby would make a good introductory language, and he said that some parents avoid giving their kids sharp knives, but some people give it to them. He wrote the language for himself, a programmer, and he was unsure how well it would work for beginning programmers.

I was curious why these Duke students were interested in Ruby as a language. I talked to Justin Wickett, who apparently runs a small company, and Michael Ansel, who are in computer science and computer engineering, respectively. They mentioned how there was too much math and theory, and while this would make them well-rounded, there was this huge world of web development that they were missing out on.

There is a though, prevalent in college, that students should be taught something, and taught something useful. The ultimate lesson in college should be that you can teach yourself. Even so, it's funny how most colleges, despite having this as their underlying theme, don't address the point directly. Why don't they tell students how to go about learning on their own? Indeed, it's often done by doing a poor job teaching, thus forcing themselves to pick up a language or a skill or a concept or something.

The computer industry is weird in that way. The people who best succeed need a combination of curiosity, initiative, and smarts, and it helps to have all three. the smarts will give you the ability to understand difficult things. The initiative (and/or patience/persistence) will compel you to work through times when things seem idiotic, or particularly challenging. And you have to be curious to find new things, because the industry is so faddish. People try this, or they try that. And as a conscientious developer, you need to pay attention to all sorts of things.

And that can be completely infuriating to many people who don't like that.

But back to Justin and Michael. They reflect a common belief in students that computer science departments fail to keep up with the real world, and while there's cool stuff being done, they don't seem to be doing it, and they feel bad that they lack these skills. But in particular, they feel the teachers should teach it to them (perhaps for the tuition they are paying, they wonder why they have to go through all the mistakes). But if the profs lack experience in these fields, then they lack experience, and they would be better served trying to find other resources to accomplish the tasks they want to achieve.

If that sounds like an indictment on the way we teach computer science, perhaps it is, but it also reflects the kind of reality of practical software development which flies in the face of the kind of knowledge that universities are used to imparting. Computer science professors are likely to say the only useful information is that which stands the test of time, thus compiler theory, automata theory, algorithms, data structures, are all stuff that seem to stand the test of time despite the fact that most of these subjects are less than 50 years old. In the computer industry, 50 years is a lifetime.

The problem with real world development is that it's not clean and sanitized as it is for computer science courses. Often, many of the real world difficulties are hidden away to give students one less thing to worry about. I recall talking to Jaime and he said that he ended up doing some of the work for a student working on a project because it was hairy, and the student wouldn't be able to figure it out. And yet, that's the kind of tedium real computer programming often involves.

At some point, people have to see it.

So that raises the question. Is Ruby a good programming language for beginners? Is there some suitable subset that can be taught that, while it doesn't fully show the power of the language, still covers enough of the important topics?

Many students struggle with programming, which is why a sanitized version is often given to students. And of course, they have other courses, which is why stuff is sanitized.

Conference 0.1

Ah conferences. They are ultimately undone by the fact that hotels haven't much changed the way conferences have worked in years. The biggest change has been getting wireless connectivity to handle the masses that need Internet all the time. Indeed, for a tech conference, that's what people crave.

Here's a typical situation. You have three rooms, or maybe four, and one talk is really popular. The rest are so-so. And wow, just no place to sit. It's hoped that all talks are about the same.

There's no simple way to redistribute the seats, no polite way to deal with a talk that seems boring, no way to flip from talk to talk to talk, short of seating everyone in their own room, with their own close captioned feed, and then they would lack the immediacy of talking to the person up front.

I was sitting in a talk by Andrea O. K. Wright. I'm sure she's an accomplished developer, and it helps to have a woman in a field that seems utterly dominated by men, but why oh why can't she be a better speaker? I know it's a lot to ask that someone be both a good coder and a good speaker, but it can really help.

I was sitting listening to a talk by Nathan Sobo. I mean, he's talking about frickin' parsing! It seems to be a solved problem, except he has a way to move beyond regexp (though to be fair, most parsers can do more than regexps--it's composition that's probably more interesting). In any case, he was a compelling speaker, did a live coding session that didn't suck.

Did I mention I was sitting by Obie Fernandez. Now, if you had asked me yesterday, nay, even this morning, who the hell Obie was, I couldn't tell you. To be frank, I can't even tell you now, except that he had his book sitting out titled The Rails Way (I own The Ruby Way so I know this book was out there, but had not thought it was published). Obie had his unique John Hancock on his nametag, his schedule, and so forth.

This is Rubyconf for you. You can bump into "famous" folks and not even know it, and they might think (haha) that they are similarly sitting by someone famous, except I happen to like sitting up front.

Sometimes I feel, when I attend these conferences, that it's a little like attending a physics conference. I feel like an outsider, an interloper. I don't play enough with Ruby nor Rails to really get what I need to out of these conferences. These conferences aren't particularly aimed at beginners (though David Black, he of the Amish beard, made a game attempt, but realized that running a free-form session, as appealing as that may be, really requires a bit more direction--I could probably suggest a way to do it. Instead, it turned out to be a crowd that wanted a break from the talks, and were pretty knowledgeable. A tough bind to be in, I'd say).

But then, I get to meet some folks that are learning Ruby too. The real problem is that these conferences range the entire gamut, from Ruby power coders to Ruby wannabe coders, and no one knows which one is which.

I see some of the same faces I saw at Railsconf at Rubyconf, even though it's a trip from one coast to the other. Apparently, DHH doesn't attend Rubyconf, though it would be a bit of a sin not to have Railsconf without DHH. I suspect he's given a pretty penny to show up.

Anyway, back to the theme. We deal with the most modern of technologies, but it seems so much easier when it's bits. It's so much harder when it's physical sites. Even if people have great idea for how to improve presentations, the implementation is the bottleneck. It costs too much, and so hotels simply don't bother. They already find it painful to switch 300 dollar televisions for 1000 dollar televisions. The furniture that the TVs fit in simply can't accomodate 32, 40, 46 inch televisions, and they aren't prepared to ditch that too.

Tuesday, October 30, 2007

Supersize Me

A few weeks ago, I was eating at a Mexican restaurant with two of my Indian colleagues. I point out their ethnicity because as we ate, one complained about the very large portion of food he was given. Indeed, he split the dish partly with his friend. From my perspective, it wasn't that much food. It was typical of what you get at a restaurant.

Later, I was eating at a "Red Hot and Blue", and again, the sandwiches two of the guys ate (both Indian, one the same as the one at the Mexican place) was too much. I had eaten my meal, and could have eaten more.

I had to imagine that I was simply used to eating twice as much as Indians were, and thinking that was normal. These guys weren't spectacularly thin, but it made me think that what Americans think of as typical amount of food is indeed, excessive, by world standards. And that they struggle with their waistline has to do with restaurants providing too much food.

More Trinity



The quality of this video should be better. Still hard to see the football hitting the ground on the last lateral.

Are Resumes Silly?

When it comes to job hunting, especially in the US, but I'm sure elsewhere as well, the key is writing a good resume.

And, boy, are there opinions on writing resumes. So, here's the deal. A company is looking to hire. They want to make a decision quickly. If there were a way to put a number or several numbers, much like SAT scores, that was reliable, companies would prefer that. The numbers might be, say, personality, ingenuity, diligence. Or something.

Instead, we get resumes. This is a spewing of skills, education, etc., that are meant to showcase a person's skills/talents, except that some people are picky about details that may, in the end, not matter.

Here's some advice that people offer when writing resumes. First, if you're recently graduated, put your GPA, if it's good. This one is at least easy enough, and has some value to some employers. It's the one number that people could begin to make comparisons.

I'll list out other stuff that you're supposed to put for a software developer since that's what's familiar to me. First, there's the laundry list of programming languages. People put a list down. Great. But you self-evaluate, and there's no one to tell you how good you are at programming each of those languages. So, someone who is good may look like someone who is average.

And what does it mean to be good at programming anyway? There's familiarity with the language. A person can know the ins and outs and subtle nuances of a language. That's useful. Presumably, they can learn additional libraries? But sometimes there are problems that require an intimate knowledge of hardware, of AI, of really difficult math. In that case, that deep knowledge of a programming language knowledge may not be worth that much except that if you can master a language's intricacies, you might be the kind of person whose willing to dig deep in arcane stuff.

How about grammar? That's always one people pick on. Bad grammar equals bad employees. This is one of the silly ones people use and the use it because they want something--anything--to weed someone out. They claim "oh, it's easy to find someone who will clean up the grammar of a resume". Well, if that's the case, then it shouldn't be worth so much, right? And yet people nitpick because that's what you're supposed to do on a resume.

How about length? Some people don't want to wade through pages of a resume. I guess that's fair. But is two pages enough?

The one thing about a resume most people like is that they write it themselves. This makes introverts and extroverts somewhat equal. The ideal way to write the resume isn't that ideal. This is to let a few other people write it for you. The problem is that this might favor a person who can bully someone else to write it for them. And if this were truly done, we'd discover that many people really aren't all that qualified for their jobs. Resumes are an attempt to hide that from most everyone else.

In the software development industry, maybe 10% are truly outstanding. Maybe 20% more are pretty good. These numbers I'm completely making up with some hope they resemble the truth. The remaining folks are mediocre. But the industry requires folks, and they do a reasonable enough job.

For example, I play tennis. I play much better than a lot of people because most people simply don't play. But I'm sure I can find lots of people better than me. And even the number 1 player in most high school girl's teams would wallop me, even from teams that suck. And they don't compare to competitive juniors, and they don't compare to pro women ranked 200 and below who don't compare to the women in the top 100 but not in the top 10 who don't compare to women in the top ten.

Meaning that the top ten are so incredibly good, at such a higher plane than everyone in the world, that it's hard to even compare them to a really good junior.

The software industry isn't quite like this, only because there's such a wide range of problems and skills one can learn, and we're not playing a simple game with simple constraints. Even so, there are likely to be either frickin geniuses or coders that crank out code so fast, so prodigiously, so intelligently, that the rest of us would be left in the dust. Some of these find themselves writing code where they can express this talent, and some, I'm sure, just do it for fun, their job requiring little of their extreme talent.

Tennis has a way to measure skill, in the broadest sense. Can you beat someone?

The work world does not have this. And in any case, we're not looking to employ the equivalent of Steffi Graf or Andre Agassi. Most companies are looking for the very good weekend hacker, who knows their stuff well, who plays smart, and wins a bit above average, and for the most part, looks like thousands of other players.

And so the work world resorts to resumes. And they build rules about what makes a resume good. And they tell people that's what they need to do. And they assume this will somehow tell the true story.

Which is why the sad reality, that personal recommendations matter more (since you can get past a person's own distorted evaluation of themselves), even as people dole out more advice on writing a better resume.

Sunday, October 28, 2007

Lateral Thinking



Normally, ESPN doesn't give a hoot about Division 3 football. They say the last true amateurs in college sports compete in Division 3. Division 1 is the premier division. All the football, baseball, basketball that you see is Division 1 with rare exception. When kids graduate from high school and want to play in college, they want Division 1.

Division 3 is for the rest of them. Those who lack the talent to play at a higher level, or perhaps some lack of luck. They don't get many fans. A few of them are smart enough to have career doing something else besides sports.

But occasionally, something so unusual happens, that even ESPN takes a few moments to give Division 3 its due.

In this case, it's a 15 lateral sequence. In case you don't know that much about football, you can only throw one forward pass. However, you can throw as many backward passes as you want. A backward pass is called a lateral.

Why throw it backwards when the goal is to throw it forwards? Throwing the ball moves the ball faster than runners can run. But when you throw it backwards, you need to run forward to compensate.

The quality of the video is poor, so there's one part that's hard to see. On the last lateral, the ball hits the ground, and the player lifts it up, and runs into the endzone for a score. Apparently, it's legal.

Oh yeah, the two teams are Trinity and Millsaps. I can't really tell you much more than that.

Thursday, October 25, 2007

Zig a Zig Zig

I was at the orthodontist, finally getting my teeth straightened, after a lifetime of not. One of the orthodontists, the senior one, was telling a story of a guy named Zig Ziglar. I had maybe vaguely known about this guy, or at least, heard his unusual name.

Turns out he was a motivational speaker, from 30-40 years back, probably before the term "motivational speaker" was even used. Most people who, when asked, "How are you?" would say "Good". He said they should say "Great!". This would make other people feel good, and it would make them feel better too.

He was the guy who said "Failure is an event, not a person".

What's interesting about him is that his popularity may have shaped the way Americans view themselves, leading to a current need to make things "extreme". Once you're great, well, that becomes ordinary, so you have to be "awesome" until awesome isn't. Superlatives pile upon superlatives, so that when you meet someone who says "I'm fine", you find it's a bit lacking. What's wrong with them that they aren't better than wonderful?

And all thanks to the motivational talk of one Zig Ziglar.