That was the best thing I ever got. All I had was the BASIC cartridge, Asteroids cartridge, and the intro to basic that came with it. I had no storage--that was the compromise for the step upgrade. It was a great lesson to spend literal days writing, refining, and perfecting a program. Only to eventually get bored "I wanna play Asteroids, poof." Eventually I hung around the right places, met folks, read magazines, learned machine-then-assembly language. Everything since then has been pretty easy building on all the low-level stuff. C, oh like assembly but more convenient. It was also fun to disassemble the games I got to see how they worked. Some of the worst games had the best copy protection--they must have thought highly of their creation.
Every computer since then has pretty much been a 'business machine', not nearly as much fun. Even the Atari ST with its M68k seemed very work-like. Lucky for me, I liked worky things too, learning the early Windows, OS/2, NT SDKs etc. The NeXTSTEP OS and Interface Builder blew my mind.
But I think I would have been better off starting at the highest level like most people do now. I'm sure the stuff I learned doing straight C helped me a lot somehow, but I didn't start learning anything I directly use now, until I started using high level tools and best practices.
I think I would start out with Git(Just learn VCS and use it from day 1), then Python (getting into pip, virtualenv, MyPy, etc as soon as possible), then maybe SvelteKit, to avoid spending so much time getting into ways of doing things that I never use anymore. I was writing little strings parsing utilities by hand in C and things like that, copying and pasting instead of using package management, putting significant effort into stuff that doesn't scale and then having to rewrite, and not learning about what tools are available because of probably laziness and task inertia(related to the "just use prints rather than set up an ide with a debugger" phenomena!).
Or, maybe starting with C really is better, because if I started higher level, I probably wouldn't have wanted to put much effort into the low level stuff, and that might have been an issue when encountering
Later, I got a LAMP stack running on a Atom Netbook. My first big "app" was a chat app in PHP which I learned from reading various tutorials and manual pages in a pre-GitHub world. I also made a micro webhosting platform with some .uni.cc domain that a couple online friends used.
Since I wanted to do game programming I taught myself C++. I still remember the three books I borrowed, one is Deitel's "C++ How to program", one is "C++ Primer" and the third is "Walls and mirrors", a book about data structure and algorithms.
I read about 60% into the first two books and half into the third one, did a few trivial game projects, eventually stopped at writing a 2D tile based rpg engine. I was thinking a little too complex at the moment, that I would like to implement a scripting language amd an editor inside of the engine (NWN is a major inspiration). Eventually I got a basic editor running up and sort of xml-like configuration language for scripting, but the project is too messy so I stopped working on it.
Anyway that is probably the most complicated project I worked on. I took a second shot last year, taking another route using MapEditor as the map editor and implemented shadow casting. But then I dropped the project again. It was not as interesting as it was 10 years ago.
So most of it was learned through hobby projects and on the job. I am especially grateful for a teammate who was a very thorough and strict code reviewer. He helped make me into a better programmer by meticulously considering and questioning every line of code I wrote.
Everything after - mostly "self" taught... As long as you count copious books written by others as "self"-taught... PHP, Java, C/C++, Python, Javascript.
Occasionally some of my friends would provide assistance when I needed help (they're busy people and I don't want to bother them much) - but in the end most of it was pounding code & failing ad nauseum.
That experience is the only real way to understand. At least for me, I need the experience, not just the theory. But the experience alone misses a lot of underpinning - so reading theory helps back up and solidify what I do know and help reason about things and why they are going wrong.
I dub the "Throw everything and see what works" : The Wacky Wallwalker Method.
I should note I have never been employed as a professional programmer and this is probably a good thing.
When you are self taught you selectively avoid so much garbage that formally educated developers cannot live without. I guess when the education is entirely a cost of your personal time and frustration you tend to prefer utility over convention and durability over convenience. You don’t want to waste time on unnecessary things yet simultaneously don’t want to indefinitely repair sloppy code easily written with weakness and laziness.
The trick is to be humble enough to not hesitate to search online any time you don't know something. I would set myself manageable little goals for every program I wanted to write, then I would search online for any detail I was missing to make it happen. At my job now, the goals are set for me, but the process is otherwise the same.
At one point used this puny machine to compute the digits of one of the largest Mersenne primes then-known to science (mid or late 80s). Not find that number of course, just produce a decimal representation of it.
On its successor, the ZX Spectrum, I got into cracking copy protections, POKEs for infinite lives etc.
MSX machines got me into hardware mods (RAM expansions, floppy drive replacements, repairs & much more).
Didn't turn coding into a profession though. But the hacker mindset never went away.
Removing protection started out being easy, but over time got pretty complex. I remember the various Speedlock protections quite fondly, with their various decryption routines layered upon top of each other.
That turned into php and custom wordpress implementations for more money (all terribly coded in retrospect). I even ended up making a 100% custom CMS for our WoW guild website.
I've never been great at sitting down with a book to learn, and need a problem I'm trying to actively solve (with much googling).
If I had to teach someone from scratch now, I'd teach the basics of text editing, files, etc... then Python, something immediate mode, like BASIC was.
I guess I'm still learning how to code :)
https://archive.org/details/schneider-cpc-464-bedienungs-han...
Especially chapter 5 with all the nice graphics commands.
Though the learning never stops.
Followed by a box containing C++ Builder 4 and a project I was told to to start working on.
Try, fail, learn what you did wrong, repeat.