I started out with learning BASIC on my first computer, a TRS-80 Color Computer 2 with 16K of RAM. The processor (6809) ran at sub-MHz (789 KHz, IIRC?); a television was my "monitor", and for storage I had a cassette tape (later upgraded to a floppy drive).
This was about 1984 or so; I was 10 years old.
Initially, I used the books that came with the computer to learn with. My parents also got me a few subscriptions to various computer magazines (Rainbow, Hot CoCo, Family Computing, K-Power) that I typed in programs from. There were also various books from the library that I would check out, and make various attempts to convert code over (the Color Computer was very under-represented in the world - so learning how to convert from one BASIC to another was of paramount importance). Sometimes I would be successful, sometimes not - in many cases I would have to do a lot of debugging to get things to work properly.
I learned more from my mistakes than my successes.
One thing that you might find useful is to stick to a single language, and not jump around between languages in your learning. Pick a language, and stick with it. I would personally recommend the Arduino and C/C++ (I wish I could have had this when I was learning - but at the time, a C compiler for the CoCo required a different operating system - Microware's OS-9 - and both together would set you back a few hundred dollars, not to mention you needed a dual floppy drive system, plus 64K of RAM - in short, not on my parent's budget).
The reason I say C/C++ is because most other languages - once you learn the ins and outs of C/C++ - will come pretty naturally to you (especially if you go beyond the simplified microcontroller system - and move more into programming larger applications on a PC).
Anyhow - ultimately if you want to become good at it, expect a long road ahead - one filled with fun times and lots of frustrations too. You'll never learn everything - and you ultimately don't want to stick with only a single language your entire "career" (though if you did, C/C++ is not a bad one in general - you'll always be employed in some regard).
Most importantly - become familiar with the basic structures which almost all programming languages share; in other words, don't focus on the "language-du-jour" - but instead focus on the commonalities; if you do this, in short order you'll be able to pick up and work with any language thrown at you (for most languages - there are some out there that defy explanation and have a cliff-like learning curve - but most of those don't have much following or employment opportunities, if that is your goal - so not much loss).
To this end - pick up a copy of "The C Programming Language" - read it for the understanding, not so much to learn from (as it is very out of date in that regard). Also, you might want to try your hand at learning and understanding at least one assembler language (if you are learning with an Arduino, then AVR assembler might be the ticket) - doing so will teach you a ton about what is really going on under the hood.
Finally - if you have a mechanical bent - look into how player pianos work (particularly so-called "reproducing player pianos") - as well as Jaquard Looms, and perhaps even Charles Babbage's works (oh - and Herman Hollerith's tabulators) - if you do this after gaining an understanding of a CPU, registers, the stack, the heap, etc - how it all works, and more - you'll come to a small and interesting "epiphany" that might help it all fit together.
Honestly - I could go on forever about this subject - you have no idea; but I do encourage you to study broad, and study deep - computation and its history, along with all the side stuff - because it is truly one of the most fascinating subjects humanity has wrought over the centuries...