I wish I could still recommend BBC BASIC. There's nothing on earth now that could substitute a BBC Micro, User Guide (and the Advanced User Guide), and any DFS manual that covers the catalogue sector contents (Watford's for example). Simple CPU, simple procedural BASIC, file system so easy you can edit the sectors by hand – it's a nutshell of most of what anyone needs to know. Low-level enough to ensure that you know what machine code is, tracks and sectors, all the little details that are key to understanding how a computer really works, but at the same time, it's so simple and so logical that it's not difficult.
The problem now is that there's a very slight paradigm shift in the development of user-level software that 8-bit machines no longer leave you suitable for: multitasking. Single-threaded, synchronous applications are a nightmare, but they're everywhere. Think of every time you've asked Outlook to do something and it's locked up solid while it's thinking about it, and you can't use any of its other windows.
Worse, playing nice with other software is hard. Windows makes this far harder than it needs to be, even simple things like managing your file associations without butchering the system (Apple's manifest system is much more maintainable as programs only advertise services). On a one-disc-per-program microcomputer, this doesn't matter. On a hard drive machine, one naughty program can make a real mess, especially if it makes problems appear to come from someone else's software (cf Photoshop Elements blocking the escape key in all other programs, particularly if, but not limited to, when Catalyst Control Center is running –
HOW did they stuff that up???)
C is pretty hard going for a beginner, and a touch on the obtuse side – it's not quite gratifying enough, and little mistakes will just cause so many crashes you'll throw the computer out the window. You do have to learn that computers will do everything you say, no matter how stupid ("
Yes I really do want to jam the escape key across the whole system!") but C takes this a little too far for anyone but the most desperate beginner. C is a language best learnt with a mentor to hand, something I never had, so I never did get my head around it properly. Pointers, pointers to pointers … Man alive.
Other pitfalls include text representation – be careful about starting out with the assumption that all printable characters fit into a single byte, because they don't. Make sure you start out with a language and framework that are fully end-to-end Unicode, and always work in characters, not bytes. This means when nutters like myself see fit to enter minus “−” signs and Klingon and other nonsense into your app, it won't come back with "

?? ??

??




".