Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: It's 2022. Where should I direct the youths to learn about programming?
203 points by slyrus on April 29, 2022 | hide | past | favorite | 189 comments
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?




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.


Yes, this is pretty common.

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.


Why not?


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?


Why don't we let kids drive cars?

Some tools are dangerous if you don't have a certain level of maturity and experience.



What is a four letter word that starts with “P”? That’s a big reason I’d guess.


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”.


Thank you for proving my point.

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)


> to write some games,

> 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.


Tic80.com - might overgrow it quickly, but excellent for start. Has Lua, Fennel.



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.

https://gist.github.com/cellularmitosis/6e191bf6b6f062e5f558...


> The built-in game browser, combined with being able to easily see the source for those games is fantastic.

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).


I wish they didn’t try to look like a console.


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.


https://24a2.routley.io/

This is the most basic of javascript game engines but also challenges you to be creative.


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.


XNA was great for this.


Monogame (https://www.monogame.net/about/) is nice too.


I can't believe https://futurecoder.io/ hasn't been mentioned!

It has an integrated Python environment in the browser, so the learner can hop right in! That's not even the best part though; I love how well simple concepts are explained. I've been programming for a long time, so there are a lot of things that I forgot aren't a given. futurecoder explains those things really well.

I really cannot recommend it enough! It is a bit pricey though.. JK it's FREE! They don't push it a lot, but they do have an opencollective if you should feel so inclined to donate [0]. I'm not affiliated; just a relative of someone who benefited.

[0] https://opencollective.com/futurecoder


marked


If you click the "X hours ago" next to the poster's username, you should see a link to "favorite" the post.


oops, never knew this, thx!


There's something the "old hackers" know that many CS students don't learn from the start (in the introductory classes), and that is actually how a computer operates. Don't spend a lot of time on this unless he's really interested, but it's a good idea to sit down with him for a few hours and teach him what really goes on inside a computer.

I'm talking about the concept of instructions, registers, addressable memory, etc. - with block diagrams, not with full circuits unless he's into that kind of stuff.

Then when he moves onto one of the high level languages that the other commenters are talking about the concepts will naturally stick. E.g. a variable is stored in memory, when we add two variables in the HLL we are copying those values to registers and using an ADD instruction, then we are writing the result back to memory. When there is an IF statement the computer will jump to either block of code depending on the conditional operation. Pointers become intuitive. And so on.

I've explained this to laymen and people who are interested in computers and have gotten a pretty positive reaction from them - so it's worth a shot. For a programmer who generally focuses on HLL it also allows them to get some idea of how their code is executed in the real world under all that abstraction.


It depends if his motivation is to build something or to learn stuff. Personally, when I was that age, I couldn't care less about learning anything unless it directly helped me achieve my immediate goals of whatever I was building. Turned out that was quite a lot. I learned about registers because I had to to optimize part of a game I was making. I wouldn't have sat down and studied some dry theoretical crap just for the sake of it. Block diagrams were a strong turn-off because you knew there would be no actionable information in them. Why do I care how this unit is connected to that unit? I just want to use the units! I'd naturally infer the structure of things once I was using them.


What formal CS education doesn't cover how computers work at a low level? It would seem like the opposite. Most self-taught programmers are probably missing foundational knowledge that doesn't directly apply to their day to day.


Every CS program of middling quality or above covers that material, but some may shove that coursework into mostly elective courses. Also, students can pass courses without really learning anything so if it's just one or two courses that really dive that deep over their academic career, they can learn enough to pass and then brain dump it.


Can confirm, I studied CS and don't feel like I really understand any of the low-level stuff.


You didn't have a course in machine structures? Including programming in assembly language?


I had one, I got an A in it (one of my best CS classes actually), but I don't remember much because I never applied it outside of the class


I have met more CS graduates who have little clue what's going on beyond what they copy pasted from stackoverflow compared to those who do. Both in the Indian subcontinent and right here in the US. Self-taught folks actually have the capacity to research and teach themselves what's going on under the hood.


Well it was the fifth course in my departments sequence, so a lot of students wouldn't take it until junior year. By that time they were decently proficient at writing code.


That's what I learned in CS, along with many other topics.

There's no way in hell I would learn about registers or assembly languages if I was learning about programming in 2022 outside of a CS program.


You'd have a good chance of being exposed to it if you wanted to mess around with microcontrollers, like for robotics, sensors, automation, etc.


I highly recommend "The Secret Life of Programs" for this purpose.

It starts at the hardware level and works up - it definitely massively improved my understanding of everything that goes on in a machine.


It's a first year CS assignment in my university to modify the VHDL source of a MIPS CPU to add an instruction as well as to program in assembly. It's not that uncommon either.


This is actually quite interesting, as this seems like something that would be taught in a CE curriculum as opposed to being in a first-year CS course. From the people I know who studied CS they may have exposure to HDL and digital logic in the upper years if they say elected to take a computer archicture course, but their introductory courses mostly focused on programming and algorithms.

I guess it really depends on the school - I have a EE/CE background so I know these things, but the CS people I know mostly don't.


Non-programmer here. I've been interested in learning more about exactly this. Where should I start?


I would recommend the book "Inside the Machine" by Jon Stokes. I'm a programmer so not going in with fresh eyes necessarily, but it definitely felt like it began at the start and the author was a tech journalist for Ars Technica (with a Computer Systems background) - I think it does a really good job. It also happens to be one of my favorite books, especially if you're interested in older hardware.


I'll check it out. Thank you!


When I was a kid I'd often spend an evening on a deep dive reading How Stuff Works (as Wikipedia didn't exist then).

