
A few years ago, Japanese farmers realized that they could grow square watermelons using a simple technique. Their "secret" recipe doesn't require gene hacking, chemicals, or any other questionable practice. Before I reveal how they did it, let me make one point about the nature of good ideas.
Square watermelons are obviously a great idea, but only in hindsight. Good ideas are like that - obvious in hindsight. Before you saw these photos, you probably assumed the status quo; that all watermelons are awkward, difficult to transport, stack, carry, and slice. But when you see the photos, you instantly get it.
So, how do they grow square watermelons? The farmers put boxes around the melons as they grow, and the melons simply fill the available space! Brilliant!
Thursday, February 21, 2008
Square Watermelons
Posted by
James
at
3:00 PM
18
comments
Outsourcing: Get Over It!

If someone can do your job for less money than you, let them.
Few things in my professional life peeve me as much as some U.S. programmers' attitudes towards outsourcing. I've been in many meetings where the "issue" is discussed, and it's amazing how stiff and uncomfortable people get over such an innocent and obvious idea.
Outsourcing is sometimes problematic for legitimate reasons, but too often the discussion is driven by greed, entitlement, and small-mindedness.
Excuses
Inside many U.S. companies, programmers are waging a secret political war of FUD (Fear, Uncertainty, and Doubt) against outsourcing.
"They barely speak English" - It's often true, I know. Communicating advanced, nuanced project details with someone who has a weak command of English is hard -- sometimes impossible. But you have to ask yourself, "are my communication skills worth x times more money?" Sometimes, yes. Often, no.
"They're not in our office" - Hey, isn't that a good thing!? I don't know about you, but I get way more work done when I'm away from office distractions.
"They're incompetent" - The notion that Indian or Chinese or Romanian programmers are less skilled than U.S. programmers is utterly laughable. You might be able to argue that cultural differences prevent foreigners from understanding your problem space as well as you do. But to suggest that the U.S. has a monopoly on hacker culture is absurd.
Solutions
Embrace eagerness. There are few things as powerful as someone who's really excited about a project. Find a way to harness this energy, whether it's in Seattle, Kansas, or Bangalore.
Make yourself valuable. Use outsourcing as an opportunity to move up the value chain. Maybe you can be the head programmer on a team of Chinese workers. Or how about starting a business that leverages the lower cost of offshore talent?
Study economics. The forces of worker supply and demand are well known, and even an Obama speech can't stop them. If someone is willing (and able) to do your job for less money than you, get over it!
Think globally. If you haven't already read The 4-Hour Work Week, please do. Embrace the planet, and you might even get to travel to amazing places like Shanghai or Singapore.
Help others. Greed is a terrible thing. If you've had some success as a developer, share your knowledge and experience with others. Helping people is fun, and it's the right thing to do.
Admit that you're already outsourcing. I recently read that 80% of goods at Wal-Mart are manufactured in China. Most likely, the clothes you're wearing were outsourced to Indonesia or Thailand or India. If it's okay to outsource your clothes, why is your project different?
Conclusion
I know this is a controversial issue, and I'd love to hear your comments. Please post them! Flamers will be deleted, so be nice!
Posted by
James
at
10:56 AM
12
comments
Thursday, February 7, 2008
5 Reasons Why I Do Not Own Google Stock

Recently a few people have asked me why I don't own Google stock. Their question goes something like this: "It's such a great company, you love their products, you spend thousands on AdWords for various projects, so why not own shares?"
Google is obviously a kick-ass company. They are, in many ways, the new Microsoft. They hire the best people, they produce some of the best apps, they have large user base and fast revenue growth. Although the shares are still over $500, the P/E/G ratio is reasonable, arguably. So what's up?
Below are the five reasons why I don't own Google stock.
- Their core revenue base, AdWords, depends on people not switching search engines.
- Google is locked in a continuous cat-and-mouse game with the search engine spammers. Every two-bit webmaster is trying to get to the top of the results, and it shows. Spammers are getting more aggressive all the time, and Google is struggling to stop them.
- Other companies are working on better ways of searching, and will eventually leap-frog Google. For example, Facebook's social graph, if applied to search, would make search spamming much more difficult. Imagine if your search results were filtered through your friends-of-friends network. That would effectively kill spam, and you can bet Facebook is working to make this a reality. In fact, Facebook has recently hired some key Google employees.
- When people finally decide to switch away from Google, it will be really easy. If I thought ask.com was a better engine, I could switch in 5 minutes. The moment people switch, Google's revenue could plummet!
- It's a software company. I may be a programmer, but I avoid software companies as investments. The software business is too volatile. It's too easy for the next generation of geeks to create a revolutionary technology that makes the previous stuff obsolete. The next generation of apps is never more than 18 months away.
Posted by
James
at
2:00 PM
4
comments
Wednesday, February 6, 2008
Picking Winners: 7 Tips for Choosing the Best Technology, Platform, or Language

