curious48:
I noticed another poster complained about how long it takes to compile a new sketch (close to a minute).
If it's taking a minute to compile, there is something wrong with your setup. I just tested compiling one of my larger programs (to program bootloaders). It uses most of the program memory:
Sketch uses 28,024 bytes (86%) of program storage space. Maximum is 32,256 bytes.
That took 3 seconds to compile. Short, test, sketches take somewhat less. The "blink" sketch, for example, takes one second. This was using Ubuntu 14.04. Now I'm not going to sledge other operating systems right now, but if it takes a minute to compile "blink" you need to look at what is going on.
The Arduino environment is fine.
I've actually never programmed on the bare metal.
You can do that if you want to. You can make a sketch like this:
int main ()
{
}
That compiles into:
Sketch uses 138 bytes (0%) of program storage space. Maximum is 32,256 bytes.
Most of that is unavoidable overhead (interrupt vector table).
Now add whatever-you-want as the "bare metal" code.
Out of curiosity, since you've written so much, have you ever thought about learning embedded programming on the metal?
I'm not sure what you mean by that. The Arduino libraries just simplify a lot of common tasks. You can get down to the "metal" as you call it by directly accessing the processor registers, for example to set up timers in ways that please you.
There's nothing really to "learn" - you just read the datasheet and make the processor do what you want it to.