In academia there is no such senior-level course on coding, which would prepare programmers for real life assignments.
In that production code development course, the class is subdivided into smaller teams, and then given them vague and incomplete requirements with some marketing objective like:
We need some “simple” billing software client-server, uh, with web and user interface program that lets the user, uh… make fiscal bills is his small shop. In two months we must have something operational in production. Within three months, we must have a code in production.<<
After two weeks to me it was clear that client-server system can not work. Fiscal certificates can not be stored on on thin-client terminals. The cloud solution is feasible, and Fiscal certificates will be stored in Cloud. It will be multi-tenant solution. DBase solution would be too slow and not scalable, and flat-files were more convenient approach.
Any request for more detailed specifications would be ignored. Ad hoc solutions will be done by developers on fly according to their “good-enough but incomplete understanding of the business case”
We will have good HelpDesk which will “cover and report” all bugs and smooth-out customer’s frustrations for disservice and end-users problems.
Project manager will review the prototype, report the most critical bugs and tell system developers what is wrong, and send them back to the drawing board, to tweak or fix the problem.
After some more weeks, marketing experts will request requirements changed, and insisting to add – billing reporting with book keeping features –
Two months later I’d tell the senior-programmers who attend that hypothetical hands-on senior-level course on production code development training that we need to have particular plug-in with some additional features because of EU legal compliance for the fiscal billing regulative.
And then again a few weeks later I’d tell that the date are not safe and that there are some security issues which must be fixed as soon as possible. And after that will arrive sudden complain on HelpDesk that the system is secure but it is toooooo slow now. We must do roll-back and do something to fix “fast security”.
And then we’d have last review, and I’d tell students/senior-programmers in that hypothetical hands-on training course that the “feel” of the program is all wrong, and all needs to be redone.
At the end I as mentor would just tell students/senior-programmers in that hypothetical hands-on training course that’re being failed. And that they are incompetent and that the project is the failure. And I will tell them that I am disappointed with their clumsy and sloppy software solution. It sucks and they have failed.
I think that such tough production code development training is of vital importance to prepare software developers for real life combat (i.e. production) situations.
Oh, yes, that project was awarded with the GOLD medal, and all merit is on business-marketing side and the all blame is on software engineers.
Such senior-level course would prepare software engineers for real life assignments, and make them tough in their interactions with upper management and business-marketing stakeholders.