There are a lot of people on here that really don't know what theyre saying, or at least don't think before they type.
Programming, like electronics, is a skill of many parts. Learning a language is just one small part of it. Experience programming in Arduino's libraries, PIC Basic, C, Assembler or gibberish will give you skills in programming that you will take with you as you move from platform to platform, language to language. Programming involves learning to
specify what you want,
split it into small managable bits,
program those bits, fit the bits
together, then work out why its not working (
debugging).!
Disclaimer: Yes I use arduino's. But I also program in C and Assembler on PICs, C, C++, FORTRAN, Python, Javascript etc on everything from mainframes to telephone exchanges. I've been a programmer in industry for 35 years so I have begun to get the hang of programming.
The Arduino
hardware is really just an AVR with a crystal and an usb/serial interface, and a lot of places to connect wires. You don't HAVE to use the Arduino software, you could connect up a JTAG programmer, use the Atmel tool chain to compile programs and use AVRdude to program the device. You can even get variants line the
Boarduino or
Ardweeny that will slip into a breadboard if you want.
The Arduino dev environment is pretty minimal, its true, but its designed for people who aren't experts, i.e. beginners. And its a poorly kept secret that if you want to cast aside the strictures of the arduino libraries, you can actually manipulate the AVR's registers and tender internals directly, straight from the "arduino language" - AKA C++, one of the top 3 most used programming languages in the world - so its far from "closed off" as some experts on here would have you believe. You can even insert Assembler code into C++ programs for those really time critical bits, so you have no reason to feel emasculated.
Getting back to practicalities, as well as the stuff TerminalJackson mentions, one accessory that I find is essential these days is a USB-serial cable that communicates at logic levels, often called an
FTDI cable. If you're being a manly man and building your microcontrollers and programming them with an AVR ot PIC programmer, you'll still need some way to send and receive messages while debugging, at least, especially when you're a beginner..
Of course, a USB Arduino has one of those built in for free....