I understand now why so many people that have cut their teeth on C coding in Unix/Linux hate C++. A coder can get her job done in C without needing significant tool support. An editor, a build toolchain, and limited reverse engineering support a-la objdump and you are good to go. Tag support makes navigation a lot easier, and suddenly, you have decent productivity.
When I started in the professional world, I learned C++ using Microsoft Visual Studio. I had, prior to then, been a big fan of Borland for Pascal, and had even purchased a copy of Borland C++. But, unlike the MS product, it did not then have an integrated debugger, and my learning curve was quite steep. MSVC took me through the steps, provided decent navigation, and easy to use wizards for MS technology. I did have the frustration of trying to work through libraries without having the source code, but this wasn’t the VC developers fault.
When I left the MS world for the Java world, the first thing I noticed was the lack of an IDE. I was just so productive with all of the tools integrated, that it took me a while to get used to coding in EMACS. I had long since learned the value of stepping through code after I wrote it to make sure it was doing what I expected. Using gdb, while effective, was much slower than an integrated debugger. It wasn’t until I got my hands on Intellij’s Idea that I felt a return to the productivity I had under MSVC.
When refactoring support hit in Eclipse, I was stunned at the ease of maintaining code. I can’t say enough about this, and may try to recreate some of my earlier writings on Refactoring in order to show how valuable the approach can be. Suffice to say, it is now a go-to tool for coding that I miss when forced to do without.
Now I am trying to figure out how best to do C++ development on Linux. etags just does not handle context well enough, and CScope’s navigation is fairly clunky. I’ve got a demo of Visual Slickedit, and the Eclipse platform with C/C++ support built in, but I have yet to find a smooth working environment. My problem comes from dealing with an alien code base, tightly coupled dependencies and byzantine makefiles that I haven’t had time to spelunk. I’ve not been able to get automated refactoring support to work and even base navigation is problematic. As I work out the solution, I will record my approaches here so that I will be able to recreate them in the future.