https://computer.howstuffworks.com/microprocessor.htm


Thanks for this, looks like a solid introduction!


First find a small problem that you would like to solve then search for a programming solution.


Python is a great option because it is high-level, easy to pick up, powerful and has a library for anything they are interested in pursuing. Something like streamlit is cool because you can write a small amount of code to build a useful web app that you can interact with. For data viz related things, Jupyter + Python (maybe Pandas, not SciPy or NumPy unless that sort of math is specifically interesting to them)

Javascript and webdev is also a decent option since you can build such interesting and shareable web apps quickly, but the frameworks and scaffolding can be intimidating and painful.

I would work backwards from a project/interest and pick a high-level language where it's easy to get a good enough solution and create something that feels like an accomplishment. I would want to teach both programming as well as the joy of programming.


> Javascript and webdev is also a decent option since you can build such interesting and shareable web apps quickly, but the frameworks and scaffolding can be intimidating and painful.

JavaScript can be a great choice for some people as long as you don't try to build a production-level web app from the get go. Start them with a bare HTML file loaded up in the browser and only scale up from there when they start actually having the problems that the scaffolding is designed to solve.


I believe there are plenty of languages better than Python to start programming. Python provides zero interesting or unique ways to look at the world. It's like starting to teach dance with TikTok dances.


Even if that was the case, it might actually be desirable. I think you can't appreciate the uniqueness in the other cases if you haven't met the general purpose mainstream.


Dance is such a broad topic... why not start the youth with "TikTok dances"?


I highly recommend Processing and The Coding Train [0]. The visual feedback is both engaging and illuminating to folks who have no prior experience with procedures or spreadsheets.

[0] https://youtube.com/c/TheCodingTrain


Just to add to this great recommendation, https://p5js.org/ (JS port of Processing) is really great as they can get started right away and the docs are super simple. Dan uses it in most of his videos and really starts at a basic level, but works up to really complex concepts as well. My kids are younger, but they like the graphical part of it way more than me showing them the terminal and Ruby.


Speaking from own personal experience, I tried to learn programming by buying a book on Ruby on Rails in 9th grade, as well as Visual Basic. Obviously it didn't stick. I programmed turtles in middle school, and took a intro to CS class in high school.

But what really did it for me was buying an Arduino Starter Kit and working through the example projects in that book. I was a freshman in college and $100 was a lot of money for me but I told myself it was an investment in myself, and boy was I right. It was also immensely fun because you get to also interact with a physical object (circuits, buttons, etc) whereas most software is on a screen.

I would highly recommend Arduino or Raspberry Pi :) Best of luck!


Perhaps approaching from the point of view of programming as a means to end might be helpful? If they have any hobbies or academic projects that could benefit from automation or using computers, that might be a good starting point?

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.


Yes, I completely agree. One thing I'll add as an example; I used programming as a way to learn about mathematical concepts too. I made a program to render an image of the Mandelbrot set, which helped me learn both some new things in JavaScript (what I was using) and mathematics (complex numbers and limits). You'll probably be able to find a similar sort of project for your son.


> Maybe there was a let's do it all in javascript phase, but that doesn't seem to be the answer today.

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?