All programmers want to make a lot of money, but many feel that making money requires "selling out", working on awful spaghetti code, or dealing with brutal politics. What's the trick to making a lot of cash, while writing beautiful code, and avoiding becoming a soul-less corporate drone!?
Below are 7 tips that will teach you how to choose better technologies, in the context of managing your career as a professional programmer.
1. It's not about the technology -- it's about the business. This is one of the hardest things for new computer science grads to understand. They think it's about algorithms, theories, and code. People get excited about their love for computers, and get confused about why they exist in the first place. Remember: the entire computer industry exists because of its benefits to the economy, not because computers are cool. If it were about coolness, the computer industry would be as big as the ham radio industry (i.e. hobbyists only). Even the cool Macintosh originally succeeded because of the publishing business. If you want to be a wealthy programmer, you must be sensitive to the fact that it's a business.
2. Choose a technology that has successfully "crossed the chasm". If you're unfamiliar with this phrase, I highly recommend reading Crossing the Chasm by Geoffrey Moore. The book describes something called the "technology adoption curve", and the process of how new technologies become popular or fade away. The short story: if you choose a technology that hasn't yet "crossed the chasm", two years from now you'll have a defunct technology on your resume. If you choose something that has recently "crossed the chasm", you'll be an early expert who can command higher fees. (Incidentally, I was an early HTML expert back in 1995, when, believe it or not, HTML was a rare, but highly sought after skill. Find the equivalent today, and you'll succeed!)
3. User Experience is King. As a programmer, the most important thing you can do is to serve the user. It's the users who ultimately pay for software, directly or indirectly, so they are your real customers. Even the managers who evaluate your work will do so from a user's perspective. Choose technologies that will make it easier to get a great user interface.
4. Don't re-invent the wheel: focus on code reuse. Let's face it; most of the code you write isn't really original. 90% of what you write has more or less been written before. Some platforms, especially open source ones, have massive amounts of freely available code. Everything from maintenance scripts to AJAX libraries can be found online. If you can legally use other people's work, you should. Choose technologies that don't force you to re-invent the wheel.
5. Technologies are trajectories, with unstoppable momentum. Whatever you start with will affect you far into the future. Here's a short story: Many years ago, I wrote a simple application for a sales department. It was a new kind of application that hadn't really been done before, and the company didn't know how committed they were to the project. As a result we decided to bang out a "scratch" application in a couple of weeks. We used PHP, which was a relatively new thing at the time. That was a decade ago. Last week, I talked to my friend who still works at the same company. She said they're still building new features onto my old code. The programming team would like to do a rewrite, but management isn't willing to risk a disruption in revenue. That's what I call momentum! I'm just glad we used PHP instead of ColdFusion, which was hot ten years ago.
6. Technologies are ecosystems. Amateurs often neglect to consider the history and periphery of their technology choice. For example, a programmer might choose to work with Ruby on Rails, which may be a fine choice. But when you look into the history of Ruby, you soon realize that Rails is pretty much all there is, aside from Ruby's huge momentum in Japan. Depending on your situation, this ecosystem might not be ideal.
7. Job Security via Code. I had to debate whether to include this point, but what the heck. Yes, it's possible to enhance your job security through code. If you're the only one who understands how to maintain a bunch of poorly commented code, you have power. BUT WAIT! Do you really want to spend your life sitting on a pile of garbage spaghetti code? King of the castle, maybe, but not a very nice castle. Proceed at your own risk!
Posted by
James
at
10:11 AM
3
comments
Tuesday, February 5, 2008
Is "co-working" the New Starbucks? Flexible Workspace for Programmers
Every wealthy programmer knows the importance of great work space. If you're working as a freelancer, you probably spend a lot of time at home, or in the closest wifi-enabled coffee shop. If you have a full-time job, you probably spend too much time dealing with interruptions and office politics. Either way, wouldn't it be nice to have another place to go, aside from your living space or Starbucks?
Here's an idea: Vancouver is home to one of Canada's first (and best) "co-working" facilities, Workspace. Here's a little video explaining the concept:
Workspace on Canada AM
Pure brilliance!
...
...
...
Posted by
James
at
11:00 AM
4
comments