The RPI is (currently) a Linux thingy so GCC is available (see Roy's reply above) so you can code in pretty much anything on it. I'm no RPi expert (I haven't ever used one and the only thing that would tempt me (a little) will be if Microsoft implement a decent go at Windows on it.)

Has Mike says you can use "C" on the RPI just fine the Compiler is supplied on the latest Rasbian images with out needing to install it so you an just continue with this.

Yes most released software on the RPI is in Python generally because it's simpler than C if you still want to learn it I would suggest starting a project that requires it and this should push you to learn.

Alternatively how about taking a computing module on EdX that does Python like the MIT one... It's free even!

I suggest 'Learning Python' by Mark Lutz and David Ascher and published by O'Reilly as it often explains the Python way of dealing with c programming tasks. There are lots of examples and exercises (with solutions). Once you get to grips with the Python objects, the very best resource is the wonderful,

In fact, browse the site, first, and see if the downloads and on-line references, tutorials and other documentation are enough to get you going. Once you get functions, strings, tuples, lists, classes, dictionaries and the like, the documentation should make lots of sense.

Imports are to Python as includes are to c. Python imports are modules which add functionality, but most of the ones you want are included by default when Python is installed (by default in the Pi). The Pi also has the IDLE IDE installed for both the current Python 2.7 (widely used across many platforms) and Python 3 (the future). I have written Python programs on the Pi which access the command line, use COM ports and the Tkinter GUI module and they run with minor changes on Microsoft Windows by installing the same modules.

As Michael says, you can program in most languages using the Pi. However, Python on the Raspberry Pi comes as standard with a module to access the GPIO features (although the more complex issues such as I2C, serial and PWM have yet to be added). The Broadcom chip is complex and many of its features are entwined with the Linux operating system. It may not be that straight forward to use every GPIO feature. Also, the Pi2 puts its control and read registers at different addresses. The joy of using the Python modules is that the ins and outs of Linux and Broadcom are already sorted. There are plenty of examples of PWM and I2C programs written in Python just using the simple I/O pins rather than the dedicated Broadcom pins. However, C would be the way to go if you want precise time dependant programming as Python is interpreted and has the occasional mid-program tidy-up. Even pre-compiled Python may be a problem.

I just checked with the Synaptic Package Manager and GCC is already installed in the Pi. Java is in the repository as is Fortran, Ada, Objective C, C++, Cobol... you get the idea! There are lots of others such as Ruby and Forth. However, if you want to use c or c++ you will have to do a fair amount of research to drive the GPIO hardware to the full without killing the operating system. All the usual OS stuff is available to C and C++.

Learning Python looks like a pretty good book, generally I like O'Reilly books, I use their C Pocket Reference all the time.

python.org is a great resource as you say.

As you may have guessed I am interested in access functions like SPI and interrupts, that look like more of a challenge. I have got used to using PSoC processors and the extensive C support from Cypress.

If you haven't found it yet, http://www.themagpi.com/ is a free magazine about all things RPi. There are many projects in python as well as other languages. All the issues are available for download. There are 30 issues now plus some specials.

Python is a high level language and it allows fast problem solving. If it turns out that the problem needs more speed, there are linkages to "C" so the low level stuff can go fast.

I took a free course taught by the Google self driving car guy from https://www.coursera.org/ The course was great, but I don't think a complete python novice would appreciate it (unless fairly fluent in some other languages). There are other courses that are a bit more basic.

...okay Peter, it has been a bit confusing over SPI. When I buy a RaspPi does python come with these fast functions documented? They sound like a RaspPi specific function. Is the documentation online, I did have a look but failed to find how to use SPI? ...Peter

It all depends on how fast you need to respond; Linux by default is nonpreemptive. The Beagle Bone Black, which I have in addition to the RPi B, B+ and Pi2, has two additional processors on to respond to real time events. Exploring Beagle Bone by Derek Molloy (564 pages) is the best guide I’ve found for it. I got it for $10 more than the Pi, but it has on board storage for the OS and twice as many I/O pins, so I believe it is worth it. The Pi is good for many types of embedded systems though. Someone even used it as a brains for a DLP printer, but he is probably not using the default Linux on it.

The RPi is fine for real-time work, but you have to use common sense. Linux is specifically NOT a real time operating system. It is common for serial ports, ethernet ports and other protocols to be set up for debugging purposes. I seem to remember that the hardware I2C pins on the Raspi default to reading any connected I2C memory (and, yes, I've got a couple of cheap 4k chips to play with at some time). Python, even on a true, real-time operating system is interpreted and has automatic housekeeping that can hit timing.

However, raw, non-pre-compiled Python can still be used, for instance, to create an I2C interface on GPIO I/O pins. In-line C code can be embedded in Python objects as a formal part of the language. The I2C and SPI hardware GPIO interfaces are fast and real-time as long as you stop Linux interfering (that is the complexity of providing real-time access to those hardware functions via Python modules).

One of the tricks with Python to improve speed and timing is to 'pre-compile' the object tree and names. I don't do that with the wolfmixer because it obfuscates the code and I want other folk to use my code and ideas, if they want. Pre-compiling certainly reduces all the time taken to reduce the object names to table pointers and code to addresses.

Next, there is a software platform called SWIG 2 for Python that permits C (and C++, IIRC) libraries to be presented as Python objects. I have used it to compile a bit-banging Python program for the FDTI chip on the Raspi. It worked very well, but all the hard work had already been done for me and I had no idea what I was about.

Finally, I have bought a handful of Arduino Mono Chinese clones for a couple of quid each. The Arduino IDE works on the Raspi and any challenging real-time requirements can be dealt with by the tiny Mono for the price of a couple of TI 555 timers. I see this as handy for hobbyist stuff, but any professional use of the Pi should not need additional controllers, just an understanding of what it takes to get real-time functions or real-time hardware working on a complex operating system.