Category Archives: Technical Skills

Why popular programming languages may be bad for your programming career

A careful reading of Making it Big in Software will surface two curious observations. First,  I studied the popularity of different programming languages and platforms.  Not surprisingly  I found the Java is the most popular programming language in the world.  Nice, but not exactly world news.  It stands to reason that if Java is the most widely used, it’s where the job are,  right?  So if you wan to be marketable, you may draw the conclusion that you need to stay fresh on your Java skills.   Then I interviewed Mark Russinovich, Microsoft Technical Fellow, and Windows architect. I asked Mark for his thoughts on what people should keep in mind in order to have successful careers in software. Here’s part of the advice he offered:

“Try to differentiate yourself. For example, when Java exploded in the mid-1990s, everybody became a Java programmer, and the market became flooded with cookie-cutter Java programmers. It’s really hard for people to stand out as something that isn’t easily replaceable in that world. My whole career I have tried to stay away from that. Operating system internals, while not considered particularly sexy or part of the mainstream, have allowed me to stand out because of the relatively few people who go into that and the perception “Wow, that’s really hard.” Stay away from the mainstream and the crowds, and find something that is gonna be stable—not just flash-in-the-pan technology.”

Mark isn’t saying you shouldn’t be a good Java programmer, and neither am I.   Knowing Java is definitely good! But if that’s you primary skill and claim to fame it’s going to be hard to distinguish yourself.   Be distinguishable. Most of the time programming skills are to software as hammer, lathe and drill are to a carpenter. Tools of the trade, yes, bu not where the deeper talent lies. Being an expert in tools doesn’t make you a great carpenter, because the essence is knowing how to make the table, the cabinet, or the armoire.  In most cases software is the same way, and programming simply provides the tool to apply your real talent. What really distinguished you is your deeper knowledge of the domain you’re applying those skills to, such as databases, social networking, communications, multimedia design, financial analytics, scientific domains and so on. In Mark’s case it’s operating systems. Ya… I’m sure Mark knows how to code, but that’s not what made him a Microsoft Technical Fellow.

Unique challenges of a career in software: becoming a rock star!

I was  interviewed recently on IBM developerWorks about Making it Big in Software. One of the questions asked me about the unique career challenges in software.  What makes software careers so unique is change! Change is our challenge. We work in an industry that redefines itself every few years. There’s no other profession like that – even in the engineering disciplines. Think about other professions, like accounting, law, nursing, medicine, dentistry, education. Their skills and tools evolve over time, but fundamentally what they do at the end of their career will look pretty similar to what they did at the beginning. Not so with software! New languages, new platforms, new paradigms emerge all the time. A few years ago nobody was talking about social networking, cloud computing or multi core programming for dozens or hundreds of CPU threads. These are today’s sea changes. That constant change will continue, and it’s what makes software so dynamic. But it means all of us in the profession need to ride those waves and stay current.

I’ll add another point to my answer which I think is really important for software programmers and engineers to internalize for career advancement. A unique quality in the software business is that a lot of the great innovative ideas come from the engineering teams rather than the business and marketing executives. That’s what has, to a large degree, elevated programmers from their early status in the 1960’s and 1970’s as skilled technologists to our modern conception of software programmers as rock stars. Driving software innovation elevates your rock star status and can be a major impetus in fueling your career.  More on these ideas in Making it Big in Software.

Why software project management is like painting a Rebrandt (or, knowing when done is done)

Rembrandt Harmenszoon van Rijn (July 15, 1606 – October 4, 1669) was a Dutch painter.   When you see his paintings you can’t help but be amazed by their detail and lifelike nature.  The problem with paintings, especially the ones that are based on classical realism, is that there’s always one more stroke of the brush you can add. The painter is never finished. So too with software. There’s always one more test case to try, one more error scenario to trap, and one more use case to cover.   That’s why, left to their own devices, software projects never end.

Does everyone have a clear understanding, and does everyone have the same understanding of “done”? Ask around in your team  – I absolutely guarantee that in most organizations people do not!  

RED FLAG WARNING: Software developers love to say things are “basically done”.  The problem with “basically done” is that it usually translates to 90% ‘functionally’ done, but the last 10% of the work could take more than 50% of the time. As they say, the devil is in the details and the details are always in the final 10%.

Because there’s no such things as exhaustive development (and in particular, testing with full branch and code path coverage) one of the most important steps a software project manager can take in driving a high-efficiency team is to make sure that everyone in the organization understands the definition of “done” for the pieces they are working on. When is the code done? When is testing done?  It’s not as easy as it sounds, but it’s an effort well worthwhile. 

More on secrets of software project management in Chapter 15 of Making it Big in Software: Get the job. Work the org. Become great.

ITWorld’s interview with author Sam Lightstone.

Columnist and author James E. Gaskin interviews Sam Lightstone for ITWorld.

“Career advice: Making your mark in software programming”

Recommended for every serious programmer


There are a lot of qualities that separate a serious software engineer from a rank and file developer. Here are a few technical skills and experiences I recommend:

1. Learn at least 4 different programming languages and at least 4 different data formats (such as JPEG, XML, delimited text, and MPEG).
2. Develop software that is suitable for at least a thousand people to use concurrently.
3. Develop software that can scale to more than 1TB of data.
4. Work on a project with more than ten programmers.
5. Work on extending code that someone who is no longer available to ask questions of wrote more than five years ago.
6. Fix at least 40 defects in code you did not author.
7. Write code that supports international languages, including UNICODE input, and more than one language of generated user output (error messages, GUI text, and so on).
8. Study the performance characteristics of the following:

  • Data fetched from memory with and without a CPU cache miss
  • Reads of consecutive blocks from disk versus random I/O seeks
  • Large block I/O versus small-sized I/O
  • Three popular languages (such as Java, C/C++, and PHP)

These are the skills that people need to develop software “at scale”. By “scale” I mean scale in data, scale in concurrency, and scale in development organization.  Development at scale separates the serious software professional from the rank and file journeymen programmers.

Making it Big in Software: Get the Job. Work the Org. Become Great.

Making it Big in Software is now available for pre-order on and Barnes & Noble.  Three years in the writing, I’m absolutely delighted with how the book has turned out.

Discover how to:  •Get your first job in software development •Master the nontechnical skills crucial to your success •Understand the “sweet science” of software R&D •“Work the org” to move up rapidly •Successfully manage your time, projects, and life •Avoid “killer” mistakes that could destroy your career •Move up to “medium-shot,” “big-shot,” and finally, “visionary” • Undestand the “Law of Promotability Inversion” • Even launch your own winning software company.

Featuring exclusive interviews with leading personalities from industry and academia including Microsoft’s CTO,’s CEO, the inventor of Java, the inventor of email, the coinventor of the Internet, an IBM Fellow, and many more.