Ask HN: What do you think are the most future-proof skills in software?

12 points by acconrad ↗ HN
I'm a 29 year old UX developer (truly full stack, I do everything from Ruby to JavaScript to typography and user research studies) with a background in C#/Java and databases.

Of that, I really like tackling things related to UX and performance, but I'm not sure how future-proof that is. I've got an itch to scratch with Haskell, Go, Scala, Swift, Phoenix/Elixir and Node, and have made pet projects (or worked freelance) in all of them but nothing has really drawn me yet. It's like I have programmer ADD, and if anyone could provide advice on which skills would be the most future-proof to hone, that would be great!

25 comments

[ 5.3 ms ] story [ 65.7 ms ] thread
Combination of functional and OO programming (i.e. Swift)
Swift is so not "future-proof." At this point it is barely even accepted in the marketplace as a valid option.
Understanding the fundamentals and the science behind them, and being able to communicate well.
Specialization (in anything) sets you up well in the future. Here's an example: Let's say you starting specializing in Go. One of two things will happen:

1. Go increases in popularity. You're then the go-to-guy for many projects and startups. You can consult like crazy and make a lot of money.

2. Go decreases in popularity. Many many projects still exist that are written in Go. Other programmers move on to the next flavor-of-the-month, and so Go skills become harder to come by. But these projects still need to be maintained and worked on. Businesses look for specialists to help them with this rare skill. You can consult like crazy and make a lot of money. This has been the surprising arc of languages like COBOL. COBOL programmers make serious cash these days, because the rest of the world has moved on.

So I'd say: Pick anything. Truly, just pick whatever you like the most, and try to be the best at that. Being a generalist just lumps you in with all the bootcamp grads and hobbyists. Being a specialist lets you offer skills/services that other's cannot. That kind of scarcity is future proof.

Somehow the reality demonstrates the opposite:

>> 1. Go increases in popularity.

Lots of people rush into the market with the newly learned Go skills and the salaries take a dive.

>> 2. Go decreases in popularity. Many many projects still exist that are written in Go.

These need to be maintained. Maintenance jobs pay poorly and do not advance one's skill set, leaving one with the outdated skills after a while. New shiny things are developed in new languages and those who quickly learn them before everybody else get to earn some good money.

Specialization gives you an edge... for a brief while until this skill becomes a commodity and is eventually outsourced.

Lesson to take: focus on some skill which cannot be easily learned by a vast army of outsourced workers. Everyone can learn some Java or Go or whatever. Not everybody can run a consultancy. Not everybody can talk to humans and translate their needs into software solutions. Not everybody can found a company. These are the skills that provide the highest ROI in the long run.

Maintenance jobs pay poorly

I would call this an inaccurate generalization. It all comes down to supply and demand. What and who needs maintaining? How many people out there are capable of maintaining it? Price is set from these variables. Example: Cobol and Fortran developers during Y2K.

Agreed. I should have been more specific and said "maintenance jobs from a mainstream market". COBOL is different in that it was used to develop niche software for rather prosperous organizations. Naturally, they didn't mind paying extra to get the necessary skills. Somehow I doubt many of the currently hot web frameworks will enjoy the same fate. Some might last longer than the others but for the most part these are the commodities with a relatively short life span.
This:

>> Truly, just pick whatever you like the most, and try to be the best at that. Being a generalist just lumps you in with all the bootcamp grads and hobbyists. Being a specialist lets you offer skills/services that other's cannot. That kind of scarcity is future proof.

As Zig Ziglar used to ask: "Are you wondering generality or meaninful specific?"

It doesn't seem aligned to you having read the body of your text, but something I had a knee-jerk reaction to as an answer to 'future-proof' is Mainframe, COBOL, DB2. Yes, even today. Backed by a strong business understanding, these are great skills.
Everything other than the programming language: first principles, requirements engineering, formal analysis, estimation, project management, quality assurance, communication skills (lay and technical), etc.
Being able to deliver, seeing the big picture and recognizing the opportunities. Turning ideas into products. Becoming your own boss.

Technology-wise, nothing will guarantee you a safe future. Tools change all the time, every few years the names of the instruments you see in job ads get [almost] completely replaced. Every year more and more people go into IT attracted by high salaries, hence the competition always grows.

You're just a few years away from realizing technologies will always change and you won't be able to keep up for long. You will also realize soon the tools are not that important compared to the problems you're trying to solve.

Focus on preparing yourself for a leadership role and an independent future. Should pay off more than any next programming language you can learn (and then discard a few years later).

This is an excellent answer. Read the first line once more: "able to deliver, seeing the big picture and recognizing the opportunities, turning ideas into products, becoming your own boss"

I'd add: 1) Being able to sell. That means a lot of things: sell yourself (write a good CV, perform well at interviews, lead the team, convince others to your ideas).

2) Work hard. That does not mean work 20h a day (some people do, though, like Bill Gates in his early days or Elon Musk), but make the best use of the time you have, keep focused, be persistent, find the right people to share your workload with.

> Focus on preparing yourself for a leadership role and an independent future

as someone who's entry-level, what's the best way to "prepare for leadership role"? thanks!

This is a complex question and not the one I can answer in five minutes. But I'll give you some pointers.

1) Focus on broadening your skill set, not deepening it. If you like some tool and wish to explore it to the depth, that's fine, but do not stay there for a decade. Learn a full stack. Get things done from start to finish single-handedly. Several times over.

2) Adopt a certain mental state and attitude. Consider your job just a temporary assignment, an instrument for you to acquire valuable skills and meet important people. Know it can end at at any time, so can the next job, such that you will just be buying your time until your ship comes. Don't become a slacker though, do your job well, just don't expect it to secure your future till the retirement.

3) Adopt a critical view of the things. Get to form your own opinion and view on a variety of matters. Don't take anything for granted, check and verify things, try to guess problems and prepare for them so that they don't catch you by surprise. Learn to be in control. The trick is not to overdo it and not to start doing it too soon before you have acquired sufficient experience, otherwise your run the risk of turning into an arrogant all-knowing jerk impossible to work with. Be careful here.

4) Actively look for opportunities to try things on your own, be it taking a charge of a small project, helping a customer or building your own thing. Learn to feel being "one against the entire world". Don't let it scare you but instead excite you.

5) Invest in social skills just as much as you invest in technical proficiency. From a certain point of your professional growth your work becomes more social than technical. Learn to communicate well with various people.

There is more to it of course but this should get you started. I'll add to this post if anything else crosses my mind.

that's very helpful, thanks!
The two best summaries I can think of are care about your co-workers professionally and care about your craft. Just about anything else can be derived from this in how you act.
Whatever tools/technologies/systems large enterprises are using is usually very slow to be decommissioned or to become obsolete.

These often could be more boring but longer lasting entities.

On a side note communication and good personality skills will never go out of fashion.

People will give you abstract answers to a question like this.

For something concrete, I suggest sticking to C syntax like languages like c#/js/java and even python to some extent. As history would show, the most popular languages seem to follow this syntax and it's fairly easy to pick up new languages based off experience. I went from c++->delphi->c#->js relatively easily.

My personal opinion as well is that now is the time to start getting into security software, pentesting etc. The proliferation of new languages, frameworks and api's is a pandoras box waiting to be opened by the security community. We've barely scratched the surface, as today's security community is really, really far behind. Once they catch up, and more automated tools and exploits start showing up that target these newer applications, these hipster startup companies will be forced to start spending. Right now it's mostly financial institutions, and companies using legacy stacks like php, wordpress, drupal that are being attacked.

That or data science/parallel programming.

Technical skills: vim, bash, postgresql, git, redis, ansible, docker

But the most important skills: domain expertise, marketing, being able to go independent.

Most future-proof: be the one who hires, not the one who is hired.

UX skills with full knowledge of all the latest software tools and concepts. I think programers can come and go, are found in every country, in every language, and can be had for little or a lot of money. All day long. However a good UX designer, who is familiar with all of the textbook concepts, real world experience, and intuitive thinking, is invaluable.

Knowing that a button should be a certain type of button, text should be a certain way, and understanding deeply the best way for a user to interact with the software is truly invaluable.

A side comment: any university/college teaching CS or Software Engineering should be able to answer your question. But I'm not sure they are.
Domain expertise in something, almost anything really. The world is full of decent programmers and their numbers will only grow. If all you have to offer is that your're really quite good at programming then you'll be competing against a huge pool of equally qualified people and you'll have a harder time proving your unique value.

If on the other hand you understand the specific problems faced in field X and are really good at programming solutions to those problems, you'll be competing against a much smaller group, and it will be much easier for you to prove your value since everybody in the field knows how much of pain X is and the monetary value of making X go away.

I guess social skills? Like ability to sell yourself, project yourself as someone who is easy to get along with and work with. Being good at that earns you more money than any particular technical skill you can think of.