Common Sense

So I decided recently that my current password is too weak for my comfort level, so I went to change it on my online banking site, and found that my new password was invalid. So, fearing a “stupid programmer” moment, I click the help button (something I rarely do), and found this:

Your new password must be between 6 and 20 characters in length and contain at least one number. Your new password will not be case sensitive, there is no difference between “b” and “B”. Keep in mind that common words alone are not adequately secure. It is best to combine letters and numbers when formulating a password. Special characters such as %, #, *, (, &, @ and ! are not valid.

This terrifies me. Who in their right mind looks at the task of designing a banking system and says “we do not want to make those passwords too hard to remember, let’s remove all those silly symbols and cases”. Terrifying in its lack of common sense.

Even better is the concept that some programmer probably at some point explained to a manager why this was a technical requirement…and I bet he managed to keep a straight face during it.

Update: Even worse than that is the error I get when trying to set my new, more secure password (which contains more than 1 symbol, letter, and number) on my other online banking site:  ” Your online password must consist of at least 2 numbers and 1 letter.”  Not only does it reject my password, it doesn’t even tell me why.

Caffeine Experiment

Yes, I stopped posting for 2 months, I know…it comes and goes in waves, my apologies.

Coincidentally 2 months ago I embarked on a little experiment, albeit accidentally, and I’d like to hear if there are any similar experiences:

I used to drink a good 3 cans of soda a day minimum, averaging around 150mg of caffeine (I prefer diet soda).  Then, on an educational trip overseas, I went several days without any soda due to its lack of availability and the encouragement to drink lots of water.  Truth be told, the first few days were pretty miserable…I was constantly exhausted.  But once I got over my withdrawal, I was perfectly fine.

So I decided to see if I could keep it up once I got back stateside.  I purchased several huge cases of bottled water (I find it’s easier to grab a bottle of water from the fridge rather than having to get up to fill a water bottle), and so began my informal experiment.

Three noteworthy results came from this experiment:

  1.  I noticed no significant change to my sleeping habits, which are deplorable (as shown by the 6am timestamp on this post).  I would still toss and turn in bed, and stay up ungodly amounts of time, and still pull the occassional all-nighter.
  2. Similarly, I noticed no significant change in my level of alertness.  I could stay awake just as long as with caffeine, no more, no less. Now when I’m tired and need to stay up a bit longer, instead of reaching for a soda I either grab a bottle of water or go eat a snack, both of which seem to work pretty well.
  3. Soda now tastes pretty bad to me.  I was at Subway a week ago and decided to try some soda for old time’s sake.  I used to live on diet soda, but now it seems I can’t stand the taste.  Unexpected side effect.

Has any other caffeine addict had a similar experience?  I love saving a dollar or two at every meal by having water instead of soda, and I feel generally healthier (though that may be that I started working out a bit, which may have skewed the results of this experiment, but so be it).  I recently had to pull my first full all-nighter since the experiment started, and I was most surprised at how equally functional I was compared to my caffeine-driven all-nighters.

Social Skills

Occasionally, I will go back and reread some of Paul Graham’s essays, of which I am a huge fan. Recently I re-stumbled upon Why Smart People Have Bad Ideas. I had somehow missed his recommendation to read How to Win Friends and Influence People, so I picked up a copy (the 11th printing, from 1937, as per his recommendation). What a worthwhile read. The book describes several things that will make you say “now why didn’t I think of that?” I tend to have a good temper (at least most of the time), and I feel that the points made in this book will allow me to take advantage of that to help advance my relations with others.

