Current Topic: The Arduino development environment is unfortunately tailored to an amateur programmer. That's not to say it does not work well but it hides too much of the control and understanding of the code generation process misleading novices who have written a simple program (mostly cut and paste) into thinking they have become a professional programmer.
The Arduino Development Environment Can Be Very Persnickety.
The Arduino development environment is highly tailored to the casual (novice/freshman) programmer. It comes complete with a template and libraries for providing instant results with very little effort. Or learning. Or understanding of what an embedded controller is and most importantly the code generation process.
What does that mean. Well... Basically the environment operates in a restricted mode which allows only limited access to resources. The restrictions, also, limit the flexibility over the code generation process. And. The environment seems to intentionally limit the ability to tailor the compile/link process assuming that the choices and options used are always going to be correct.
In a regular programming environment the code compilation/linking generation is done using script and managed by a rule checker that makes sure, according to the script or scripts, that all dependencies have been met for the final target or targets. This processes is generally referred to as a 'make' system. This is what the Arduino uses as well only it hides the scripts from the developer. This has both good and bad repercussions. First. It protects the casual programmer from stupid mistakes that take forever to track down and correct. But most importantly. For the experienced programmer it limits and confines the programs into a very tight model. Which does not always make sense.
Additionally none of the library code is precompiled. As a result it is compiled on the fly making for long compilation times. A complaint that has been registered many times. This is mostly due to the target processor (variety) which inherently makes it difficult to keep everything in sync. Thus it's easier to just recompile everything, every time.
All of this is the result of the environment which is written entirely in Java. Making the whole package just one big script. A script that generates scripts that are fed to the underlying rule checker, compiler, linker, loader, programmer, etc.
And there you have it. The simplified version of some of the things you did not learn about the programming process.
The problem here is that it promotes instant gratification (mostly based on the work of other experienced programmers). It's a kind of Automatic system. If you do things just right then you are rewarded with success. Otherwise, sheer frustration.
That said... I still use the Arduino environment. It's simple and once you get the hang of it you can work around the restrictions. Plus I haven't produced anything really sophisticated yet.
Conclusion.
As development environments go, this one, actually, did in fact live up to it's claims. After installing the software and hooking up the hardware it was immediately usable. The compiler worked. The programmer worked. Except for the above mentioned 'suggestions' the results have been totally satisfying.
13103