I usually recommend everyone who wants to learn programming:
- to write some games,
- or alternative to write some tools to be used for themselves to automate or simplify some of their tasks.
Writing games can be so much fun, and is incredibly deep such that you can pretty much touch upon all topics of programming, networking, computer science, algorithms and data structures, artificial intelligence, 3D graphics, GPU programming, low level programming, multi threading, etc. But also, you can start very shallowly and simply.
Writing tools gives you the feeling how useful and productive this can be.
What languages to use depends a bit on taste, background knowledge, and how steep the learning curve can be. I think Python is a good general purpose starting language.
Also, in any case, you should start actively coding right away. I know people who wanted to learn programming but just kept reading books and watching tutorial videos all the time while not really trying it out, and in the end they obviously did never really learn it. You need to have projects, or just random playgrounds. Also, don't start with a big project right away. Do many small projects. Play around.
Yes, agree about the last paragraph 100%. I'm only 19 and got into programming maybe 7 years ago. At the time I was gifted a Raspbery Pi. Next to the infamous Scratch, there were about 10 pygame examples. I got the itch to modify them. Trough trial and error I somehow found the source files and I just started removing code and changing numbers. At some point I started copying lines I've seen and recomposing them.
As I wasn't allowed to just go on the internet (yet), some time later I also got a CS book. By studying that, I finally was able to "program" what you would call it.
I agree all the way: Don't read about programming. IMHO, taking a (veeery easy, in my case it was Super Simon in ~200L Python) program, game if you wish, and starting to just change stuff around. This gets you comfortable with the concept of coding. "Formal" education (ie. books etc.) are only required once you already are fascinated.
This is the advantage of the young: They are not afraid to try out and break things. I'd suggest using this phase of life as it is intended.
Can you say more about not being allowed on the internet? Why and how you think it affected you?
It’s hard for me to fathom someone at age 12 in 2015 with a somewhat cosmopolitan background (playing games, using an RPi), not being allowed on the internet, period.
Not the parent but, as the parent of a 16 year old, I can imagine that some kids at age 12 simply aren't mature enough to be let loose on the internet.
For the most part my friends and work pals who are all software engineers or work closely with tech (DBAs, SREs, Sec). Their children aren’t allowed to use the internet unsupervised or in some cases not at all. Pretty much all of us don’t let our kids use social media.
For my friends who don’t work in tech, their kids all have social media and use the internet unsupervised.
I think it's a good idea, but I wonder if this would work if you didn't have a circle of like-minded friends for the kid. For most kids nowadays (and adults, increasingly), there wouldn't be much social interaction outside the family if they were prohibited from social media.
Internet services are designed to be addictive for kids (and adults). Usually, this addiction is not good for the kids. That’s why my kids are not on the Internet unsupervised.
But what do they do when they are at friends homes, or at school all crowded around a iphone in the bathroom.
I don't have kids, but there's a part of me that would want them to see the bowels of the internet, and hopefully Never want to see that crap again. I know there are pictures I wish I never saw. I'm so glad I didn't see the toddler whom was raped by a Russian soldier. Putin arrested that soldier I head.
If I had children, I don't think I would let them use the internet either.
I wonder if their are any good studies on letting children have free access to restricted. Maybe the study couldn't even be legally carried out?
Tell her don't send pictures, don't give name/address, and don't meet people, and she's safe? (She already should have applied these rules IRL from a much younger age anyway.)
It’s a neurological issue stemming from the protective instinct of parents.
Kinda sad actually, when you consider that Aaron Swartz was a member of the RSS working group at 14, after already winning a prize for an online encyclopedia at 12.
I wish my single mom had had the technical savvy to keep me from becoming a porn addict at 12. I had erectile dysfunction when I finally had my first real sexual encounter and it took years to learn how to be with a real woman versus looking at a screen. It also spread into worse more risky behaviors in my adulthood, and I think exacerbated my social shyness and kept me years back in learning how to socialize.
I’m definitely severely restricting the internet for my two daughters, out of a sense of realism and not due to some “neurological issue”.
> or alternative to write some tools to be used for themselves to automate or simplify some of their tasks.
This is exactly how I learned programming as a kid.
The one difference I would recommend is to not focus on 3D, low-level programming, AI, data structures, etc. at least for younger children. When I was a kid these things confused me (I specifically remember getting random memory management issues and confusing EXC_BAD_ACCESS, and generally resorted to just liberally retaining everything). I just wanted to make things and got bored easily, so I accomplished most making simple projects on Scratch (very basic game-engine) and high-level IDEs.
Of course ultimately it's up to the kid what they want though. If they're more interested in the low-level mechanics and how things actually work than just getting them to work, good for them.
I’ll second the recommendation for PICO-8 to get started with making games. The built-in game browser, combined with being able to easily see the source for those games is fantastic.
What about playing a game about learning to code instead of writing a game? I spent a few days on codecombat.com as a beginner and thought it was both a great learning experience and an entertaining game.
One of my programming starts was Delphi. Pascal is an easy language, but has some fundamental features: pointers, classes, procedures, custom types, manual memory management on heap and so on (it was devised as a teaching language IIRC). Delphi provided a GUI builder and a rich library which made it all fun and visual; you could whip out a first “program” or “game” in no time.
Delphi is no more but there is some successor, seems to be well received on HN.
turtleSpaces is a 3D Logo environment that allows fit pretty straightforward creation of simple 2D and 3D games in the browser using turtles and can provide a bridge between Scratch and Python https://turtleSpaces.org
Loose connection, but made me remember https://code.world/ uses a Haskell-like functional language to define still pictures, animations, or even games.
- to write some games,
- or alternative to write some tools to be used for themselves to automate or simplify some of their tasks.
Writing games can be so much fun, and is incredibly deep such that you can pretty much touch upon all topics of programming, networking, computer science, algorithms and data structures, artificial intelligence, 3D graphics, GPU programming, low level programming, multi threading, etc. But also, you can start very shallowly and simply.
Writing tools gives you the feeling how useful and productive this can be.
What languages to use depends a bit on taste, background knowledge, and how steep the learning curve can be. I think Python is a good general purpose starting language.
Also, in any case, you should start actively coding right away. I know people who wanted to learn programming but just kept reading books and watching tutorial videos all the time while not really trying it out, and in the end they obviously did never really learn it. You need to have projects, or just random playgrounds. Also, don't start with a big project right away. Do many small projects. Play around.