Ask HN: It's 2022. Where should I direct the youths to learn about programming?
So... Child #2 (18 yo) is interested in learning programming. Good "with computers" and proficient in level-appropriate math but didn't grow up as a hacker like his old man (I'll refrain from making him learn turtle graphics and BASIC). Where should I point the kid to learn the basics?
I'm afraid that if I show him how to download (or, better yet, build) emacs, how to build SBCL, install SLIME, etc... and hand the kid copies of SICL and PCL someone will call child protective services on me. I imagine there was a time when the answer would have been java/awt, but those days seem long gone. Maybe there was a let's do it all in javascript phase, but that doesn't seem to be the answer today.
So... modern starter pack? VS Code and Python? Tell him to learn Pandas/SciPy/NumPy?
Are there any highly recommended online courses for learning this stuff?
191 comments
[ 4.5 ms ] story [ 271 ms ] threadhttps://bubble.io/how-to-build
or scratch
then build some things. then search on the internet and see if there's any tutorials on how to do it with code.
I think the first step is to think about what he would like to build.
Eventually you need to write code. Spreadsheets are code, and functional to boot. Everyone can do something in them, and fewer are proficient. It's not that hard to get started coding anything, however it may be hard if you don't know where to start, which is where Scratch comes in handy.
Python is great for beginners, it's usually the first language taught in schools.
Web development is also really easy and rewarding, which makes it a particularly good route to get someone started in programming. Just remember to guide him through JavaScript libraries after learning html, CSS and JavaScript. When I first started learning web dev, I didn't know about frameworks like react and angular which caused me to waste a lot of time rewriting things which could have been made as react components. It was a lot more difficult to maintain the website I already made at that point.
Like you said replying to someone else's comment, game development is good for getting into programming. Although, make sure he is aware of the other routes, as game development isn't always the best career path even though it might sound fun at first.
Finally, let him make choices. You shouldn't have to decide everything for him, it's a good skill as a programmer to be able to look things up yourself. Maybe ask your son to find out what he would prefer to do, although if you already have some experience, of course let him know if there's anything that could help him get started in programming quicker.
Enjoy the rest of your day!
For example, when I started studying engineering, it was great to see solutions of differential equations and ways to solve them on computers. Others have suggested games which could be great if they enjoy gaming and want to know more behind the scenes. Basically my approach would be to find a problem or two and use programming to show that computers can do wonderful things once we learn how to interact with them in various ways.
Probably has lots of different things that he wants to learn so help him explore each.
Python for command line stuff and backend stuff, vanilla JS, html, css for blogs or web pages.
There's also either online classes like Udemy or in person camps or summer programs that would be great, he can meet ppl his own age trying to code too.
I know a few years back iOS coding classes were the rage, now it'll probably be something with blockchain...
In terms of code editor maybe just sublime or atom, no need to go super complicated, he'll figure out what he needs as he builds expertise.
Try to give them a tour of what can be done in each domain, and see what they'd like to try.
https://github.com/bayandin/awesome-awesomeness
https://github.com/sindresorhus/awesome
Also, there is always nocode/lowcode solutions he can put together.
https://github.com/kairichard/awesome-nocode-lowcode
Whats the child's actual goal though? Is it to be able to gain a useful workplace skill that will actually provide financial support for their lives (something that their peers who don't end up in tech will struggle with heavily)? If so web dev is honestly a really good path, and quite useful, and will touch on things they already know.
If they're a gamer see if they can make some mods - minecraft is good for it, but the best one is something they're already into.
If they care deeply about some world issue like say climate change, try to have him make some visualizations and do some data science on climate data to understand whats going on.
What you do with coding is imo a bit more important than how you code. Does the kid want to take apart toasters and put them back together again? What actually motivates them?
Starting from there you can learn almost anything for free.
[0] https://youtube.com/c/TheCodingTrain
Wont't say it's the best but I've been trying to fix a lot of things I don't like about existing content/platforms.
At your son's age, there are plenty of how to program python courses using udemy and the like that show to build progressively harder apps for a complete beginner. From there, he could probably try to do one of those google certificate courses on android development or the like.
I remember having to check out BASIC programming books from the library as a kid to learn. These days, people have made fortunes on creating videos on how to program.
Correct, and it's great! Unfortunately most of them are in English (and probably mandarin?) and not every 11-year old knows it at that age.
I remember the 12-year old me studying English on XDA forums talking about custom ROMs for the good old HTCs. That's what got me into programming and computer science, so many good memories.
- 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.
https://gist.github.com/cellularmitosis/6e191bf6b6f062e5f558...
TIC-80 gives you those + all four essential freedoms (seeing, sharing, modifying and using) with the source of the fantasy console itself.
There are some good examples prepackaged with it (from drawing a single sprite to a little ~½ dozen screen top-down action adventure).
This is the most basic of javascript game engines but also challenges you to be creative.
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.
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.
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 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?
https://twitter.com/ppathole/status/1116670170980859905?lang...
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’m definitely severely restricting the internet for my two daughters, out of a sense of realism and not due to some “neurological issue”.
I also discovered (far more) disturbing porn at 12, but it actually doesn’t preclude you from treating your sexual partners with respect.
(And yes, I had several dysfunctional sexual encounters before I actually grew up)
Inevitably your daughters will discover the unavoidable loopholes.
(Edit: the anger you’re feeling right now is exactly the neurological issue I’m talking about)
Some tools are dangerous if you don't have a certain level of maturity and experience.
> 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.
Delphi is no more but there is some successor, seems to be well received on HN.
Things like Scratch, Python+Pygames etc make the initial hello-world style apps too easy and then there is a gigantic learning curve for anything better. It is very hard to keep the motivation going.
We tried codehs.com . Kids spend an excruciating amount of time trying to make the print statement's literal output match with whatever the code-checker is expecting. It is frustrating even for me to try to debug their code. I feel any kid who is learning coding without an IDE such as VsCode will get discouraged from this field.
I am just about to start a session for 8th grade graduates to introduce them to 'advent of code'. At least here, the right answer is just a number. No more worrying about the quote character being in unicode or text.
The one that got real interest from my students was a world-puzzle solver - to cheat the phone game "LetterPress" (free on iPhone and Android). They finally understood how a bot (official bot that you play against) could be so smart.
I am still on the lookout for such good examples that they can actually use in real life.
Of current environments, Python may come the closest. (Other environments have a REPL, which is a great environment, but "REPL + harsher learning curve" is not what you're looking for.)
On your main question about how to make the (now painful) dev environment setup easier I have some suggestions:
1. Just use javascript
2. Just use python/pygames (yes it has to be installed)
3. Just use a hosted environment (like replit.com)
4. Just use swift if you are a mac user
After some initial experiments it should be more clear where the journey goes. Some learn better bottom up, meaning few abstractions are suitable. Some like bells and whistles, UI or games. Some like domain specific stuff like math or robotics.
There’s plenty to explore. The big realization has to be „I can do pretty much anything!“ and off they go. Just be there when needed and it’s going to be fine.
*This really depends on his goals. AI/general scripting -> python. Sysadmin -> C/Perl. Games -> C#/Java if Minecraft. Etc.