I got my first Arduino a month ago (an Uno) and have been playing with it every day since, including making a light-up hat from a Lilypad and putting together a Mintduino (breadboard Arduino clone) and a Prototino (soldered version).
In my day job I'm a film producer, but from 1992-1998, I was a computer game designer and programmer working in San Francisco. More recently I've done some hobby iPhone programming.
I love the Arduino but was not crazy about the IDE. I wanted to be able to write and compile programs from Xcode 4.3, and at the same time understand exactly how all the Arduino functions worked and re-build and link them individually. That allows me to keep my programs as small and fast as possible.
Building on the digitalWriteFast and digitalReadFast macros (and the ATmega328 data sheet and many online tutorials for AVR-LibC), I created a single C file called MyArduinoLight which contains all of the Arduino library functions I use. Functions are only linked in as needed, so a simple blinking LEDs is less than 200 bytes of code, as opposed to 1K with the Arudino's built-in overhead. The functions I have so far are: pinMode, digitalWrite, digitalRead (which are all single assembly-line macros whenever the pin is known at compile time); initTimers (for PWM), analogWrite, stopAnalogWrite; analogRead, readAVCC (to determine ADC's reference voltage); mills, micros, delay, delayMicroseconds (which just macro to AVR-LibC's _delay_ms and _delay_us if not using the Timer interrupts); EnableInt0, EnableInt1, DisableInt0, DisableInt1 (for external interrupts); shiftInMSB, shiftInLSB, shiftOutMSB, shiftOutLSB; serialBegin, serialWriteChar, serialReadChar, serialWriteString, serialWriteNumber. (I especially wanted a much smaller serial library that only compiled in for DEBUG builds.)
Although I know C++ and Objective-C very well and think object-oriented programming is great for large projects, I decided to stay away from C++ and the overhead that comes with it. For every function and macro I added, I would check and compare the assembly code the compiler generates in order to make sure the code was as small and as efficient as I could make it. When programming DOS and Apple II games in the 1980s we had to do the whole thing in assembly, so I also love low-level programming and seeing how small and streamlined I can make things.
I'm not sure any of this is of interest or use to anyone, and it's mostly a collection of other people's work just put together, but I'm eager to share the experience if anyone is looking to do something simliar.