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!

3 comments:

Welcome to Reality, your reality check bounced! said...

Keep in mind that the employer is the one that picks the technology to be used, not the programmer.

While I know C/C++, Pascal, Java, PHP, Oracle, MySQL, etc I didn't earn a lot of money using those technologies. Instead I earned more money using Visual BASIC, ASP, MS-Access, MS-SQL Server, etc. Don't let a personal bias against a technology stop you from taking a job using it. There are more Microsoft shops out there than Linux or Mac shops. Plus sometimes the Microsoft shops are willing to pay more money or offer more benefits.

Of course if you can earn good money with Non-Microsoft technologies that is good as well. But in my experience they are hard to find.

teamsiems said...

I think you're right, #7 is off base. You aren't seeking "new" technology sitting on spaghetti code; pretending to fix/maintain it. Perhaps #7 might say something like, 'use your old school know how, combined with new technologies that follow the same path, to lay the path to a long career.'
By that I mean HTML 1.0 (circa 1994) matured along a path to XHTML+CSS and XML/XSL/XSLT/XPATH (insert your favorite X- here).
If you started with HTML and learned XML and XSLT, then you know the basis of output for most of these other "web technologies" like PHP, Perl, JSP, .Net, etc.

paresh said...

nice article, thanks for sharing.