Go ahead and get yourself a Spark Core. I’ve written a lot of code in pure Wiring (the Arduino language) and it all works fine on the Core. There are a few minor things to look out for – such as int on a Core is 32 bits (same as a long) while an int is 16 bits on an Arduino (and a long is 32 bits). But this is more of an issue if you declare ints on a Core for 32 bit math and then want to port your code back to an Arduino.
From the software point of view, the main issue in going from Arduino to Core are the libraries. As has been mentioned above, lots of libraries have been ported from Arduino to Spark. You see only a few of the “official” ones in the docs.spark.io online firmware documentation. However, when you sign up for your free Spark account and open the web IDE, you can see a whole lot of other libraries that have been ported. So make sure that your Arduino projects that use libraries have the necessary libraries ported over to Spark. Writing and porting libraries is not for the rank beginner, but if you need a library ported, post your request on this site and I’m sure that someone will take up your cause!
On the hardware side, pay attention to the fact that Core I/O is at 3.3 volts and may not be compatible with 5 volt devices. The “D” pins on the Core are 5 volt tolerant, however. I have hooked up some 5 volt 315MHz and 433 MHz receiver modules to the Core using the VIN pin to supply about 4.4 volts out as Vcc for these modules. When powering the Core from USB (5 volts), VIN will supply out 5 volts minus one diode drip. The data pin on these 5 volt modules puts out the module’s Vcc and I had no problems connecting these to D0 and D1 pins of the Core, even though the high voltage is higher than 3.3 volts.
If you want or need to level convert, you can make a simple level converter out of a transistor (e.g. 2N2222) and two resistors (47K will do nicely). Connect one resistor to the base of the transistor, the other resistor to the collector of the transistor and ground the emitter of the transistor. To convert 3.3 volts from the Core to 5 volts for external logic, connect the other end of the base resistor to an I/O pin on the Core, connect the other end of the collector resistor to +5 volts and the output to the external logic is the collector of the transistor. Make sure that your 5 volt supply’s ground is connected to the Core ground! For inward conversion, the input from the outside world is the other end of the base resistor and the other end of the collector resistor is connected to Spark 3.3. volts and you will get 0 and 3.3 volts into a Spark I/O pin with any external DC voltage greater than about 1.7 volts. (Again, make sure that the grounds of the two power supplies are connected together). You can also use an opto-isolator in lieu of a transistor if you need to isolate power supplies (not connect their grounds together), albeit you will need smaller resistors to draw more current to power the opto-isolator.
There are also voltage converter chips for multiple conversions and, of course, the Spark shield shield for Arduino compatibility – both voltage and pinout.
I’ve got a bunch of Arduino’s around here, but I’ll be developing for Spark (the Core now, Photon in March) in the future. Why not – Spark is cheaper, faster, has more memory, and Internet connectivity. What more could you ask for!
P.S. The one thing that you get with Arduino is the Serial Monitor in the IDE, which is not available on the Spark IDE. However, you can debug Spark using serial I/O if you have a terminal emulator program on your development maching. I use PuTTY on Windows – it works just fine as long as you open PuTTY only AFTER your Spark Core flashes your latest firmware.