(NB: Since your son is 18 this probably doesn't apply, but I'll comment here in case it's useful for others with younger children.)

My 7 year old has gotten into programming through her iPad.

In particular, she uses:

  - Tynker
  - code.org
  - Swift Playgrounds
All three have well-considered tutorial material. Tynker is the one she's most excited about, and the one she's currently spending the most time in. Some of the stuff she's cooked up without any help from her dad... really brings a smile to my face.

I'm old enough to have learned programming on a C64 -- BASIC first, then 6510. Back then, the game was to understand the machine and figure out how you could coax it to do new things. Today, so much programming feels like stringing together black (or at least dark gray) boxes, and hoping that the resulting value is greater than the mental overhead of managing said boxes.

Tynker/code.org/Swift Playgrounds hearken back to the immediacy and narrowness that I loved from the old C64 days. My daughter seems to genuinely be learning from them. That moment when she really "got" variables and loops... big moment!


Seconding this. And Tynker has skins for pretty much anythiNg your kid is currently watching on tv so it’s more alluring that a command line out of the box.


Unity.

It's "cool" and relevant.

The coding part is C# so a nice language and environment.

You don't really need to understand all the low level stuff, you can write some scripts and just press play!

There are heaps of official and community tutorials. API Quite well documented too.

Its not just code. There is a big editor to learn and become good at. Your kids may decided they like other aspects. Modeling, Lighting, Effects, Audio, UI, VR even?

I think there is plenty of Unity employment around, not just in games but all kinds of "multi media" businesses.

Jay


I would also strongly recommend these tutorials for Unity:

https://www.gamedev.tv/

They've got a ton of videos and you could go broke buying them all, but they do good work, they're actually decent educators and the intro 3D game dev on Unity course has 30 hours of content in it and 5 different minigames it walks you through building.

All their courses are also on udemy.com and you should be able to buy them there for $10-$20 each during the "sales" that they have every other week (unfortunately there's a bunch of mildly scammy patterns there to try to create a sense of urgency, but never buy a course for "full price").


I'd definitely recommend freecodecamp for learning whatever language you'd like to get him started with. After watching one of their tutorial videos, your son could have a look at other videos for the particular language if there's something in particular he'd like to do.

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!


Speaking as a 17 year old myself, the way I got into programming was automating. It could be small things, like breaking open a slow dreary web portal and download off things that one might need so as to avoid interacting with the portal, or help out a local business with some repetitive tasks, whatever floats their boat. After they have gotten a hang of it, I would probably have a gentle introduction to the SICP, but thats maybe just me.


+1 for automation

https://automatetheboringstuff.com/ may be a good place to start. Python is powerful with only a few lines of code.


The book ”Automate the Boring Stuff with Python” [1] and the course with the same name is a pretty good.

It is a practical introduction to programming using the type of projects that got many of us into this field and manages to capture the spirit of what makes writing your first program so special.

[1] https://automatetheboringstuff.com/


Roblox. Everything is free including a nice visual IDE. There's lots of documentation and lots of 3rd party education. It's LUA. Best of all, unlike all the other alternatives, there's no configuration or setup beyond installing Roblox and Roblox Studio, the IDE. There's also a chance to make money on the Roblox platform.

https://developer.roblox.com/en-us/onboarding

If you want something more traditional, Rails for Zombies is good

https://www.pluralsight.com/courses/code-school-rails-for-zo...

Oreilly's Head First series would be great too, if they updated it. Hopefully I'm wrong, but I think it's dead.


Agreed about Roblox!! Started (unintentionally) teaching myself how to program on Roblox when I was 9, and turned it into a career! Making games encompasses so many areas of programming/creation. Even beyond programming (back end, front end, UI), music composition, sound effects, animation, design, game design.. and share it all with your friends. Alternatively, a simple engine like Love2D (which also happens to be Lua)


Harvard's CS50x (taken through edX) is absolutely amazing as an intro to computer science. Professor David Malan is really engaging.

I cannot recommend it highly enough.

And, if you don't care for the certificate at the end of the course, it's free


In addition to being quite possibly the best free introduction to CS and programming available online, it also has sequel courses in web development, AI, and game development that one could take.

Alternatively, or in addition, you could follow this course with NAND to Tetris, which had its second addition come out last year and will give any student a firm foundation in understanding lots of low-level details with project-based learning that only requires some basic programming skill.


came here to recommend cs50 and david malan ! one of the best cs teachers, who really cares about teaching !


If he was younger, I would have recommended scratch. I recommended that to my then 11-year old cousin and he is now an engineering undergrad student.

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.


> 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.


I personally would recommend How to Design Programs[0] as a starting point, then whatever technologies are best-suited for particular interests after that

[0]: http://htdp.org/

I'm guilty of this, but it's far to easy to spend too much time jumping between different technologies and programming languages and only learning the basics. So it's nice to have a concrete project in mind, so you can choose an established tool for that kind of project and not get lost with anything else until the project is done.


Came here to post this.

They make plenty of cool projects that young people might enjoy.

HTDP is explicitly designed to be a good pedagogical tool to drill down foundational concepts.


Local community college. Hands on help and smaller class sizes. VS code and code runner plugin will run just about everything. Maybe also a subscription to pluralsight or oreilly's online catalog safari.


Do you know what he wants to build?

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.


I agree with the parent that the focus should probably be on something he wants to build or a problem he wants to solve. It's easier to stay motivated that way.


Haha not a parent but thank you


Oh I didn't mean it like that! Your comment is the parent of this comment and my previous comment is the grandparent of this comment.


Oh lol makes sense parent in the technical term


Rather than making him learn a language to build a simple, possibly tedious tool, let him figure out how the "social" side of the tech sector works by allowing to tool makers to explain the tools. There are lists like this on github. He doesn't have to be a computer hacker to get in to the industry.

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


I suggest Racket to start with. Maybe Ruby later, something fun and flexible to experiment in. Python if it looks like they might actually want to develop it into a skill or a career.

Starting with (modern) JS will turn off pretty much anybody, but probably one of the first things they'll want to learn is how to make a website. Fun JS like game engines might be a good fit.

Python is too magic to start with. It can get pretty complex to follow and debugging a pain.

I would also consider Godot. It's fun and intuitive, syntax is not hard, game logic can be complex but it's closer to the maths they've been studying in school and creating something you can interact and play with is how you get students excited and eager to learn more.


Think Python or what used to be called “How to think like a Computer scientist” is still one of the best beginner programming books IMHO. There is an edition which is upgraded to Python 3 which you can find here - https://greenteapress.com/wp/think-python-2e/


I took CPSC 110 at UBC with Gregor Kiczales (who worked at Xerox PARC). It was the best course I’ve ever taken.

The course can also be completed for free: https://www.edx.org/bio/gregor-kiczales

How to code - simple data, and how to code - complex data together make up the material in CPSC 110 (though there are probably some differences). They’re completely accessible with no background requirements.

The courses are based on this curriculum, which uses HTDP: https://programbydesign.org/

The programming language used is based on scheme.


That's great! Thanks for the pointer. And after he watches the class I can dust off my copy of AMOP that's sitting on the shelf in my office and try to teach the kid about metaclasses :)


I would still call this an SICP case. SICP simply teaches so many things right, that I would deem it the single most important book on programming I read. I still draw from that and it helps me avoid cludgy mistake prone code. The only regret is, that no one has told me about it earlier. The original SICP using Scheme is to be preferred over the "reimplementations" in languages, which lack some of the important language features, that the book hits on and that Scheme has. Maybe also link to the recorded lectures, to give an idea about what great teachers look like.


As many others have pointed out, something relevant like games is a good starting point.

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


I think the important thing is to focus on the end objective - so not programming just for the sake of programming, but programming as a means to do something else.

Start with an interpreted language that doesn't require convoluted compilation or build-steps. Or at the very least something with a "play button" that allows one-click runs. Anything else just distracts and confuses from the actual "programming" part.

I'll echo others and say building games is a good on-ramp for kids. I also recall enjoying playing around in Visual Basic as I could make a "real application" and it was satisfying to see my work as a "real" program I could see and use, and try to work out how to imitate other features I was seeing in apps I used every day.

As yours is 18 something like scratch is probably too "baby-ish" so perhaps python will feel like more of a grown up option for them with the option to do some fun stuff with game/graphic programming. Visual Basic .net (or even C#) will allow for building GUI apps nicely.

If they enjoy those they'll be able to broaden their horizons and learn more. Don't sweat the theory aspects - they don't need to know about runtime complexity and monads etc just to get started - if they get the bug for coding, they'll come across this stuff on their own eventually (e.g. when they end up creating a naive O(n^n) implementation, they'll end up spending some time trying to optimise it even if they don't realise they are doing that - be there to help guide and offer pointers to help open their eyes to it all)

Good luck


We wrote a fairly simple introduction to using Unity, which might be worth a shot. https://projects.raspberrypi.org/en/pathways/unity-intro

The first three projects introduce the skills. The second two give you some agency in decisions. The last lets you make whatever you want to make


A-Frame (https://aframe.io/) + glitch (https://glitch.com/~aframe)

Code interactive 3D apps / VR / AR starting with HTML and dive into the entity / component API as you progress. Super rewarding to get something visual than can be shared with an URL to show off or ask for help.

With glitch one can start coding right away with zero tooling to install no account required. Glitch doesn’t hide details and knowledge transfers directly if one wants to start developing locally.

I recommend also the A-Frame docs as learning material:

https://aframe.io/docs/1.3.0/introduction/

I help maintain A-Frame and seen plenty of success with people learning how to code while having fun. Also advanced capabilities available as you learn. Very accessible but not just a toy.

Very welcoming community.

edit: typos


You should probably try to figure out what sort of programming problem would interest him. That will narrow the field because the libraries needed are not available for all languages or hardware.

Is he interested in making websites, games, AI, embedded control of robots (drones, vacuum cleaners, etc).

Without a goal in mind learning about programming, for most people, is a sterile exercise.


Bait him with something, if he is into game introduce him in Lua. I got into programming because I was into websites, and I've met a friend who's into design and I did programming and he did design.

My nephew is interested in making games for Roblox for example.

I think we are beyond the generation of interest in the baremetal, I learned programming in mid 2000s, I spent just a short time with desktop programs, but was enchanted by the idea of making dynamic websites right after, it was enchanting that I can make something interactive that all the world can interact with. The fact that it was easy to show it to others (a URL) made it nice too, handing people an .exe in 2000s doesn't look nice.

Also being passionate in front of him and talking about what you like in programming would help, because that's how my brother got into it. Me broxplaining stuff to him.

In general just open the doors for him, he might love a language more than other.


The thing about BASIC was that you could just do something. You could try things easily and quickly. You could fiddle with things.

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.)


Just use Javascript and make some games with canvas or something. It's pretty fun, you can iterate fast and web based things are easy to share so your kid can show all their friends their cool stuff. Then if you need to torture your self you can learn how to serve websites with Linux and web servers


> 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.

Fwiw, I'm only a couple years older than #2, and I would kill to have someone in meatspace who would help me with all of the above.

As far as other options, I would say Pico-8, tic80, UXN, Minetest/Minecraft, Godot, or Unity may all be decent options to start with, depending on how in depth you want to go.

Oh, also I really really really really like the book The Secret life of Programs. In my opinion, it really is worth learning how the layer below where you're working works.


Godot (with GDScript). JS + a browser. C++ and an IDE like Gnome Builder or QtCreator. Ruby and Rails. Ruby and command line.


I'm going to try getting my kids to make some simple games with godot this summer, and learn GDScript along with them.


I'd throw everything at them and see what sticks. Try web, gaming, hardware, ML, puzzles... find a place of passion and grow out from there.

Try to give them a tour of what can be done in each domain, and see what they'd like to try.


I'd do the opposite. I'd find out which of those things interests them, and then guide them strongly towards a popular solution for it. If they change their mind, that's fine. But too much choice can make it really hard to approach.


Have you not heard of the idiom "see what sticks."? What you described is not the opposite - its actually the same :) See what stays with them naturally and them go with that.


Make him install an easy Linux distro (I recommend LMDE). Give him an IDE (start with VScode, if he enjoys Linux he'll switch to vim/emacs soon enough), some Leetcode problems, a browser, and have him figure it out. Advise him on compiling if his language of choice* requires it, as it's a pain to figure out when you don't know anything about programming. Should probably also find a basic syntax guide on the language.

*This really depends on his goals. AI/general scripting -> python. Sysadmin -> C/Perl. Games -> C#/Java if Minecraft. Etc.


>point the kid to

>Tell him to learn

>online courses

You're their mum/dad, no? You know their interests, you know their abilities. This is an amazing opportunity to form a lifelong bond. Sit down with them and work it out together!


I'd suggest picking something relevant to the things he's already interested in like modding video games. Obviously this is personal to us all but I learn best building things, and I'm most likely to stick to building things I'm interested in.

SICP is great for those who want to learn more about programming after they have some experience programming. If someone gave me that book as my first one I think I'd have picked a different career field, even though I am now - 8 years later - working through it :)


I always recommend my relatives or friends that interested in coding to learn React and make their own website which contains some logic.

Apart from npm and yarn, they need not install any other tool or builder. Also they can see the results in near real time.

I think the ability to see the result of what they code right-away will keep their interest for the 'fragile and prone-to-stress phase'. Proven my architect older brother and 2 of my friends continue to make website and learn other webtools or language till now.


There is nothing wrong with BASIC or turtle graphics. Those would probably be awesome places to start at least for a few sessions. Google for online turtle graphics or basic or emulators.

The main thing is that he finds something that is interesting and approachable. Build up small achievements. Let him start with simple examples and then figure out how to change colors or the number of iterations in a loop. Don't rush too many things at once. Some things that seem simple like recursion may actually take a bit of time to grasp solidly. Encourage him to be patient and persistent and expect challenges like that.

Don't try to pile on too many things at once.

Dictating which language etc. is not going to help him learn programming.

He needs to be motivated by something and generating his own questions and Google searches.

If he is waiting for you to tell him what to do then your job is to train him to be a proactive learner. Help him find interesting mini projects. Start very simple. But keep trying to build gradually towards something he is really interested in (such as game programming etc.).

No reason it has to be one thing. If you want to hand hold it could be literally 100 different things to play with, show him a different thing every week based on his actual progression and interests.


Yep, BASIC with line numbers is underrated these days for beginning programming. Sure, it won’t get you far, but it helps to start without much abstraction and gradually build from there.


As another commenter notes, programming with a specific goal in mind is a good way to start. People can't sit down and learn "math", it's too broad a subject. Instead, you sit down and learn how to do a specific task (solve for x in an equation) and build from there. A lot of younger engineers today learned things like HTML/CSS/JS to customize/exploit Neopets and Myspace. It's not that they were interested in programming, they just wanted a result and figured out how to make it happen.

So to that end, I'd probably start with a project-oriented book, or give them tasks that require programming to solve (e.g. tell me the distribution of words in this Shakespeare play. What are the most common ones?).

Editor wise, VSCode is great, but may be too many bells and whistles. Sublime Text may be a better place to start, since it'll do highlighting, formatting, etc without being overwhelming.

Language wise, Python, JS, and Ruby all have ample beginner resources. Depending on what else they're into, JS is probably the most widely useful (since it's on most web pages and the sandbox is built right into the browser).

Good luck! Let us know how it goes!


I tried getting into programming as a kid, but I never really got to a point where I was having fun, printing stuff into a terminal just isn't really... engaging, and gui stuff looked complicated. One day I bought a kit with electronics which had an arduino in it. And when I decided to try that thing out, I found out you can make stuff happen in the real world with code. So ye, arduino, that is what worked for me.


To diverge a little from most of the answers which are about making games or something useful, I had trouble getting going on ANYTHING with that advice. I think I only started actually coding when I looked at projecteuler.com just because the problems started so contained and achievable. Before that I only tried to read a book and copied the code from that (this was a dead end for me). I realize some people hate this kind of exercise or find it boring and a grind, but for some people it is actually fun and if that's the case they should really take advantage of it getting started.

These days there's plenty of sites like leetcode where you don't have to set up anything at all and they can give you little bite-size problems that will make you learn the basics with a feeling of accomplishment.

Incidentally, if they decide they like these kinds of problems and want to become a professional programmer, spending some time on Leetcode or codeforces (later as it requires a little setup) alone can get them a good job these days. People around here dislike this fact but it is so useful if it turns out your child enjoys these kinds of problems.


I will tag along here - with some details on my experience as well as looking for better answers.

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.


Perhaps looking into some game engine might be a fun thing for a young person? Phaser.io or Love2d or something along those lines.


Yeah, that's a good idea. He's pretty handy with blender and those skills might come in handy here.


I think I'll go against the advice of others here.

I would first start him on some guided C++ projects that illustrate basic syntax, data structures, explain libraries, pointer, how memory works, etc. I wouldn't spend a lot of time here. Some simple but neat console games that also showcase some math coolness (like guess a number between 1-100, then say you can guess it in 7 or fewer guesses).

This is how I learned, and was very helpful in understanding some of the why and how of programming. This gave me a deeper understanding of what was going on when I was introduced to easier languages. It also gave me enough understanding to ask how things worked in the easier languages.

After that brief learning period, then I would put him Python. There are lots of powerful libraries and it's easier to build more advance projects. There is also great support for physical stuff like Pi hats if he wants to so robotics, sensors, etc.


I've watched students change majors because of, or regret taking, C++ tracts in college versus tracts that used Python or Java. I think the potential complexity that C++ offers can scare beginners away from programming, as they might feel overwhelmed even when learning its basics.


Yeah, that's why I said only for a brief period and it has to be guided projects that are simple.


I agree with getting him here. Then again maybe not?

I have developed an addiction to this site. I don't even like the site that much anymore, nor care for the moderator, but it has become a habit. (Don't like too many rules that are arbitrarily enforced. Don't like the upper middleclass echo chamber discussions we have here when we discuss other subjects than computing.

That's not my point though.

I can't imagine someone interested in any aspect of the computer industry not getting valuable information here.


You didn't say anything about the boy's interests. That's what matters most. A lot of young people (and older ones!) find tinkering arduinos to be a lot of fun, either making robot-type devices or making sensors to monitor the environment. Others like games, and would enjoy exploring that area. Still others might be interested in mathematics. And so on. Build on existing interests.

I wonder if there's a typo in your message. If the boy is 18yo, then an interest in programming will have already surfaced. Don't try forcing him to do something that's not of interest to him. You only have him at home for short while now. I'd encourage you to explore what he likes to do. Maybe you'll find a new interest, and the two of you will have a great time before he leaves home.


I think CS50 (edx) and Nand2Tetris (coursera) would be great courses to start with. Also, freeCodeCamp has some great introductory courses to Python (computing, data, ML etc) as well as web dev (js, react, html/css and even a bit of node).


What are they interested in? If they're interested in building games, show them Itch.io and how to download the code of the games they think are cool. Show them Pygame and/or Godot.

JavaScript in the browser allows for quick feedback loops that I think can be rewarding for beginners.

Help them come up with projects that they're interested in and will challenge them a bit, but are also tractable. Beginners won't have the context to be able to scope a project out, or to decide what is realistic and feasible, either. I find that can be a roadblock for people who are just starting out, where they learn the basics but can't figure out what to do with them.


Here are a number of things that can all be done as threads, over time:

Show them how to make backups, and test them. They need to have confidence that they can recover, and can't damage things beyond repair.

Show them how to use apt-get to install and remove things. This is essentially giving them all of the open source software in the world.

Show them how to use keywords with google, especially -searchterm. This will aid them when they want to find things. Teach them about the "magic words" and how to find them... i.e. annotation instead of markup, that kind of thing.

Set them up a git repository and Notepad++. Teach them how to use it, along with GitHub or some equivalent. Just use plain text until they understand how it all works. Walk them through their first pull request and fork. This gives them the tools required to be able to experiment without losing things, and sets some expectations about working with others.

Set them up with Excel or the Open Equivalent. Show them how purely declarative programming works. Then show them how macros work. Everyone should know how declarative programming works.

Show them how double entry book keeping works. How errors in entry are detected and corrected.

Show them your favorite programming language. Explain how you came to value it, it's strengths and weaknesses. Show them, if possible, some of your code.

Show them lisp, forth, basic and prolog, and explain the strengths and weaknesses of each.

Show them how test driven development works. Make sure they know how to write good tests.

Show them how gnu readline works, have them read the manual for it, and bash (this one is a new thing to me, as an old windows user. You would not believe how powerful that thing is)

For the love of all that is good in the world, teach them how to name variables correctly, how to write useful comments, and how to smell code.

Teach them pair programming, the experience of a few hours can help them skip months of grief. It can be quite a bit of fun to show your kids something new. Don't be surprised when they return the favor.


Does this read as true to anyone? This list looks like "gaps to probably fill in before you graduate college", but you would have to have a very particular student to not have them check out in this grocery list of CS-adjacent topics. Like trying to foster an interest in soccer by first measuring out a field, building some goals, and making sure you have the perfect cleats and ball.


I intended it as a list of things to do over years, not in a week.

One of the first things they teach, sometimes, in pro sports, is silly... how to correctly tie your shoes. You'd be amazed at how many people go their entire lives randomly having to redo their laces. At the professional level, a loose shoe can get you injured.


If he plays Minecraft, developing mods for Fabric/Forge or plugins for Spigot can be great fun. With very little code you can add new mechanics and in the case of mods even new blocks and items.


How you start almost doesn’t matter, it’s the stuff that happens after, such as actually take the time to answer questions and do stuff together.

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.


What about this? I've seen it posted on HN before. Seems like a good place to start for a beginner:

https://easylang.online


I'd suggest to build a game on Roblox. It's easily accessible through Roblox Studio, it's well documented, it has a young and welcoming community, and it teaches you a lot about client-server architecture. Plus, it comes with tons of freely available assets, you can invite others to work collaboratively, and you can publish your work and get some feedback from friends and family. I feel like Lua is kind of an exotic programming language but it works well in this environment.


I'd go with Python, Javascript, (and also Godot engine if they have an interest in game development). After that, any other language they'd want to learn should come fairly easily to them. All three have great huge piles of tutorials available free on YouTube, as well as various free and / or cheap resources available from Humble Bundle, Udemy, and other sites (especially if you catch them on sale).


Swift Playgrounds is pretty cool.



Blender (the FOSS 3D modeling, animation & rendering software) has a recently updated UI that is significantly easier to use, the embedded language within is Python, and the number of tutorials covering a vast range of interests is noteworthy. You don't really know what will captivate your kid, and the range of applications and learning opportunities with Blender covers a large range of potential interests.


The thing that did it for me was building a "web browser" in VB6 using a printed book and copying the lines one by one. It was just a wrapper around a webview with a few buttons and text fields to navigate.

I think what I found amazing what that it was relatively easy to rebuild something that I used every day and that was immensely cool/useful.

So maybe help him rebuild a basic instagram / TikTok clone app on a mobile device?


I see a lot of comments about fun resources and useful automation. Those can get you to like programming... But most value I've ever gotten in the field was from algorithmic challenges. From contests. They are generally pretty dry, but it's the same way you learn maths or physics. Solving problems.

I can only remember one in Romanian, but I'm sure google is your friend.


18yo is college/transition age. Are they attending college or continuing with education, or do they need to/are motivated to get a job, and see coding as a means to that end? What to recommend depends entirely on the context.

Agree though- do not under any circumstances introduce/subject them to the toolchain bullshit we have to deal with.


If you still want to use a Lisp, consider using Racket. It comes with Drracket, which is an editor for the language which has a repl embedded in it. It has the standard cut, copy, paste shortcuts (though you can use Emacs key bindings in it) and is simple enough not to be overwhelming (like other more robust editors can be)


https://www.level12.io/blog/advice-to-aspiring-developers/

Includes advice on getting started but also comes from the perspective of getting a development job, not just getting into coding.


What’s he into? I got into programming as a tool to further my other interests. For a lot of people here I think that’s video games. For me, it was setting up websites, then web-scraping projects. I think that’s prolly less important than the tech, but yeah can’t go wrong with python and vscode


Personally I would start with one of these:

https://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.


Interesting. I'm scarred from spending years learning how to sharpen axes and shave yaks. Maybe the kids today don't need to do nearly as much of that anymore.


I like Scratch. I'm not sure about Bubble's idea of teaching code "without a single line of code."

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.


https://w3.cs.jmu.edu/kirkpams/OpenCSF/Books/csf/html/

I wish I had this resource when I started. A great introduction to CS fundamentals


If he is interested in playing video games, I would recommend "Learn to Code FROM ZERO with Godot, the Biggest Free Game Engine"

https://www.youtube.com/watch?v=_G7jbafLdv0


I’m 18 I’d go with game dev It’s fun and will teach you basic concepts with instant feedback

Unity is a decent start, and from there I got more into the fun stuff, OpenGL, assembly Lots of tutorials online.

From there you’ll have the background to quite easily transfer to whatever area is of interest.


Zachtronics games [0]. The epitome of educational programming game developers. Solve puzzles and optimize solutions by learning to think like a computer.

[0] https://www.zachtronics.com/


Python for its expressiveness and "learning" "how" to code.

OCaml for the functional language close to writing math expression and be able to do a lot of other things C or C++ for memory management and close to baremetal.

Basically see different paradigm, their tradeoffs.


Use FLOSS and explain why. Python and Geany are great to start with. Avoid proprietary and/or telemetry filled products like vscode. Most IDEs are too complicated anyway.

I also think Flutter might be interesting, though not sure how suitable for begginers.


I have created a browser-based beginner programming language. It is also well suited for self-study and it is open source.

https://easylang.online/ide/


Xojo is a nice modern IDE that is very close to Visual Basic 6. It runs on Win/Mac/Linux. Something about being able to place buttons, canvas, etc and write code directly into them and hitting play, makes it more engaging.


My son started with Scratch.

https://scratch.mit.edu/

Why Scratch? It has assets available immediately, it's simple to draw and import images, and has a built-in audio editor.


Not that it's the direction you want to go, but https://portacle.github.io/ is a bundle of all the Lispiness you mentioned in one go.


I've been working on https:/boot.dev in my spare time, trying to go full-time on it soon.

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.


VS Code with C#. Why: VS Code is the editor and no matter what comes next in his choices, even random non CS stuff, VS Code will be good. Maybe start with a notebook and not a program in the first days.

Why C#: it is the most versatile platform. You can create apps, web stuff, servers, desktop apps, machine learning, console apps, etc. It is statically typed (which is important for the youth to understand what he is doing), has excellent intellisense and beginner friendliness was a focus in the last year (a one liner is nowadays a valid c# program). .NET as base platform allows also F# for a switch to the purity (do not make me comment on that), can run on Linux/macos (if this is important to you) and most important: is not Python which everyone else is doing. Python is the new boring Java.


He might have a look at NAND2tetris and see if that grabs his interest.

Arduinos are also fun.


I suggest the most imputant thing is to find an itch that the kid might enjoy scratching. It doesnt need to meet any kind of bar for "proper" programming. And since tech is everywhere, there are lots of places to start:

- alexa skills (start with one and modify it)

- game mods eg skyrim (ditto)

its a ton easier to make tiny tweaks to a codebase like this and get instant feedback, even if you are essentially cargo culting at this point.

- mobile app kits. MIT had a kit once, i forget the name. make an app that makes a fart noise or texts a buddy etc. we're not talking material design and deep frameworks here. quick feedback and tinkering.

- scratch games. i know ppl. think its toy but its quick to experiment with and the results are quick.

do not, under any circumstances, let the kid get sucked into the tarpit of webapps. if they are into the web, have them spin up a wordpress site and start tinkering with plugins.

tl;dr - newbies need quick feedback and early successes. tinkering helps.


I teach kids programming in my spare time. I would still recommend Scratch programming to absolute beginners.

It has very low cognitive overhead so you can get going quickly and focus on the concepts.


teach him to tinker existing sites in browser with javascript. Once he is able to see the changes he is making in realtime it will get him hooked, then you just need to point him to the right references here and there and he will become proficient on his own. I have taught or rather i shoud say given a demo to number of kids and i am yet to find a kid who didn't get hooked. It's kind of empowering just to change the background color of any website to your liking :)


