I absolutely refuse to use the Arduino environment, because it appears to be using some completely insane and/or broken build options. I had all sorts of problems with e.g. not being notified of missing header files, misleading error messages, IDE errors during compile (as opposed to compiler or linker errors), etc.
Now I just use plain old avr-gcc or gcc-arm-none-eabi and my favorite text editor, and my embedded development experience with Arduino-compatible products has never been better (despite not using anything from the Arduino project).
The other day I was working on a serial command interpreter for the Teensy 3 that will eventually have some Bus Pirate type features. It's just a hobby project, I'm usually writing ObjC or Python for work in Xcode or something else, but I enjoy working with these little boards and writing low level code. The Teensy support software is an add-on for the official build of the Arduino IDE, so I was using it.
After about 5 hours of work and making a lot of progress I was happy with, my Mac crashed and rebooted, which is extremely rare (except when working with something connected via the USB CDCACM driver... sigh).
I then discovered that all the changes from the past 5 hours were gone, the project files were in the exact state they had been when I woke up that day.
Despite compiling and uploading new code to the Teensy 100+ times, the IDE saved nothing new to disk in the process (which on a side note, is weird. Where is the external toolchain getting the changed files from?). I never explicitly hit the save button, so it all disappeared. I spend a good percentage of my life in Xcode, I know it doesn't behave that way. I can't say I remember Netbeans, or Eclipse, or any other IDE that I've used, ever losing work because I only clicked build rather than a separate step for saving to disk.
Apparently that behavior has caused a lot of people to lose a lot of work over the last few years judging from a quick google search.
The Arduino IDE puts all compile-time stuff in /tmp/, which gets erased on reboot.
And yeah, Teensy is great, but their USB code is a bit... out of spec sometimes. Also, the Teensy 3 in the Arduino IDE is (was?) kind of a nightmare. They have a gigantic C++ object that emulates all the registers on an AVR, and translates operations on those "registers" into operations on ARM MMIO.
Thanks for pointing out inotool.org – i didn't know it existed, and it looks pretty cool.
One big wish I have is to find a way to write automated tests for my Arduino libraries. Or even for pure C/C++ classes used by my libraries, but I havent' yet invested into setting up Eclipse to build/run tests with an Arduino type project. Curious to know if anyone has a solution to automated testing of Arduino and pure C/C++ libs that are used by their Arduino code?
Regarding the other remark below – nobody is doing it wrong as long as they are doing it. The post is a personal opinion, and should be taken as such. If Qt Creator works better for you, great! Write a blog post about it ;)
I haven't tried any of the 'full' IDE's listed yet. I have Eclipse set up for C/C++, maybe I will give it a shot at some point. I've heard of the XCode version as well, but again, haven't tried it.
That said, I have found ST + the Stino plugin[1] to be great for my arduino projects. A good linter setup and gdb gives most of what I am looking for. The convenience of debugging with an IDE that auto-populates watches based on context is nice, but rarely are these projects sizeable enough (for me) to need serious debugging.
Using Stino + ST (and turning off the Arduino code munging) gives a typical GCC compilation which requires everything you'd expect of a GCC compilation (proper declarations, prototypes, scoping, etc).
I can understand why forsaking function prototypes and adding type aliases (such as 'boolean' usable for declarations in addition to 'bool') might make it easier for newcomers to learn to write 'sketches. But I am not sure it's great in the long run. So much of the Arduino code out there is poorly written, including some of the libraries I commonly see floating around. And coming from me (who is far from part of the greybeard C/C++ master engineer cohort), that says a lot.
I think that the Arduino platform would likely benefit from a more natively supported 'second step' development environment that encouraged better program organization and DRYness. I can't even count the number of arduino 'sketches' I have seen out there that are a mess of static global const variables declared in 2000+ lines of completely spaghetti'd code.
Of course, I think it's great Arduino is becoming so popular, I just wouldn't mind seeing some nicer tools/educational resources for those new to it.
I highly recommend Codebender.cc which is an Online IDE for Arduino.
It has code completion, a lot of already included libraries (you can request for your own), a huge list with examples, the ability to share your code or find another user's code and its on the cloud.
For setting up your computer, you don't need to install any special heavy development kit except Codebender's plugin. I remember that after completing a getting started guide in 5 minutes I was able to program my Arduino board!
If the answer is Eclipse, you're asking the wrong question. Unless that question is "how can I nuke my productivity?", or "we're developing in Java, what's the worst that can happen?".
I am sorry if you are not productive in Eclipse, perhaps compared to other tools. I write software every day, and Eclipse ended allowing me to have the highest productivity of all tools I surveyed in the blog post. I wanted to write a simple robot automation library, and I was struggling at every step with other tools, but with Eclipse I was able to get going very quickly and build, refactor, test my code rapidly. This is what I've been looking for, this is what native Arduino IDE did not provide, and so I wrote a post about it :) Pure and simple.
I'd say that whatever you think of eclipse, you'll have to make an exception for the question "What is a better development environment than the Arduino toolset?"
I use Eclipse. What's the problem? After the initial setup for the libraries it works great - just hit build, but with the full and normally working gcc build chain.
Now I just use plain old avr-gcc or gcc-arm-none-eabi and my favorite text editor, and my embedded development experience with Arduino-compatible products has never been better (despite not using anything from the Arduino project).