That being said, I would like to add to what Jessica Mah, who I have had the pleasure of meeting while in Silicon Valley, said about geeks, startups, and social skills. I feel that the social skills Jessica is (or was) looking for in a cofounder are by far not teachable by a mere book. I have met many of the types of people Jessica refers too (I go to Carnegie Mellon, which has more that its fair share of smart people, both with and without social skills), and have found that they generally fall into the following categories:

  • Don’t Realize - These people simply undervalue the importance of social skills to their lives. They feel that the pursuit of knowledge is sufficient to make them successful entrepreneurs. For them, a book on human relations will at most allow them to realize the importance of human relations, it will not teach it to them.
  • Don’t Know - These people realize that social skills are important, but for one reason or another (too shy, don’t know where to start, etc) aren’t developing them. The best a human relations book can do for them is help them build the confidence to start being more social.
  • Don’t Care - These people are the real tough case, and I’ve been fortunate enough to only have met a few. These people consider themselves so high above the rest of society because they think they are better at something than everyone else (the most common is intelligence, but I’ve found “Don’t Care” people who are so because they feel they are more socially capable than others…paradoxical, I know). They see no need to be more social to people because they’re better than them anyway. These people are difficult to work with, and I have yet to be able to interact with them calmly (like I said, a good temper most of the time), so I will not give my opinion on them.

Note that most these people are more than capable of being successful, but problems arise when they try to go into business with these beliefs. Ignoring or undervaluing human relations is a huge problem, since by definition the field of business and the art of interacting with others go hand-in-hand.

The key here is that the basic concepts of human relations…those the allow for the concepts taught in human relations books to be applied, such as sincerity and kindness, cannot be taught. The attitudes and body language that convey these feelings to other people must be learned by doing.

So, to all the geeks out there, get the hell out of your rooms. If you’re in Silicon Valley, go to Super Happy Dev House and Lunch 2.0. If you’re at college, join a club, whether it be juggling, robotics, or debate, at least you’ll be meeting people. Even if you’re shy, merely watching people interact constructively will do a world of good.

Update - Apparently Jessica didn’t mean to imply that social skills can be taught by books…changed my wording to reflect this.

The Cost of Web Development

Douglas Crockford has a very interesting article on fixing HTML. He points out many of the most annoying things about HTML that make web development difficult. The currently proposed HTML spec only fixes one thing as far as I can see (being a developer), the addition of more specific types of inputs: time, date, email, etc. The W3C has consistently done a poor job, as do most standards bodies, at rapidly improving their spec due to the semi-understandable fear of pissing people off by breaking standard. Yes, I know that backwards compatibility is important, but is it worth the years upon years of expense in training, debugging, extra staff, etc just so that companies don’t have an extra inconvenience of having to maintain two versions for a few years?

But this post is not about new HTML standards (nor is it an IE bash, though it may appear so initially). It’s about the cost of developing to different specifications, and a proposed solution.

I’ve noticed that at every company I’ve been with, at some point I have this discussion:

Me: Man, these cross-browser bugs are annoying
Coworker: Yea, I spend more time adding in hacks than I do developing
Me: I bet if there was one browser out there web companies would save billions in development
Coworker: Yea, I can’t really thing of a reason not to only have one browser

Then we both go back to coding out IE hacks

