The funny thing is that software engineering does this while also complaining of labor shortages. Or, if we're being a bit more honest, it's not funny, it's cynically self-serving.
I'd be willing to take either side of a debate for "is there a shortage of people who, when given tight specifications for a piece of software (write a function that takes X as input and provides Y as output) that enumerates all of the corner conditions can produce a program in a language that they are familiar with."
At the same time, the "person who can work with the business user on the software, think about the architecture of it, identify the design necessary, come up with the estimate that actually matches the time frame that it will be done in with a reasonable error... and produce software that takes X as input and provides Y as output while being aware of where the edge conditions may exist and ask for clarification on how it should work"... I believe there is a distinct lack of that portion of labor.
Furthermore, there is also a lack of people who are able to move from the first labor pool to the second, and a lack of mentors who have the time and ability to help that group move to the second.
I don't think its incredibly difficult to hire an entry level person as long as one sets the bar low enough and has people within the origination who are capable of providing the design. On the other hand, it is very difficult to find the people who can give the necessary instruction to the entry level people to allow them to become productive within their ability.
As an aside, I also find that within the entry level group... there are a sizable portion that have the attitude of "I learned language X and that was hard enough, I'm going to stick with it and not learn anything else." That X can be found for all languages and none have the monopoly on it. However, it is disconcerting for me to see those individuals... I started out as a C programmer, and then Perl (full stack web - some JavaScript in there) and then Java (enterprise), and then Java stand alone (swing application)... and while I'm still a Java programmer, I can see other languages looming on the horizon. Java will become the COBOL, and while there are still COBOL programmers out there, its not something that one wants to get stuck in for another two or three decades waiting for that last app server to be turned off before they can retire.
That portion of labor is lacking, because it is not rewarded. It is not searched for during interview, it is not valued in mythology (what we consider cool when on blogs and forums) and lastly is not rewarded by employers at work. Notably, actually predictably matching timeframe is devalued where people who end up pulin overnights due to bad planing, lack of comunication/negotiation are seen as heroes and rewarded.
Why would culture developed skills that make you rewarded less?
The ability to teach juniors is not searched for nor rewarded either, where social skills are even sometimes treated as something that makes you less good as programmer.
> "I learned language X and that was hard enough, I'm going to stick with it and not learn anything else."
There's also a sizeable portion of companies that have the attitude of "we want someone who's really passionate and good at learning. oh and they need to be expert in language x. oh you're not an expert in x? sorry, we can't wait for you to learn it. we don't care if you learnt something else"
Its something I've thought about for a bit and want to make a proper blog post of it. So far, its just a post over in a slack channel associated with That Conference - https://slack-files.com/T0CEWBUEP-F7J3SNNNT-00ff1af0fe . I need to come back and revisit it at some point.