I’m an adult professional programmer. The gaming machine of choice when I was a kid was C-64, not NES, so I knew programming your own stuff was a thing at elementary school age. The obvious interesting thing with the computer was game programming. The (generally correct back then) received wisdom also was that any serious game programming effort with the 8-bit home computers involved assembly languages, but I wasn’t able to find any manuals or software I could understand to teach myself assembly, so I never ended up learning it.
A few years later the PC was the top gaming box, and assembly had given way to C (and Turbo Pascal, which was a big thing on DOS back then for some reason), I managed to learn C after a false start or two, and went off happily coding many stupid things I did not finish with it. So not much of a lesson here, not learning assembly at age 10 didn’t seem to slow me down much later, and it also turned out that I never did need to learn to program 8-bit microcomputers right down to metal to make games. Still, I’m sure it would’ve been interesting to learn that.
The big thing that made me learn programming was the intrinsic drive to want to program computer games. Any sort of achievement-endorsing authority figures were generally entirely indifferent to this.
The hard things in programming for me are also ones which I suspect are inherently boring. Working with legacy codebases, working on uninteresting features that are needed for business reasons, finishing the countless little things like documentation, ports and packaging so that something can be released, and in general going from the 80 % solution to the 100 % one. I guess I could echo nyan_sandwich’s admonition to teach shipping here.
I did waste some time writing unnecessarily bad C++ before I read Stroustrup’s book on the language, so I guess hitting the books early could help. I also crashed, burned and never recovered enough to have any degree of academic success with university level maths after basically coasting all the way through high school, but as far as I can tell, this hasn’t had much any impact with my programming skill. It did keep me from ending up in any kind of grad school, which I thought I would end up in when going to university.
So I guess my first choice of an experiment for 10-year-old me would be to hook him up to the present-day internet and teach him to download lots of textbooks on programming. I might worry a bit about a parental authority figure pushing the stuff extremely hard, since that might kill off the intrinsic drive which has been pretty important for me, but having some sort of mentor who knows the stuff and who you can bounce things off might also have sped things up a lot back then.
I do miss never learning how to make tracker music and not getting into the demoscene as a a teenager, so there are those. Tracker music is kinda programmy and could exercise the hypothetical music and programming skill connection. The demoscene thing is a general programmatic art competitive thing that will teach someone a lot about how to make a computer do tricky things if they get into it. The demoscene seems to be pretty much an European phenomenon, for some reason, and also a dying one, since fewer people who know about computers nowadays consider making them do intricate moving colors and sounds to be an impressive achievement.
Should I focus on him doing lots of coding or, for example, would he be better served by learning additional math?
IMO, definitely lots of coding. Lots and lots of coding. There’s a big aspect of craftsmanship in being a good programmer, and at least for now, solid craftsmanship and weak theory seems to beat solid theory and weak craftsmanship most of the time.
I’m an adult professional programmer. The gaming machine of choice when I was a kid was C-64, not NES, so I knew programming your own stuff was a thing at elementary school age. The obvious interesting thing with the computer was game programming. The (generally correct back then) received wisdom also was that any serious game programming effort with the 8-bit home computers involved assembly languages, but I wasn’t able to find any manuals or software I could understand to teach myself assembly, so I never ended up learning it.
A few years later the PC was the top gaming box, and assembly had given way to C (and Turbo Pascal, which was a big thing on DOS back then for some reason), I managed to learn C after a false start or two, and went off happily coding many stupid things I did not finish with it. So not much of a lesson here, not learning assembly at age 10 didn’t seem to slow me down much later, and it also turned out that I never did need to learn to program 8-bit microcomputers right down to metal to make games. Still, I’m sure it would’ve been interesting to learn that.
The big thing that made me learn programming was the intrinsic drive to want to program computer games. Any sort of achievement-endorsing authority figures were generally entirely indifferent to this.
The hard things in programming for me are also ones which I suspect are inherently boring. Working with legacy codebases, working on uninteresting features that are needed for business reasons, finishing the countless little things like documentation, ports and packaging so that something can be released, and in general going from the 80 % solution to the 100 % one. I guess I could echo nyan_sandwich’s admonition to teach shipping here.
I did waste some time writing unnecessarily bad C++ before I read Stroustrup’s book on the language, so I guess hitting the books early could help. I also crashed, burned and never recovered enough to have any degree of academic success with university level maths after basically coasting all the way through high school, but as far as I can tell, this hasn’t had much any impact with my programming skill. It did keep me from ending up in any kind of grad school, which I thought I would end up in when going to university.
So I guess my first choice of an experiment for 10-year-old me would be to hook him up to the present-day internet and teach him to download lots of textbooks on programming. I might worry a bit about a parental authority figure pushing the stuff extremely hard, since that might kill off the intrinsic drive which has been pretty important for me, but having some sort of mentor who knows the stuff and who you can bounce things off might also have sped things up a lot back then.
I do miss never learning how to make tracker music and not getting into the demoscene as a a teenager, so there are those. Tracker music is kinda programmy and could exercise the hypothetical music and programming skill connection. The demoscene thing is a general programmatic art competitive thing that will teach someone a lot about how to make a computer do tricky things if they get into it. The demoscene seems to be pretty much an European phenomenon, for some reason, and also a dying one, since fewer people who know about computers nowadays consider making them do intricate moving colors and sounds to be an impressive achievement.
IMO, definitely lots of coding. Lots and lots of coding. There’s a big aspect of craftsmanship in being a good programmer, and at least for now, solid craftsmanship and weak theory seems to beat solid theory and weak craftsmanship most of the time.