Dr Racket is easy to install and makes it easy to get pixels on the screen. After that moving on to common lisp or clojure|script is an easy next step.



If he's interested, he'll figure it out. It's easier than ever in 2022. If he doesn't, he wasnt't that interested.


Programming is about building mental maps.

Take any program, change something, see what it affects, rinse and repeat.

The program needs to do something they are interested in.


Google

Starting from there you can learn almost anything for free.


I'm not a programmer. I tried Python many times, but honestly the best time I had was in an algorithms class that used C.


Machine learning, for sure. Pytorch. Andrew Ng has a new version of his machine learning class on Coursera, now in Python (the de facto lingua franca of ML these days).

A game engine like Unity, or maybe Unreal Engine. People use game engines for almost everything these days: creating synthetic data for training Computer Vision models, AR/VR applications, even high end Disney shows such as “The Mandalorian.” Motivating use cases can spark greater long term engagement.


VS Code and Python is good.

Another is to just let them build a website, so learn some javascript to make games and put them up there.



Emacs? Why?

Pull up the debugger in chrome on random websites and start them on javascript.


This is a great question and I wish there was an obvious answer.


if your child is interested in a particular type of project why not choose the language based on that as a start


How about an Arduino with a kit of parts?


The Coding Train w. Daniel Shiffman


