The Working Dead: Which IT Jobs Are Bound For Extinction? (infoworld.com)
Slashdot reader snydeq shares an InfoWorld article identifying "The Working Dead: IT Jobs Bound For Extinction." Here's some of its predictions.
- The president of one job leadership consultancy argues C and C++ coders will soon be as obsolete as Cobol programmers. "The entire world has gone to Java or .Net. You still find C++ coders in financial companies because their systems are built on that, but they're disappearing."
- A data scientist at Stack Overflow "says demand for PHP, WordPress, and LAMP skills are seeing a steady decline, while newer frameworks and languages like React, Angular, and Scala are on the rise."
- The CEO and co-founder of an anonymous virtual private network service says "The rise of Azure and the Linux takeover has put most Windows admins out of work. Many of my old colleagues have had to retrain for Linux or go into something else entirely."
- In addition, "Thanks to the massive migration to the cloud, listings for jobs that involve maintaining IT infrastructure, like network engineer or system administrator, are trending downward, notes Terence Chiu, vice president of careers site Indeed Prime."
- The CTO of the job site Ladders adds that Smalltalk, Flex, and Pascal "quickly went from being popular to being only useful for maintaining older systems. Engineers and programmers need to continually learn new languages, or they'll find themselves maintaining systems instead of creating new products."
- The president of Dice.com says "Right now, Java and Python are really hot. In five years they may not be... jobs are changing all the time, and that's a real pain point for tech professionals."
But the regional dean of Northeastern University-Silicon Valley has the glummest prediction of all. "If I were to look at a crystal ball, I don't think the world's going to need as many coders after 2020. Ninety percent of coding is taking some business specs and translating them into computer logic. That's really ripe for machine learning and low-end AI."
Science and engineering continue to move towards doing more simulations. Everything from chemical simulations to flow simulations. The more accurate these simulations are the more computationally intensive they get but also the more money you can make since you have to do fewer real world experiments to isolate the true running conditions and the simulations can also be used as control systems allowing you to operate closer to the true danger area.
In most chemical plants reactions are run FAR from the actual danger points in terms of product yield, purity, reaction speed etc because things like PID controllers just can't adapt to how chemical systems really work.
The problem is that for this kind of work java and .net are SLOW. They can easily but 100x to 1000x slower than a program written in C, C++ or Fortran. The tooling to support High Performance Computing type applications really doesn't exist outside of C, C++ and Fortran. They have the most advanced optimizing compilers, profilers, debuggers, libraries etc. What I often see is something like MATLAB for visualization, Python for command and control and C/C++/Fortran for the actual simulation running on clusters.
These newer microchips that have more cores per chip are only going to continue to push things in that direction. It is easy to gain a little scaling with threads but if you want to really get a program to run fast you need to either have direct memory control or you would need a far more efficient runtime than has ever been created so far.
This may come as a surprise but almost no normal software uses more than about 1% of a cpu's capabilities. Even most games are 5%. You can see this when you run them under a good profiler like VTune. Sure the CPU is technically busy running the software but it is mostly just waiting for data and working with unoptimized data structures. To get over this barrier you need to do thousands of small changes to your program.
If you need a program to run FAST you need to eliminate false sharing. If you have two threads write to different indexes in an array but the items are too close to each other in memory they could be sitting on the same cache line and this will cause the cores to have to resync and retry calculations based on which one committed first. The more cores you add the worse this problem gets. I have worked on a program that went from 30 seconds on 128 cores to 0.03 seconds on 128 cores by removing all the false sharing.
You also need fine grained control over parallelization. You need to be able to decide that a function should only be parallelized and to what degree it should be parallelized based on the amount of data being handed into that function. That is why things like TBB and OpenMP allow those to be controlled at runtime. If you make a parallel version of quicksort and run each division in parallel recursively you reach a point where you are creating parallel tasks that are far too small and have too much overhead. This means you need to understand how many cpu cycles an operation normally takes and can parallelize based on this information.
At this point I don't see any other languages really moving in to really compete with C and C++. Sure there are languages that do a lot of the high level stuff that used to be done with C and C++ but the world has also moved to harder problems and C and C++ have moved onto those harder problems also. This is a problem you can't just buy more hardware to fix. Many of these simulations take days to run in highly optimized C and C++ code and the java/.net versions would take a year to run. The time alone would kill the programs usefulness but forget ever optimizing your system using the simulation.
Computer modeling for biotech drug manufacturing is HARD!
Anything requiring speed and expressivity.
I wouldn't even say those are the big advantages of C and C++ any more.
It's a relatively rare application these days that needs the kind of raw speed you can't achieve with other mainstream languages yet which relies on C or C++ for its performance-critical logic rather than either dropping to assembly (or linking to someone else's library that probably does) or resorting to some form of parallelism. I'm certainly not saying that set is empty, but it's probably getting smaller by the year.
As for expressivity, if you mean how easy it is to express any particular idea in code, C and C++ are relatively weak compared to many other mainstream languages today. They lack many convenient language features widely available elsewhere, and their standard libraries aren't exactly broad and full-featured so you have to bring in additional dependencies to do almost anything useful.
The area where C and C++ still shine compared to almost anything else (and I realise this might have been what you meant by "expressivity" instead) is the low-level control. You can deal with memory and ports and interrupts and so on very transparently in these languages, and they have a very lightweight runtime with minimal dependencies that makes them suitable for use in things like systems programming and writing software for embedded devices with limited resources.
If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
Why are we teaching kids to write when there won't be as many jobs for scribes in 3 years? Because there are very few jobs that don't benefit from some level of automation and it's increasingly essential that you are able to formulate solutions to problems as programs.
I am TheRaven on Soylent News
Suppose you assigned an AI to observe which user stories go in, and what code comes out as a result. How many programs would you have to complete before the AI is able to take over a majority of the work involved in building an application? {...} I'd honestly be surprised if they aren't already doing something like this.
Yes it's done. Not by google, but by others.
The short answer is that the deep neural nets produce texts that looks like code on the first glance, but doesn't even compile.
e.g.: The variables aren't even properly declared. it can write a formula (like "a = b + c")
but isn't even able to realise the link with the declaration of the variable (that the "int a;" 10 lines above is linked to the "a").
The problem is the size and complexity of modern AI.
The size of the context they can consider,
the amount of abstract models hidden behind the code, etc.
Currently what AI has managed to recreate with deep neural nets, is on the level of WW2's Pigeon guided bombs.
i.e.: leverage some image recognition net and similar basic tasks, and string a few together.
The complexity required to write actual code is several orders of magnitude bigger.
Even some humans can't do it reliably, and you hope to do it with what currently is the equivalent of the visual cortex sub-part of bird's brain.
Good luck with that.
Before achieving that we need :
- more raw processing power (you'll need way much more neurons that currently used in today's deep neural nets)
- advances in science to better understand how to combine together tons of such "function specific nets" to build a higher level of AI.
(the same way a brain is a sum of lot of small specific region, each linked to a higher level/more abstract associative layer).
"Sufficiently advanced satire is indistinguishable from reality." - [Tips: 1DrYakQDKCQ6y52z6QbnkxHXAocMZJE61o ]
Seriously, whilst C++ (and Fortran) are great to do the heavy computational lifting, most of that heavy lifting that goes on in computational engines can be isolated in, and accessed from, a specialised library.
After that you really don't need C++ anymore.
In fact you'll realise big productivity (and reliability) gains by *not* coding e.g. business logic or HMI's in C++. Use a script language instead and call those C++ libraries when you know exactly what you want done. I daresay that this is why languages like Python are so popular.
In most applications that business logic and HMI fiddling is 95% of the code once you put the heavy computations inside a library call.
The problem for C++ "coders" is that you don't want a load of mediocre C++ coders to build a library.
Instead you want computational scientists and domain specialists to specify the algorithms, supported by a software engineer for systems design plus one or two really good C++ programmers who can both understand the algorithms and what they do, and who just so happen to be able to implement the design plus algorithms in high-quality, robust, efficient, and elegant code.
Let's see: C and C++ still rule when it comes to
And they don't even have to take our word for it - just look at recent data figures published by the likes of GitHub and StackOverflow, which show that, while C and C++ are not dominant, they're pretty stable, and very miuch alive and kicking.
So that leads to the hypothesis that the statement comes from someone who doesn't have a clue what they're talking about. And yes indeed: "the president of one job leadership consultancy" is basically a motivational speaker with a one-person company featuring a poorly chosen name and a not-all-too-professional-looking website. Seems to me that "one InfoWorld journalist" decided to give a friend of a family member a big, free publicity boost by interviewing her on something she doesn't know the first thing about.
I have been doing Perl development for a long time, and in the last two years, it has straight out disappeared. You can still find Perl as a job requirement, usually as part of DevOps positions, but actually writing apps in it, they are gone.
I have noticed that the new fad for LAMP is Python, it has shown up everywhere and years before it PHP, but Perl has been relegated to being a systems administration tool.
A good programmer should be able to learn a language in a month and become proficient in three months at most.
This isn't, and shouldn't be, the case. There is a huge demand for work in higher level languages that can be done by less skilled programmers. Most of them wouldn't be capable of programming in C, and that's ok. If ALL programming needed to be done by a programmer who could become proficient in any language in three months we'd be 50 years behind in our use of software as a species. We could be pedantic and call that "scripting" and not "programming" but that's obviously a specious distinction.