Actually the idea of Arduino is great. It’s a gold mine for novices to get simple and middleweight projects to get working in a short time. But all fun ends when critical timing kicks in. Probably this is why there are lots of attempts to mimic Arduino with high performance microcontrollers like PIC32 based ChipKIT or ARM based Netduino. These alternatives may save you in most cases by turbocharging performance but eventually you will end up wasting resources for hidden unknown and then you’ll be forced to dig deeper in to microcontroller hardware.
Vassilis gives a nice lists that demotivates choosing Arduino for more advanced projects. Instead he suggests focus on pure programming using tools like AVR-GCC with no hidden libraries and functions. He points many reasons like Arduino IDE which is worst IDE for writing and editing code, fixed Arduino clock speeds, mandatory bootloader which occupies program space. Also simple operations like digital write takes to many clock cycles. Some background code is still running even if you’re not using it. As a proof try to compile empty Arduino program and you’ll see that it takes at least 466 bytes for doing nothing. By no means we are not discouraging using Arduino. As in all areas choose smart. And learning microcontroller architecture instead of blind relying on libraries is always a win!