For languages, I see right now strong demand for:
- Python: as a first language of choice replacing Visual Basic or Java.
- Scala: as an alternative for both Python and Java for big data loads. Probably it could also work as an embedded language instead of LUA, but who knows.
- Swift and Kotlin for Mobile development.
- Systems and embedded programming (aka building native binaries): GO and Rust. Go looks very good since it was developed by the fathers of C and AWK (Pike, Kerningan, Ritchie). Rust seems more complicated at first sight.
- Javascript: plus some html5 (react,react native, vue, vue native, etc.) for web+mobile agencies.
I don't see this happening in practice. Python has taken over the niche of Perl/PHP/Ruby/Bash almost completely but traditional uses for Java are hardly touched.
VB is dead, the only thing out there right now that seems like it may replace Java is C#.
Scala gets a bad rap from most JVM devs, but Kotlin may be a contender for Java replacement on both mobile and desktop.
Top earners? Likely to stay Java and C/C++ because they're not going anywhere and they're harder to learn than most languages. Maybe Swift for a while too because less people know it (because its Apple specific)
What are the traditional uses for Java that are hardly touched?
I think the entire business CRUD segment is due for a massive disruption, though. I'm beginning to think one language to rule the front end and the back end is starting to make sense.
To that end, JS killed Java applets, and should have killed Python/Ruby on the backend by now with Node.js. But it still hasn't.
Typescript on the other hand is glorious. My favorite language now. Fixes all the issues with using JS for large applications besides flaky libraries. I still don't think its ready for server-side development, not until they add threads (WTF is taking so long). When you're running on a 32 core system node doesn't make any sense.
Yes, I know there's various workarounds like launching multiple copies of your app, but that still limits parallelism on the app level and its pretty lame.
Having debugged deadlocking threaded code in production, frankly, I prefer async/await style of code, which btw is in Typescript, Java, Python, etc.
For parallelism, there's concepts like python's multiprocessing (which I think does it right) because it's easier to think about parallelism when the OS doesn't constantly pull the rug out from under your state.
Given the cpu-speed rat race was replaced by the multi-core rat race, anything that fits naturally with concurrent programming should deserve a long look, hint: FP.
I worked an internship about 4 years ago in a state government IT role, they were using JSP and Websphere just as Java 8 was being released.
With that said- I don't think Java is dying any time soon, it's too good at articulating business logic for us to just toss it by the wayside. I'm thinking more along the lines of "hot Java framework from 5 years ago". If Spring starts to head towards legacy status, I'd expect that to become the hot "legacy job".
Maybe if you have software project management skills (complex migrations from legacy tech X to modern Y), these might be transferable skills.
However that doesn't diminish 'regular' software engineering, which isn't what your saying, however I have seen people interpret it that way. Programming is dead ML is the future.
I just talked to an AS/400 programmer that knows RPG, and has had a job for the last decade being "the RPG" programmer, because the Java people don't want to touch it. He even moved away from Seattle, but they didn't want to lose him, so they let him work remotely.
2. Growth languages (in-demand languages).
https://www.tiobe.com/tiobe-index/
C has a growth rate of 8%. This seems to suggest that C coders are on the rise professionally, which makes them harder to get. Java has only a 0.88% growth rate, which means the market is pretty saturated with them.
I moved from C++ to python years ago, and never really looked back. But based upon this, I think it's time to put some C back in my skill set.
Some have spoken here about shortage of supply, Cobol etc, which might be true, but do you really want to upskill in an area that by its nature is diminishing?
In demand at present is not any language, thats implementation detail not what drives a business to spend money.
The truth is you can find those, but it’s a lottery bet. Not only there are many people skilled on those technologies, but most large companies supposedly learned a lesson or two about managing large system and are more proactive about making easier to maintain system.
Parent posted us spot on: move toward the future, do not aim at the past.
One thing you learn pretty quickly is that there is a massive difference between stated intentions and reality. It only takes one dissenting voice to get a big enterprise stuck in the past.
Usually far more are available.
(and I might even agree that from a business perspective it's usually the right call at some point. Software engineers will rewrite, rewrite, rewrite again and again and again)
While I like Python for its seeming simplicity it lacks some nice architectural paradigms that Java has employed for years - think Inversion of control, or data access frameworks hibernate or ibatis.
Python is in a somewhat of an infancy stage to support that type of enterprise-level architectural paradigms.
For OP, if you want to get into machine learning domain then Python is definitely the language of choice.
I guess the question is more about what still will be in high demand in the future and takes a very long time to learn or has other barriers, so there will be effectively no competition.
But in theory, in 10-20 years any widely used programming language will have no intrinsic value and will have enough developers to not pay them 6-figure salaries.
Developers that will be valued and making tons of money in 10 years will be domain-specific developers.
You know why you don’t have mature IoC frameworks in Python? Because you don’t need them! You can easily inject and mock attributes in dynamic languages
Good enough as Go (not distributed by default) are indeed worth watching.
After thought languages as java/Akka, c++... They will be there for sure, but will not give any edge.
Someone who has given ample time to thinking about concepts like vesting, staking, slashing, locking, and strategies for saving gas over large numbers of transactions.
Understanding ECDSA, ECDHE, key encapsulation, etc. are pretty good too.
And yes, such people are hard to find - these are wonderful skills to be learning right now.
Second, is there seriously a significant demand for these kind of devs? Where are such jobs advertised? Are these mostly for sketchy ICO offerings?
https://www.computerworld.com/article/3235972/it-careers/blo...
Large datacenter management (storage, networking, power) because these skills at scale are dieing out. There will always be another facebook/google/AWS around the corner, and they'll need people who can build effecient datacenters.
Ultra low power microcontrollers. Because there is soon going to be a need for no-battery sensors at scale.
Radio/comms. Lower powered "edge computing" (ie battery.harvested powered sensors) can't be waisting joules on JSON, so effective binary protocols with strong security are a must.