One should not underestimate how the "Journeyman -> Master" step is overall also one of gate-keeping. My cousin did his "Meister" as a car mechanic and it was costly (compared to for example getting a university degree in Germany which basically is for free) and he needed to do it, so that he could own his own repair shop (otherwise he would have had to hire a "Meister"). In his Meister-Training he was also exposed to a lot of legal regulations and some training in book-keeping etc, which of course is valuable to someone to whom math never was intuitive.
What's nutty is that journeyman usually means "capable of a day's work without supervision" (hence the name: journee-man) and I doubt three years of work is really sufficient for that in complex fields like software development.
Granted, I worked with unusually skilled people for much of my early carreer, but I didn't stop feeling like an apprentice for at least seven years if I include education.
I mean, you can do a lot more, and many are... It just cannot be underestimated how much low hanging fruit software dev there is in practice.
The Anglophone thing of having developers do a 3-year degree in Computer Science (an almost entirely unrelated discipline from Software Development) is ridiculous in comparison.
Computer Science is Informatik in Germany. Prior to the Bachelor/Master system it was a Magister study meaning you'd usually have to take a second major and a minor or two minors alongside it. Typically you'd either study Wirtschaftsinformatik (business computer science), which was focussed on computer science applied to business processes, Technische Informatik (technically used to be a Diplom study I think), which was more focussed on interacting with hardware, or Theoretische Informatik, which is more similar to the pure abstract computer science and more concerned with higher mathematics than applying the knowledge to build real software.
There is also a recognized trade called Fachinformatiker (I think there's another one called Anwendungsinformatiker which is more similar to Technische Informatik) which is a job training of applied computer science, involving a mix of classes in English, computer science, mathematics, business and other subjects. This still exists and IMO it's the best way to build a foundation for a career path as an application developer.
The university studies are more useful for specialist jobs or larger corporations that insist on university degrees. If you have broad knowledge despite having a university degree rather than the job qualification, it's mostly because of things you did outside the university track itself.
There is no apprenticeship track I'm aware of like there is for traditional trades that have an apprentice/journeyman/master (Lehrling/Geselle/Meister) distinction, e.g. carpentry, mechanics, hairdressing.
Something like this kind of exists in Switzerland, even in two forms:
One track goes like: normal Lehre -> EFZ, as a Geselle -> eidgenössischer Fachausweise and later -> eidgenössisches Diplom (Meister)
or in case of a Lehre with Berufsmatura: Lehre -> EFZ + BM -> Bachelor FH -> Master FH (Meister)
Maybe at some universities. Usually it was a diploma study, with a minor (often mathematics or electrical engineering — I did linguistics).
It goes both ways, excellent developers, quite often people who would also have excelled in a computer science program (but failed because bad grades in foreign languages prevented them to get admitted, etc.)
But you also have those that struggle to adopt something other than the Visual Basic they learned in their apprenticeship.
> The Anglophone thing of having developers do a 3-year degree in Computer Science (an almost entirely unrelated discipline from Software Development) is ridiculous in comparison.
Is that different from Germany? Most devs have completed some kind of university degree (or "Hochschule").
If I think of the quality of Software-Engineering instructions I have seen in universities they were always so outdated, that I wonder whether its actually something that can be studied in such an institution in a way that makes sense.
For example I had a lecturer who was ADAMANT that in every software-engineering organisation, Nassi-Schneidermann Diagrams were drawn prior to implementation (https://en.wikipedia.org/wiki/Nassi–Shneiderman_diagram ).
He taught a C++ course which basically was C (with printf and scanf having been replaced by std::cin and std::cout). Of course it was outdated material and if someone had cared enough they could have created new material, but at what pace and at what frequency?
It makes much more sense to teach concepts, that that's what computer science curricula do, then add some engineering concepts in the mix (requirements engineering, validation / verification) and you have someone who can pick up tech on the job quickly.
The same outdated academic thing is true in other disciplines where the cutting-edge is being developed in industry rather than academia. And yes, teach concepts, but that doesn't produce graduates who are able to start writing decent code the day after they graduate.
Nothing more fun that having a security audit of a codebase and seeing how many relatively dumb security issues are present... from SQL injection, to authentication bypass in a "modern" application.
I think some people may fear the concept that their years of experience are just not equal to someone else's same years of experience.