I was asked today on a forum why I am unhappy with Xcode as an IDE, and how exactly it forces me to do things in a certain way in order to use it. Here was my reply, with minimal editing done.
I’d rather be able to pick and choose what parts of an IDE I’d like to use, and which I’d rather not use. I’m going to use Xcode here as my example since it’s the first IDE I’ve tolerated in years.
What does an IDE do, at core? It integrates different tools. It integrates your core text editor (that if you’re like me you’re going to spend more time in than everything else combined) with your build tool, your debugger, your profiler, your interface designer, your documentation, and even source control.
A good IDE isn’t going to make you use any one particular flavor of any of those tools. The more poorly designed the IDE, the more you’re wedded to one or another.
Xcode 4 just happened to take the one thing I use the most, the text editor, and mandates you use its flavor of that to be able to use any of the other integration. I have to have it bring up things in its text editor to make use of its build logs, and I have to bring up things it its text editor to make use of its debugger, etc, so Xcode 4 has no value to me. Its integration is counterproductive. Ideally I could just close the window… but you can’t close its text editor window even! It’s all one giant, poorly-designed clutter of an interface.
There are other simple but practical reasons this ruins it for me. I like to have many editor windows open. At times I like to have several docs windows open.
So Xcode has been reduced to me to being a way of generating xcodebuild configurations, and a way of uploading iPhone and iPad test builds onto the hardware. I can use nothing else it does without having its single text editor window shoved in my face, with its editor that isn’t the mature, sophisticated one I use for everything else.
So, I blew a lot of my spare development time last week not actually making progress, but rather figuring out how to get by without loading Xcode. I’ve done that now fortunately. For iOS dev I’ve even gotten an xcodebuild + Makefile process going to run things in the simulator. I now only need to load Xcode when I make changes to the build, because Xcode projects are not really written for human readability. [insert rant against XML]
Integration is great when you want to use every single tool that’s integrated together. But just like some people wanted to use MS Windows without MS Internet Explorer, so too do I want to use some of the Xcode tools without its text editor.