I see a lot of posts like this, trying to help folks figure out which of the latest greatest technologies and specializations are worth investing some serious time in. They seem to be especially popular at the start of a new year.
So I'll throw my hat in and call out the #1 skill that I think:
a) Has brought me farthest in our industry.
b) Has helped Junior Devs become Senior Devs at our company
c) Is the first thing I look for in a new hire.
And guess what?
It's not Vue, React, Svelte or the next hot framework.
It's not Rollup or Webpack.
It's not knowing the latest best practices.
It's not being comfortable with our deployment tools or development paradigm.
It's not Data Science, ML or AI.
It's not Python or NodeJS
It's not AWS, GCP or Azure
And it sure isn't knowing how to reverse a linked list...
It's all about attitude.
Specifically it's about what some people call the "Hacker Mentality" or "Tinker Mindset". I boil it down to the willingness to "try another way" until something works.
The more exciting and rewarding work you get into as a developer - the more often you'll be faced with tasks that have no clear solution. The first thing you try won't work.
Or it will work - but then it won't when it has to scale to larger data sets.
Or it will work - but then you won't be allowed to do it that way because of security (cough:bureaucracy:cough) constraints.
Or it should work - except the documentation for that API you're using is 3 versions out of date.
Or it will work with your creds - but not with mine...
You get the point.
You will come to a point where the obvious things to try are used up. You'll need to try things that don't make sense. You'll need to throw something into a black box just to see what comes out. You may need to put a console log in every 3 lines. You'll need to resist giving up after the 4th try - because it might work on the 5th.
Does this all sound a bit obvious?
I thought so too - but once I found myself managing other developers I was amazed to find how uncommon this was. I've worked with a lot of otherwise very capable developers who would simply write a task off as impossible after their first two attempts weren't successful.
You could encourage them to experiment a little more - give them a few things to try - but it was hard to get it to stick.
On the other hand, I worked with a guy who was a part time electrician before we hired him to do QA work. He played in a dart league on the weekends - and after hanging out at this software company for a while he decided he wanted to setup a website to track the league stats and asked me to take a look at his code.
He'd built it with php, html and JS. And it was awful code. He'd done everything wrong. I could tell he didn't even entirely understand that the php ran on the server and the js ran on the users browser. It was all shoved in the same file. Some of the worst code I've ever seen.
But it worked.
I would hire a hundred developers like that.
Because I can teach you languages.
I can teach you separation of concerns.
I can teach you frameworks and standards.
I can teach you REST and SOAP and ODBC connections.
But the disposition it takes to make it to a working solution with nothing but Google and determination?
I can't teach that.
Be that person that will figure out how to do the most with what you've got - that person who's willing to get creative and "try another way" - and you'll be the person everybody wants on their team.
That's my career advice for 2020.