I have often felt that programming would do well to have a guild-like system. Current job titles and years of experience do not really help to differentiate the quality of individuals. There's also the intangible benefits of trust and quality that come from the system. I'd love to write "craft" code, that is about producing quality code that elegantly solves real problems. Especially in comparison to the current trend of writing code as quickly as possible, with very little regard for quality from folks outside of the dev team.
In Germany there are programs, its a 3 year program and one works in a company and attends classes in a school for theory aspects. So for 3 years you are apprentice, after that journeyman. I assume that you cannot become Master (Meister) for that career path, but probably you are then qualified to attend a college to get a Computer Science or a Software engineering degree.
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.
> So for 3 years you are apprentice, after that journeyman.
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 think it depends heavily on what you are working on. The vast majority of software development is effectively web forms connected to a simple backend/database. The web equivalent of MS-Access or Lotus Notes development.
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.
There used to be (and maybe still is?) an apprenticeship scheme for software development in Germany. By reputation it produced some excellent developers.
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.
The two specializations for Fachinformatiker are FI/AE (Fachinformatiker Anwendungsentwicklerung, i.e. software development) and FI/SI (Fachinformatiker Systemintegration, that is as you already guessed system integration).
> 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)
It depended on the focus, I think. But I think you're right: I believe Theoretische Informatik was a Diplom study at my university, but there was a related study that used Magister (computational linguistics and humanities computer science, which of course had overlaps with the respective general fields).
> By reputation it produced some excellent developers
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.
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.
I didn't do an undergraduate degree - I taught myself to code and then just got a job as a developer, and moved on up the ranks. Effectively a DIY apprenticeship, I guess. This used to be a lot more common than it is now.
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.
In the U.S. at least, the standard undergraduate degree is typically 4 years. Most universities offer a range of degrees in the field outside of C.S. which are very popular as they are now seen as both easier to obtain but also more relevant in the workforce. These include software engineering, systems engineering, information technology, and increasingly just plain old software development.
One takeaway here is that the university is mostly a theoretical course, that is targeted partly towards the apprentice partly towards the master paths.
Out of all the interns i've worked with and hired, it is evident that a university diploma does not guarantee someone to be at a journeyman level, and more likely than otherwise hints towards a mid-level apprentice
I think they key part of this is it provides a foundation for having a Licensing Board for our industry. Combining requiring someone licensed to sign off on work where they take actual legal responsibility, with changes to liability laws and insurance for business when they don't use them would go a long way to improving the quality crisis in our industry.
I'm not sure business would largely tolerate the rigor (and expense) that would come from such liability assignment in practice. Too many businesses will take short cuts, or decide on shortest path, and too many mid/jr devs with senior titles who don't necessarily know the difference.
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've seen more than a handful of "senior" developers with a decade or more experience that were just Jr/Mid with a senior title. I think the problem is that relatively tight pay bands combined with certain expectations of title create practical issues in practice.
This structure is good for engagements that have long duration (like >3mths) and high intensity.. a lead, an heir and a spare covering a key "role" means that you have continuity if someone goes sick or gets another job. The project can just keep rolling along!