Developers! Technologies change a lot, and change fast. What you do today may not be valuable tomorrow. There are a lot of technologies out there that you haven't master. Given that you have only so much free time, you won't have the time to master them anyway.

So, the question is, how to remain employable in the face of constant technological change? Let's say you are always doing legacy COBOL programming, how you prepare yourself to transit to C# or Python or whatever? Learn everything? Do you have the time to learn everything?

A related, separate question is, do you change field, ever? Let's say, you were doing C++ MFC app for AutoDesk-like application. Now you want to switch to web development in Python and MySQL. Anyone did that? If so, how did you manage to cope with all the new stuffs? You learnt them on your free time? And how do you convince your first web 2.0 employer that despite you don't have any Python and MySQL commercial development experience you can still do the job well?

Some of you replied that being able to learn is the most important thing to learn. I understand that, but the HR people don't. They are not impressed ( and neither do they know for sure) with your problem solving ability. All they know, and all it takes to pass through the initial candidates filter, is keywords, experience and buzzwords! So, if you have to get through the HR ( as most of us do), then the ability to learn may not be a viable strategy as far as long term employability is concerned.

Thanks for your time and sorry if it appears to you that I ask this in a rude tone ( no offense).

+3  A: 

You don't have to learn everything, you just need to specialize in something.

No matter how obsolete something is getting, you will probably still be able to do it for a couple decades. If you want to change to something new though, then of course you should learn it. But I think the key point is that you don't have to.

Also once you are an expert in one language, changing the syntax to a newer one will be somewhat trivial. Likewise with database knowledge, network programming, ...

Brian R. Bondy
I agree, still love doing C++ and refuse to do Web 2.0 mambo-jumbo stuff :)
Mladen Jankovic
most used software today is C++, ditto :)
Brian R. Bondy
I'd argue that software development is more about learning and less about specializing. The ability to rapidly ramp up on new language features, APIs and technologies trumps being really good at COBOL.
Gabriel Isenberg
I think specialization is a dead end street. I've had a couple specializations in my past and in both cases jobs have virtually dried up. There are still N jobs out there for those specialties but there are probably N*2 or N^2 specialists fighting for those remaining scraps, and to snag one of those jobs you will likely have to move.
Bryan Oakley
@Bryan Oakley: A jack of all trades is a master of none. Sure you can learn every new technology that comes out and be a jack of all trades, but your pay will always be mediocre and your understanding of each of them will always be poor.
Brian R. Bondy
+8  A: 

As pithy as it might sound, you just need a passion for what you do, which goes someway to mitigate the frustration of having to re-skill every few years.

Many professions have this problem, I for one would not want to go to a surgeon, doctor or even a mechanic who didn't work at keeping their skills up to date.


Get a job with a company that doesn't change their technology overnight. Any company that is willing to change that drastically is in for some hurt. I wouldn't try to learn everything either. Just pick something you're good with and stick with it.

+1  A: 

If your goal is to simply remain employed, the answer is simple -- specialize.

Be the person in your organization who is the expert on your build system. Become an expert in whichever technology is being used by your company. You will always have a position.

But overspecialisation can lead to extinction. You'll have a position for a good while, but once the specialisation is obsolete you'll just be an old guy with no relevant technical skills, and no energy to learn something new...
+1  A: 

To start, the best thing to do is create a pet project, your own thing. Think of something that you need in your choice platform. Create a website for you family, friends, non-profit. Write a small library for someone/something and publish it. This is the best and quickest way to learn something, you have an investment in it.

As far as convincing anyone of anything, you are going to have to under bid and maybe even develop a piece of it for free, unless you have the the above pet project in the platform.

Good luck!


always learn new stuff, especially the helpful ones.


There is no way to learn everything. I would recommend staying up to date on what new technologies are available by reading blogs, magazines, and other tech articles. You should only do a deep dive on a technology when you need to use it to solve a business problem. Also, if you don't know the basics (OOP, Design Patterns, Source Control) spend your time there.

SaaS Developer

Well, you sort of pick your stack, and then you find the community around that stack and go to user group meetings and listen to podcasts and such, and then you at least know what you need to know.

As far as switching employers, well, that is hard these days. You may have to take a big pay cut. You may want to get certified in the new stack. That will help you get into the door and not get screwed too much.

Also, if you were "doing C++ MFC app for AutoDesk-like application", then I hardly think that you will ever have a problem finding a job. C++ isn't dead yet. I wish it was, but it isn't.