* How to Code: Simple Data and How to Code: Complex Data on edX. Taught by Gregor Kiczales, of Common Lisp and CLOS fame. Uses Racket and graphical programs to teach.

https://www.edx.org/course/how-to-code-simple-data

https://www.edx.org/course/how-to-code-complex-data

* The From Nand to Teris project, The Elements of Computing Systems: Building a Modern Computer from First Principles book, and/or Coursera course. Builds a hardware stack for a CPU and then a software stack (assembler, VM, high-level language).

https://www.nand2tetris.org/

https://www.coursera.org/learn/build-a-computer

https://www.coursera.org/learn/nand2tetris2

https://www.amazon.com/Elements-Computing-Systems-second-Pri...

* The How to Design Programs book. What the edX course above is based upon.

https://htdp.org/

https://www.amazon.com/How-Design-Programs-Introduction-Prog...

* Structure and Interpretation of Computer Programs (SICP). Uses Scheme. One can use Racket with the `#lang sicp` language.

https://mitpress.mit.edu/sites/default/files/sicp/index.html

https://www.amazon.com/Structure-Interpretation-Computer-Pro...

YouTube playlist of the course by the authors: https://youtube.com/playlist?list=PLE18841CABEA24090

* Thinking as Computation: A First Course. Uses Prolog to solve problems of thinking.

