views:

1969

answers:

8

What are some good programming skills to learn or focus on to future-proof my career over the next ten years? By this, I mean what do you see as being the popular languages, tools, and software technologies in widespread use over the next ten years that having experience with could make a person more highly employable. I pose this question in the context of the next ten years because I feel it's difficult to tell what the state of technology will be at that point. As a programmer, I strive to learn something new everyday and keep up to date with my what's happening in my field, but it's obviously difficult to touch on it all. I feel one such trend we're all observing lately is a drift towards web applications which might imply it's a good idea to start becoming familiar with web-related technologies.

Your thoughts?

Thanks in advance!

+26  A: 

In my judgment, you're best off ignoring specifics of technology and instead learning how to learn. As you say, technology moves very fast, and the best way to future-proof yourself is to ensure that the inevitable earth-shaking changes that are coming don't leave you unable to fend for yourself.

To that end, I'd start where you already are; read programming blogs and websites. Add to that a taste for software engineering books, especially ones that focus on best practices for process management. The more efficient you are at developing, the more time you'll have to learn new things on the fly.

Learn new programming languages or models on a semi-regular basis. Even if you never get beyond the tutorials, they'll provide you with mental flexibility that will prepare you for the changes you'll experience. Moreover, the new approaches to problem solving inherent in a new model may help you overcome problems today, too.

There's no one, true way to be prepared for the future, but if you keep looking at what's new, you'll at least see it coming.

Chris R
+1  A: 

Nearly all the current popular, or "in the mood", languages (Java, Python, Ruby, JavaScript) are ten years old (a little bit more, I know). The only exception is .NET platform. Knowing that, how could you imagine what will be the hype in the next ten years?! It's far too long for a so domain that has so quick evolution (comparing to other sciences, I mean).

gizmo
+3  A: 

I have always looked out for technologies to avoid. For example, I had a great paying job opportunity about 6 months back. They said half my time would be C#/.Net, and half would be VB6/Classic ASP. There is no way I am going to waste my time on VB 6, so I did not even consider the job. I don't mean to slight VB6 programmers out there; I programmed VB4, 5 & 6 and Classic ASP. It paid the bills well. But VB6 is dead in the water. Looking for a VB6 job is going to be much tougher than looking for a C# job.

I think it would serve your interests well to be aware of what dying/dead technologies you know, and try to beef up your skills in other things to replace those.

Jason Jackson
+1  A: 

There will always be a need for company A to beat company B.

What that means 10 years from now, who knows?

Web applications, smart clients... within 10 years they'll converge. However, good decomposition and design skills will always be valuable, especially as "process agents" will be called upon to field more and more information from more and more scattered sources to make more and more agent-like decisions, more and more in real time.

So on the technical side, I'd suggest you get a handle on SOA (Separation Of Concerns). (Yeah we developers don't spell so well ;) )

Just as importantly, I'd suggest trying to get closer to the business. Discovery and turnaround times will shrink (but there will be more of them), and so positioning yourself to impact the business will always keep you in demand.

Just my two cents.

6eorge Jetson
+8  A: 

The only things that we know will be relevant to your career in 10 years are:

  • classic comp sci topics like algorithms and concurrency
  • experience
  • being a team player (communication, leadership, etc)

The first is straight-forward: hit the books and write code in any suitable language. The goal is not syntax but ideas. For the others, a great way to improve that is to get involved with an open-source project.

ps. If you were to make a gamble, I think the drift is toward mobile devices.

Michael Easter
+3  A: 

As others have mentioned, fundamental things like problem-solving, algorithms, and communication skills are the only assets that are future-proof. Also, it's not clear what you've already got; nobody has the time to learn every commercially relevant skill!

That said, some bets I'll place about the future:

  • IPv6. We may be able to stagger on for ten more years with IPv4, but then again we may not. It should be fairly easy to pick up, as IPv6 is not terribly different from IPv4; just become familiar with how to port an application to it, in case you need to. Most of the really new stuff will probably languish in obscurity anyway, possibly forever...
  • cryptographic security. You don't need to implement crypto algorithms (much less invent them!); instead, you need to learn how to *use* crypto properly in an application, and avoid leaving open enormous security holes in the process. This is as much a matter of mindset as anything else.
  • concurrent programming. As everyone gets more cores in their processing chips, there will be increasing demand for people who can handle concurrency. This is a fairly difficult skill; currently, there is no really good environment (language, library, framework, etc.) for doing this, and the cognitive load needs to be handled by the developer.