Charles Graham

Learn the metaskills:

  • Learn how to learn, and it will be easy to pick up new technologies.
  • Learn how to write well, this never becomes obsolete.
  • Learn how to speak in public, another evergreen skill.
Chris Upchurch
  1. learn about the business and its processes; these provide insights that transfer into other businesses, i.e. something obvious in one business may be a novel solution in another, making you appear to be very smart

  2. look at the techno-knowledge you deal with as a three-tier system:

    • business-specific
    • algorithms, processes, patterns, solutions, techniques, heuristics, checklists, et al
    • system-specific

Focus on the middle tier; this is where the problems are actually solved, and this is where the knowledge lives that will be the most reusable in other jobs and languages and platforms.

Steven A. Lowe
+2  A: 

My advice: keep walking! Wait, is not that. Keep Learning. :-D

But learn the concepts. Not MySQL but set theory, sql, how joins works, etc. Not Java, but OOP, best practices, etc. Not Ruby, but dynamic typing, metaprogramming, etc. Not Haskell, but... you get the point. Learn concepts is a quite hard, but is totally more effective. If you just know the technology but don't know the concepts, you have a leaky abstraction.

Moreover, good communication, social intelligence and know how to work within a team always help when searching for a new job. Specialists are importants, but only if they know how to communicate what they know and can work within a team.

Another way is create you own business and make it profitable. :-)

Kind Regards

+1  A: 

Apart from keeping an eye on new technologies, make sure you're also developing skills that allow you to compensate for not knowing every detail of that hot new language.

Experience matters. Hone your design skills (easier to transfer than the language specific ones), improve your estimation techniques, leadership and communication skills and be prepared to take on more responsibility as you grow in experience.


I find it necessary to spend time outside of work to stay current. Think of what job you might want, and look at job descriptions on the web. Use this to direct your career where you want it to go.

Expect to spend time with continuing education on some level. If you want to be a professional, you have to act like one.

+7  A: 

Great question! This industry is so fast paced it's absolutely impossible to keep up. However, as many of the answers have eluded to, the "need" to learn everything or be a jack of all trades is not necessarily the answer. Specializing in something is good, but what is it that we can actually specialize in that will keep us in the game?

Some of the best advice somebody ever gave me regarding this:

It's not necessarily what you know now, it's what your capable of learning.

This hits home and seems to make sense. As we continue to go through our careers we never stop learning. We end up recognizing patterns to solutions as similar problems rear there head up. We carry around our tool box of languages/technologies that we can apply to the different problems we face.

Therefore, one thing we can continue to develop is how we approach the multi-faceted problems that we're faced with throughout our career. As our experience continues to grow, the tool to best solve the problem at hand seems to naturally surface. When this occurs, it might be the time to learn that new tool or technology, thereby giving us a much more practical way at advancing our skills.

Being a core problem solver is the most marketable skill one can have. Sure, having tools/technologies in the back pocket will always help. However, what's really important is that one knows how to apply these tools to solve problems. Any good company, interviewer, boss, etc. realizes this and therefore this helps to secure your future and always advance the career.

Scott Saad
+2  A: 

Here's the deal.

  1. If you want to remain employed, first get yourself into a company that will be around for a long time (think Google, Microsoft, Amazon, Ebay, Apple).
  2. Ofcourse, to get there you need to have relevant skills - which means learning outside your work time. Read a lot of general programming books - DS, algorithms, DBMS etc Language skills can last half a decade at most, but basic programming and design skills last a lifetime.
  3. Network - make friends with people working in companies that you want to be in, read their blogs, contribute in that ecosystem.
  4. Start contributing to an open-source project in that relevant area. eg you want to work as a Database engineer in google, you better have some contribution to mysql or java derby or progresql or some such open source project.
  5. Create a web-presence for yourself and start writing about what you want to learn. I find that we learn more, as we try to share what we have already learnt with other people.
+5  A: 