https://www.amazon.com/Thinking-Computation-First-Course-Pre...

https://www.cs.toronto.edu/~hector/PublicTCSlides.pdf

* Turtle Geometry: The Computer as a Medium for Exploring Mathematics (shares an author with SICP). Uses Logo to explore turtle geometry/graphics. Can use any modern Logo implementation.

https://www.amazon.com/Turtle-Geometry-Mathematics-Artificia...

https://direct.mit.edu/books/book/4663/Turtle-GeometryThe-Co...

* Starting Forth. Uses Forth.

https://www.forth.com/starting-forth/

https://www.amazon.com/Starting-Forth-Leo-Brodie-ebook/dp/B0...

* Learning Processing: A Beginner's Guide to Programming Images, Animation, and Interaction and also The Nature of Code: Simulating Natural Systems with Processing. Uses Processing and p5.js (the JavaScript version of Processing).

http://learningprocessing.com/

https://natureofcode.com/

https://www.amazon.com/Learning-Processing-Beginners-Program...

https://www.amazon.com/Nature-Code-Simulating-Natural-Proces...

The author's YouTube channel: https://youtube.com/c/TheCodingTrain

https://processing.org/


games games games. best thing for learning.


HandmadeHero


Reddit and ask them to do a TL;DR/ELI5 of programming, I think they could come up with something useful.


Get them a copy of K&R C.


What’s a yute?


Replit.com or some other online compiler, get them to create some variables and add some numbers.

Move on to functions, arrays, ifs/fors, and maps.

Teach them the point of JSON and data objects, and then the world is theirs.


so you should go te read about anything in programming also you should ask any question in your mind


why learn programming? also, an 18yo is an adult


Because it's fun. For some, at least. One of several valid answers.


An 18yo might be a legal adult in the US but I certainly was no adult at 18. I strongly suspect I'm not alone in that.


To build a solution to a problem you have


probably not the motivation here




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: