
Ask HN: What do you think are the most future-proof skills in software? - acconrad
I&#x27;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#&#x2F;Java and databases.<p>Of that, I really like tackling things related to UX and performance, but I&#x27;m not sure how future-proof that is. I&#x27;ve got an itch to scratch with Haskell, Go, Scala, Swift, Phoenix&#x2F;Elixir and Node, and have made pet projects (or worked freelance) in all of them but nothing has really drawn me yet. It&#x27;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!
======
MalcolmDiggs
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.

~~~
leap_ahead
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.

~~~
kohanz
_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.

~~~
leap_ahead
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.

------
leap_ahead
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).

~~~
ljk
> _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!

~~~
leap_ahead
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.

~~~
ljk
that's very helpful, thanks!

------
ziles88
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.

------
lambdaelite
Everything other than the programming language: first principles, requirements
engineering, formal analysis, estimation, project management, quality
assurance, communication skills (lay and technical), etc.

~~~
cstanley
Couldn't muster up a mental model for formal analysis so thought I'd give
google a try... first result is a very interesting resource.

[http://www.getty.edu/education/teachers/building_lessons/for...](http://www.getty.edu/education/teachers/building_lessons/formal_analysis.html)

------
runjake
Understanding the fundamentals and the science behind them, and being able to
communicate well.

------
dagw
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.

------
gesman
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.

------
Simulacra
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.

------
zhte415
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.

------
bjourne
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.

------
dorfuss
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.

------
marvel_boy
Combination of functional and OO programming (i.e. Swift)

~~~
Jeremy1026
Swift is so not "future-proof." At this point it is barely even accepted in
the marketplace as a valid option.

------
GFK_of_xmaspast
Touch typing.

------
andyl
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.