A good programmer stays a good programmer unless he allows himself to stagnate. He can only get better unless he conspires against himself. (Note: No Gender bias intended :)

  • Technologies change.. but you'll find that what changes is how we express something.. not the things that we express. (i.e. the language in which you express your thoughts may change.. but thinking is language agnostic). Adapting is a vital skill.
  • Don't pigeon-hole yourself.. don't tie yourself to a dialect or technology. If you do.. pick wisely.. specialize as others have mentioned and settle down into a cushy secure but may-get-boring position.
  • As with everything else, you need to be a wise investor w.r.t your available resources. Time is scarce.. use it to enhance your thinking/modelling/analytical skills which will help in any language. Pick languages that will show you new ways of approaching-solving problems or have different language primitives (e.g. if you know C#, try Ruby/Python instead of VB or Java). Find mentors who can show you different perspectives from which to view it. Read / Learn from others.. That cuts down radically on your learning curve

You'll find a lot of people who know the syntax of the latest PopRocketScienceLanguage off the back of their hand but don't know how to solve the problem at hand. These people in the end just have turned into syntax translators... that would need other people to make them useful to the org. Finding out how to create and add element to an array-equivalent in the new lang LookSharp100.0 will take 15-30 mins (less if you're at SO :) - but knowing the right data structure to use is comparatively difficult to pick up on the run.

Ask yourself how would you convince an employer to hire you? What skills have you demonstrated in the past? Why should someone employ you? - Introspection shall show you what needs to be done.


You should have the ability to forget things...

This answer for instance ;)

Get atleast Specialized in one thing. Get your self at least the knowledge of other new technologies.

+1  A: 

Do what others can't or don't want to do if you want to be employed. Start your own business and build something that companies or people can't do without if you want to control your own destiny.

+9  A: 

I see a lot of people suggesting specialization. That seems insufficient and could potentially represent doubling down on a bad bet of soon to be obsolete or outmoded technology.

I'd offer this advice instead:

  • Grow. Master the timeless technology independent fundamentals. Read books like Code Complete, Refactoring, Design Patterns, etc. Become more creative.
  • Mature. Become expert in all aspects of the software development process. Learn how to work with others better, learn how to coordinate with or lead others, learn how to drive issues. Learn how to communicate better. Learn how to prioritize bugs/features better. Learn how to manage your time better. Learn how to push-back and have serious technical differences of opinion which are productive and civil rather than emotionally charged and destructive. Learn how to better manage the meta-aspects of software development: design/code complexity, risk vs. benefits, the value of simplicity, managing dependencies, managing complex schedules, etc.
  • Adapt. If your job isn't paying well, learn new technologies that are more in demand.
  • Find your passion. Find the intersection of what you're good at and what you love doing. You'll be more likely to give your best efforts and produce higher quality work and you'll get more enjoyment out of your time spent at work.
  • Don't burn yourself out. Maintain a healthy balance with your private life and avoid working overly long hours for little benefit. Working insane hours typically reduces the quality of your work and reduces your hourly productivity down to a level where you're not actually getting more work done. Keep a level head.
  • Mind your finances. Don't let your toys drive your life, take control of your expenditures, simplify where necessary and appropriate, reduce your debt as much as possible, and maintain a healthy degree of savings. Be in a financial position where the prospect of changing jobs or losing your job would not be catastrophic.

Scott Hanselman said something in his tech.ed speech here in Australia that hit the mark:

"There is no such thing as a professional developer, we are all ametures"

With the constant release of new products and the perpetual beta syndrome part of being a developer is accepting that you will be constantly learning and never an expert. Some companies allow you a percentage of your time to work on your own projects, if this is not the case in your company then doing this on your own time may help you keep up with technology and thus remain employable.


Use Pareto's Principle (80/20 rule) -- While you should work to be excellent at something, it really isn't possible to be excellent at everything. However, if you don't need to be an absolute expert at something, don't spend that much time on it! Instead spend the time on something else. You can learn 80% of the material in the first 20% of your time (get the basics, become useful.) To learn that last 20% will cost you 80% of your time.

So you can spend N hours becoming an expert at one thing, or you can spend N hours becoming useful and familiar with five different things.

Don't just specialize. If you're overly specialized, you're in a niche, and if that niche disappears (and new tech always does come along), you're in for trouble.

Worse still, if you don't keep in practice learning things, it's remarkably difficult to get back into learning mode. (Just think about how hard it'd be to take college classes now. It was easier back then, because you did it all the time.)

If you find something particularly interesting, spend more time on it. Becoming an expert is expensive -- only do it for stuff you really want to be an expert in. Becoming a generalist will set you up to find something to become an expert in.

Keep learning! What you know now will be outdated soon. Can you learn what you need to function tomorrow?

+1  A: 

As the ALT.NET people will tell you: continuous improvement is the key to remaining relevant.

The programming world's landscape is constantly changing. There is an ocean of knowledge out there and you really have to make an effort just to stay afloat. The last thing you want to happen is to become the equivalent of a programming dinosaur. Just doing a little bit every day will help you do this.

Some suggestions:

  • Read! Books, blogs, magazines. Anything you can get your hands on. The more you know, the more control you have over your employability.
  • Contribute! There is nothing that will improve your coding ability than exposing it to the public via open-source projects or presentations. It forces you to go over your code with a fine-toothed comb.
  • Participate! Find a user group. Respond to blog posts, don't just read them. Become an active contributer on Stack Overflow. Join the growing developer Twitter community. The more you put yourself out there, the more connections you will make and the stronger you will become as a developer.
Kevin Pang

I'd say that you should have a combination of experience with a stack of technologies and be prepared to experiment some with new things once in a while. This falls under the heading of "continuous improvement" or "professional development" where you may have an idea that you want to try out, e.g. is using LINQ or generics really better than the older style for things.

Myself, I come from the land of Microsoft tools. I have used every Visual Studio from 5.0 to 2008, have programmed in C/C++, VBScript, C#.Net, JavaScript and used mark-up languages like XML, HTML and propietary ones in some places. I've also used MS-SQL from 6.5 to 2005 and am comfortable creating tables, stored procedures and various other database tasks like creating a view. Does this mean I'll never touch Java? Hardly, but when I do it will likely be because something around me is starting to use it and I have to learn part of it, to do my job well.

When it came time to learn ASP and ASP.Net, I had employers that were willing to give us a break in that we'd be self-taught in these technologies as sometimes if the technology is new enough, it isn't like there will be courses in it within the first few months. For example, I remember one place developing with a beta version of Visual Studio 2005 for their main enterprise application. It was rather cool and for some things like researching AJAX frameworks this became moot, but I did get the experience of getting out there.

I've also had employers where there is that downtime of I can't write the code for features ABC until the back-end guys get the API together and so I go on to other things and generally in the background keep an eye on some things and where necessary, invest my own time and effort into getting my hands on various technologies through local user groups and Microsoft events.

Another example here is that say someone is reporting a problem with application ABC that was built in-house. In investigating the problem, you see that the code should be refactored and think it will take a few weeks, one for the fix itself but a couple more to get the code up to a point where it is easily maintainable. In suggesting a fix, say you'll need three weeks and then do what you said you'd do. Having integrity and doing what you say and meaning what you say is an important soft skill that I think gets lost by some folks at times.

I would say that my field has evolved and will likely continue to do so, forever. When I started after university, I was programming in ISAPI extensions and learning IIS as this is what the dot com where I was had for their systems. I also picked up MS-SQL Server while I was there as something else to get my hands on and through the turnover of many engineers, I moved around a little into a web team when there was one and used ASP and eventually ASP.Net before it went under totally. More than a few of the technologies I picked up there I still use like Visual Studio and SourceSafe to name another couple of things I got there. After a couple of dot-coms, I shifted into an Application Service Provider that was a different field than the Internet retailers I had before. Now, I'm working for a technology company and while the processes have changed from place to place and various tools have changed, some things still remain the same: The customers/clients/business users want features A,B and C in some application that is either home-grown or customized to the company and so we go in and tweak it for them to use. That part of the job hasn't changed and I doubt it will ever go away.

Edit: Just to add another part to this in terms of getting jobs, here are a few ideas:

  1. Get to know some recruiting firms when you don't really need them. See who wants to get to know what you really want in a job and who you are, etc. You never know when that may be helpful. These can give you a way around HR as the recruiters are talking to hiring managers directly.

  2. Understand that your ability to work with various companies will likely change over time, unless you start your own. Even companies like Microsoft and Google have had layoffs and what was once a great company may lose that status as every company has its painful years,e.g. look at Apple in the late 1990s. If you create your own company you will still have to find clients or customers to pay the bills.

  3. Know what you can do well and what you like to do. While some HR folks may not like this, there are some places where they want to see your passion or enthusiasm in order to take that leap of faith of hiring you.

  4. Maintain a network or two. Sites like LinkedIn can be useful for this, just to see who is up to what and possibly to ask if anyone is looking for someone who can do ABC. This goes along with the recruiter point as really, those great jobs aren't always going to come to you.

JB King

You may not have the authority to change the programming language of your project to a more impressive one. But what about tools that often go with it?

You may write useful tools, unsolicited, (like log analysis, automatic daily code check-in, or something creative) in Python or Ruby or Perl. It may require an Apache http server, all the better! That way, you can choose your own language and embellish your resume.

Look around.