It should also be noted that Jaggar "analysis" of Resolve/C++ is not well supported. The CIS department is well aware that no one will use Resolve/C++ outside of the three course sequence as rmohr stated. They are also aware that the students that complain the most about the sequence are those that don't fully understand what they are trying to teach you. Most "thank you"s they receive from students come after those students graduate and realize that it was important they knew the material that the course sequence covered. It's all about software development. Now on to Jaggar "points".
1."Almost a dozen keywords (object, preserves, consumes, ...) that have been #define'd to a blank space."
These keywords are used to document the code, making it easier to understand. They also serve to better describe the actions taking place. Microsoft is planning a release of C# that also has keywords similar to these.
2."All C++ data types (int, char, etc.) are illegal. Instead, you use classes called Integer, Character, etc. "
If you look into the component catalog and see the implementation of several components you'll notice that many times we need to swap items of unknown type. All the Resolve components have swap operations but the int, char, double, ect. do not have this functionality. So the code wouldn't work if you used these primitive types. So obviously they created classes for each type that would support that functionality.
3.""Clear" naming conventions. There is actually a function called Least_Cost_Path_Machine_Kernel_1a_C_K::Get_First_Vertex_On_A_Least_Cost_Path() "
Yes I agree that the names are long, but they are also descriptive and self documenting. Also it is much easier to find things in various directories when you know that to go from the abstract component to the concrete component you only have to change two characters.
4."The assignment operator is essentially gone, having been replaced by swapping references."
This is done to avoid the expense of copying a large data type, such as a Sequence_Of_Queue_Of_Integers for example. Deep copy of such a large data type might even be a O(n^2) operation or greater. While the Swap operation runs in constant time, every time. Considering how often we need to assign/swap objects this was a very good design choice that exists in many other libraries.
5."A separate 'abstract_description' that is essentially meaningless, but must be included anyway."
It may take time to write an abstract_description but when programming in C++ most developers create a similar file anyway, one that outlines all the operations and them implement those operations somewhere else. The requires/ensures clause that are included in those files are similar to the precondition/post condition you would have to write in professional industry anyway. The abstract component is also a great way to document your code because it provides all the information about a component that you would ever need to use it, which is more than I can say about most C++ components. And once you learn how to read the mathematical descriptions it is actually easier to read them then to have someone tell you how to use the operation.
6."An excessive reliance on templates. Combined with the above, any time you want to use an object, it requires no fewer than 4 extra files."
The "excessive" reliance on templates is used to give the user of any component the most flexibility and control as possible. Most components have default parameters which bring them down to only one or two mandatory templates parameters. That is very typical of most components. Also 4 files is an exaggeration.
7.""Formal Comments" - Code that is meaningless "
Those comments are used to describe the functionality of the code. They are the documentation of each component which is very important in software development, i.e. not meaningless.
8."A 'mathmetical specification language' that is actually harder to understand than code."
It isn't harder to understand than code if you actually understand any formal mathematics whatsoever. Computer Science has a lot of math involved, mathematics should be an integral part of any computer science curriculum. And this language says what it needs to say in much fewer words than it would take to actually write out anything it might need to describe.
Overall it is an expertly designed programming paradigm created by professionals. You are not intended to use it in the real world and the designers are aware of that. You are intended to use the methodology to create good software and apply what you learned to other languages. Don't get me wrong, I'm an avid C++ programmer, but considering Java and C# follow this programming style more closely than C/C++ and that Java/C# are supposed to be improvements on C/C++ then I would say perhaps what the original designers had in mind wasn't the best idea. They provided us with a lot of flexibility in C/C++ which is what makes them great languages, but they are also very unsafe languages.