Visual C++ contains the only language supported by Visual Studio that isn’t proprietary. As such, it’s the only supplied language any career programmer should consider. For obvious reasons, Microsoft won’t support competitive operating systems; so if they screw up, and your career depends on their languages, you’re stuffed. If you want professional security, or platform flexibility, don’t waste time on the other languages.
The compiler is excellent; I’ve not caught it out. Thank God it now supports advanced programming techniques, such as Alexandrescu’s loki, introduced in his excellent book modern C++ design (if you’re a C++ programmer, and you don’t have this book, you’re nuts). I haven’t tested it properly, but I don’t doubt it; support was one of the specific design goals of this compiler. It also supports boost, written by refugees of the C++ standards committee.
It includes the first bash, revised, of Microsoft&rsquo's managed extensions to C++. Avoid them. The next version of the compiler, 2005, is going to contain an incompatible upgrade. And that’ll be another mess; classes have four, yes FOUR, different destructors, different ones called in different circumstances. They might have it sorted properly by the end of the decade.
Unfortunately, the GUI is poorly designed. For example, as soon as you open a project, if you get the Source Safe status wrong, or for some reason the server is offline, the damn interface goes into a cycle of repeatedly irritating and pointless dialogues: “I can’t find …; panic panic” for every damned project. The cancel button doesn’t cancel, there is no abort button, no operational close box, no close menu entry. The only way to continue with your work is to kill Visual Studio from the Task Manager, and restart it. Someone with decision making power evidently couldn’t have been arsed to think.
The designers seem to have presumed it is better to display lots of little bits of everything, rather than concentrate on the key items. The display often consists of many irrelevancies concealing small hints of the important. This GUI is a minor improvement of the VC 7.0 GUI; but the usability remains a significant step backwards from earlier versions of the product. For example, properties for items on a dialogue is not longer the obvious and useful small tabbed dialogue, but the moronic visual Basic property spreadsheet, which requires all bits of data to occupy the same space. A boolean value is forced to have the same width as a dialogue box title. It’s an irritating waste of pixel real estate.
Although some of the irritants in the GUI can be reduced, the basic design continues to annoy me over time. Pop out panes that don’t bugger off when they’re no longer wanted is the most irritating. Closing one pane in the group closes the whole damned group.
The HELP system has been wrecked. For example, I’ve just attempted to get some documentation on the standard library array template. The stupid system brings up documentation entitled RAID, and does not even bother to offer me some alternatives. I’ve just spent ten minutes trying to get this pile of crap to get its act together, and at least give me the option of searching for array and going to something entitled array. But, no, search for something to get something randomly different.
At other times, the help system will bring up a page which looks like the one I want, and I’ll start working on my code on the basis of the documentation, only to realise that the help system has brought up the documentation for random alternative operating system, and provides no option for me to go to the one I need to check. Sometimes, yes, Windows CE will behave the same as Windows 2003, but most of the time there are important differences. This help system is truly screwed up. I really cannot understand why the system does not at least provide a list of hits, like the old VC 6 system, or automatically and invariably go to the correct page, like the old VC 4 system.
Another thing that urks me is that one thing you can’t do from the configuration manager is manage configurations. I want to create a particular build for one project, and the dratted thing insists on creating it for all of them, and will not delete the irrelevant ones. The old interface happily understood the concept of managing configurations so silly ones were never created (and if they were, they could be erased).
One significant improvement on the old interface is search and replace. VC++ 6 use to support search in files, but chose a random subproject in which to search for a particular string. It’d do things like tell you the string you’d just selected from a project file didn’t exist in any project files. It’s also frequently get the repeat search string wrong; by default, a repeat search would search for something completely different. The new interface fixes these bugs, and implements replace over multiple files.
The compiler’s good, the GUI’s too full of bodge. Someone in marketing hasn’t grasped C++ is significantly more sophisticated than its country cousins.