comingstorm
+3  A: 

As mentioned before, knowing how to learn is likely the number one skill I'd note and be aware of how you use it to learn new things over the next ten years. If you look at the past ten years as a kind of guide, who in 1998 would predict Google to be the behemoth that it is, Microsoft to stagnate for so long making Vista, and that Y2K wasn't really that big end of the world day? Problem solving skills as well as design patterns would be a couple of other things to know that can help bring someone to the next level.

Additionally, here would be my list of things to know or watch:

Concurrency and parallelism. Multi-core CPUs are becoming more common and how software will be written to take advantage of that will be something to be explored over the next decade as well as wondering how close to that 80-core chip Intel showed off within the past year is to reality?

Netbooks. These are still in their infancy, though it could be interesting to see how much of a smart phone and laptop get put into future netbooks as well as if Microsoft will make a special Windows operating system for something between Windows Mobile and Windows Vista? Will Apple enter this market and how close to an iPod would it be? How well can these little machines run the sites that consume a lot of resources or having lots of tabs that can suck up memory?

Rich Internet Applications. Flex and Silverlight are a couple of things starting to get some attention and these will likely mature over the next ten years but could just as easily end up being roadkill by something else that Google or even Microsoft could make if they decide to put more into ASP.Net instead of Silverlight or combine them somehow.

Cloud computing/Saas. This sort of ties into the previous one but I think it could be interesting to see what Microsoft, Oracle, Google and SAP do with this idea of "cloud computing" or "Software as a Service" but it is still very early on how these will evolve.

CPU/GPU fusion as well as the GPGPU. nVidia, AMD, and Intel are all spending tons of money in their graphics divisions with a couple of projects having high expectations: AMD's Fusion and Intel's Larrabee. Though nVidia's CUDA shouldn't be ruled out as something to potentially become a bigger deal. Lastly, there is what Microsoft will cook up in DirectX 11 and future generations of graphics processing that may be interesting to see what develops.

Virtualization. Companies replacing 4-5 servers with one physical one that runs like 4-5 servers. This is still somewhat in its infancy and companies are still working on how to harness this in the server space, but there may be desktop uses that I'd be curious to see if some developers want this so that they could run separate machines to handle client/server environments with one physical machine.

Grid computing. This is sort of like the cloud only with many many computers being used on a voluntary basis to do some hard problems in Computer Science for other fields. The World Community Grid has a few projects going on now that I wonder what kinds of results will they have in another 4-5 years as it may grow over the next few years.

This is of course going to be out of date in 2-3 years as other new technologies come to light. Just thinking about how memory has expanded greatly in the past decade may scare some people. I remember in 1998 on my first job out of university having a Pentium II 266 MHz with 64 MB of RAM and a 4 GB hard drive that I had to partition into 2 drives since NT 4.0 wouldn't take all 4 GB in one partitions. Now, I've got a Core 2 Duo e6750 2.66 GHz machine with 2 GB of RAM and a 160 GB hard drive that is in 1 partition. Will I have an 80 GB of RAM machine in 2018? Who knows....

JB King
+1  A: 

I don't think this question is necessarily restricted to programming. Change is always toward automation and commoditization. The single most important skill is the one that cannot be replaced by a machine: innovation. This is followed closely by customization/personalization. In other words, the consumer wants a product that has a low, "mass-produced" cost with a high "hand-made" flavor, and your creativity, adaptability, and personality--your humanness--will always be in demand far more than any technology you might learn.

So, to future-proof your career, learn as much as you can, continually; try to extract the wisdom that's embodied in each new technology; recognize timeless themes or techniques that retain their value; and cultivate positive relationships with everyone you meet, from the janitor to the CEO.

Adam Liss