sorry replying from my phone...
" But the latter is because of the former, isn't it? It's easy because you can operate at the abstraction level of the problem instead of having to deal with low-level implementation details."
I agree.
" Does it really matter all that much that people do already know it? It's not exactly my area of epertise, but in my world, the underlying concepts are far more important than the specific language you are using. If you do know what classes, closures, pointers, references, higher order functions, ... are and how to apply them to solve problems, you just pick up a new language that has those features if needed."
Most of the people who they had using Simulink very successfully, would never be able to code in any low level language. Pointers would kill them.
" But revision control by changing file names? At least in the general software world, that's close to a reason for being fired :-)"
The controls group managed releasing code, and they used a VCS (Subversion I believe) When doing development, they would get the latest version of production code:
Example:
2014_prod_V8_SCI_014.XXX
and make it:
2014_dev_V8_SCI_014_Project#_New_Knock_StrategyX_Your Name_Today.XXX
That would be sent to the engine guys and used for development, and when they were happy with it, they sent it back to the controls group who checked back into VCS and possibly merged it into the production code.
We would make 3 or 4 versions on the dyno, and take them to the water to test. The test data would reflect the name, and all the versions would be kept in the VCS to recreate the test.
Meetings were held to review the data, and a choice was made as to which version would get merged into the production code and when.
Many times 5 or 6 different sub-projects would contribute changes to a final new model engine, so one group would add cooling system updates, another base engine control updates, another knock system updates, and all of these little changes get merged back into the production code by the controls group and that then gets tested on endurance and verified against the data from the original tests.
With anybody and everybody making code, you had to have a way to identify what was what, and having some of the info in the filename made sense. The projects were all tracked in Oracle, and Teamcenter, so finding the details of a test by the project number was easy. Having 100 different versions of code floating around with the same filename would be crazy.
There was a final build script for production code that built every version for every engine (50 or so V4, V6, I6, V8, 2 stroke, 4 stroke, Supercharged, turbocharged, catalyst, Direct Injected,) at once, and then those were distributed to the various teams for use in production. That way bug fixes, and updates made it to every version they made.
Cheers