It’s an undeniable fact that cross-browser compatibility is a huge black hole when it comes to productivity. Design, development, QA, nearly the whole process is bogged down by having to take this into account. Why? When it comes to developing for Windows/Macs/*nix it is at least justifiable: there’s big money in OSes (at least for now). Browsers? Maybe, though it’s arguable, especially since there are free open-source ones with fast release cycles and mature feature sets. My question is why are there different rendering engines?

And that leads into my proposed solution, which, for perspective’s sake, warrants an analogy:

Consider the consequences if the DNS namespace were like the current browser situations. There would be one major DNS provider, the default on most computers sold, along with one popular one with around 20% market share, and some smaller ones. There are a bunch of hacks in place to try and ensure that people using one DNS could still view sites from another provider, and sites will register with a bunch of DNSs, but if your not using the hacks and the company doesn’t have the finances to register with all these DNSs, you’re out of luck.

Sounds ridiculous, right? The solution to prevent this is supposedly ICANN. Granted, this organization has its issues, the internet as a whole seems to be better off with it. So why not do the same thing with rendering engines?

Why not have an organization, say for example the WHATWG, be the sole developer and distributor of a rendering engine. Just like how the Linux kernel is used by all Linux distributions, make this renderer’s source code the de facto standard for web parsing. Changes to the way it parses things would be discussed in a public forum, with significant input by all browser developers, and implemented accordingly. Of course, there would be a distinct line between renderer features and browser features, with things such as default style of buttons and how spell checking is visualized left to the individual browser, but things like size of default buttons, graceful failing, etc, specified in the renderer.

Granted, I’m sure this solution has been proposed before, but usually more along the lines of “why doesn’t everybody use Firefox.” I feel this is a better compromise…browsers can still have their silly little war, users would no longer have rendering issues, companies would no longer have twice the development time, new specs would be adopted much faster, bug fixes could be implemented much more quickly, and so on and so forth. Everybody wins!

I can see Mozilla and Opera going for this very quickly. Apple shouldn’t be hard to convince. The big issue would be Microsoft (not to single them out, but they do seem to be the most stubborn). Development resources are nothing to them, and they have a lot of IE-only sites that take advantage of IE’s quirks, such as Outlook Web Access, along with lots of sites. They also probably see IE-only sites as a hindrance to Firefox growth, which would discourage participation.

The solution? There’s always the “because the government said so” option, where they provide either massive incentive or legal requirement to use this spec (i.e. giving the body that makes this spec a legal monopoly, just like the power companies). Then there’s the PR option. Similar to Intel’s Intel Inside&rest; campaign, make the render brand a household name. Make people question why IE doesn’t use it. The final nuke that can be dropped on Microsoft’s headquarters is an idea that also came from my workplace conversations. If two or three major websites, say Google and Yahoo, which control over 75% of the search market (up to 90%, depending on who you ask), do one of three things, alternative browser usage would jump significantly:

  1. If they block all users not using the recommended renderer, even for a day, and provide easy instructions on installing another browser, millions would switch. Of course, they would lose millions of dollars, but the amount they would save in development costs would make it worth it. Even the mere threat of this, coupled with a deadline, could cause MS to change their minds.
  2. If they put up a prominent icon recommending a compliant browser, it would cost them a few pixels and virtually no revenue, and would get plenty of people to switch, again, doing this, if it yields results, would force MS to reevaluate their stance so as to not risk losing significant market share
  3. Stop developing for IE, allow it to become deprecated. This would have to be done carefully, perhaps with a notice at the top explaining that other “better” browsers provide enhanced functionality. If not done well, users would simply go to a competitor (as is the risk with option 1, but that’s short term, whereas this isn’t), but if done carefully and over enough websites, it would slowly force either IE to conform, or users to switch (browser or website, hopefully the former).

Note that I’m singling out IE here since Microsoft is historically stubborn…these methods would work with any browser, especially smaller ones who don’t have as much pull as IE.

So there you have it, a perfectly reasonable solution to the browser wars, or better yet a way to not let it impact other fields. Stop being stubborn internet (like that will ever happen…)!

Mindsets

I saw a neat feature about a month ago on a blog (I forget where exactly), a setting in Firefox called browser.search.openintab that would make all searches in that little search box open in a new tab. Since I normally do that, I figured why not save me a key press (I normally press ctrl+T, tab, then search, now I can just press F6, tab, then search). Well, a month later, it’s still not working out for me. I find myself still opening a new tab before searching, which in turn opens another new tab. Why is it? Why can’t I get used to this tiny little change to my internet browsing habits?

The answer’s because I’m used to what I’m used to, as we all are. I’ve been doing the same key combination for years, and I’m accustomed to it. This leads to an interesting point about software design: people do not want to change what they do, you must modify your software to make them happy. It’s been said by many people time and time again that if you say something to the effect of “my software’s fine, the user’s just stupid” then you will repeatedly fail at making popular software. If your target audience is Yankee fans, you don’t make a website with Mets colors. Similarly, if your target audience is average users, you don’t make your site so that only CS majors can use it.

So please, next time you design something for the average joe, and your mom calls and says “I have no idea how to use this,” instead of telling her she just doesn’t understand it, instead sit down and figure out why it’s confusing and, more importantly, how to fix it. That’s what field studies are for, and they do come in handy.