Ask HN: Resources to encourage teen on becoming computer engineer?

111 points by tomrod ↗ HN
Howdy HN

A teenager I am close with would like to become a computer engineer. Whet resources, books, podcasts, camps, or experiences do you recommend to support this teen's endeavor?

98 comments

[ 3.5 ms ] story [ 150 ms ] thread
Hacker News, Python, and Robotics (arduino / raspberry pi / Sundance / etc)

I've learned so much from the HN community, Python is a good first language, robotics is hands on, fun, and important going forward

My kid started playing with Lightbot[1]. It teaches recursion, loops, conditionals, and is fun. I would recommend LOGO as an elegant functional programming language, if you want something besides the usual ugly python for-loops; Berkeley logo for quick REPL, NetLogo for more advanced concepts as agents for example.

[1] https://www.youtube.com/watch?v=qZFK5yKQLdU&list=PLL6dgai5Nn...

The novel: "Little Brother" by Cory Doctorow.
I've seen people with only very rudimentary programming experience get quite caught up in Elevator Saga [1]. Makes you think about basic programming as well as simple algorithms.

[1] https://play.elevatorsaga.com/

One option is to have them set out to learn enough to actually do the Linux from scratch build.

If that’s a bit much, then ask them what tech they find most interesting. Look for diy projects they could undertake for it. The books and resources they use will depend greatly upon this.

Thankfully there are tons of great resources for doing this in tech!

Edit-another option is to work toward them maintaining their own server for something they like to use. I’d probably keep it local until they’ve got a lot of the tools and knowledge required to actually harden a box.

Programming is so pervasive, I would try to meet them where they are at.

Do they like Minecraft? Help them run and manage their own server. Do they like design? Buy them a domain and then let them build their own website?

Just get them a copy of Code: The Hidden Language of Computer Hardware and Software by Charles Petzold and make them read it end to end without distractions in a week :-)
The single most supportive thing you could do for them is to hook them up with like-minded peers.

If they have friends the same age interested in the same thing, there's no limit for what they can accomplish, with or without the other material.

Not only because peers can help out in finding and recommending "teaching" material, but also because as humans we tend to want to do what our friends do.

I think these peers can be people they interact with only online, and not in person, but that is my own conjecture. The rest is supported by evidence.

(comment deleted)
+100 on this. A social environment that encourages this is a huge motivator. A good FIRST Robotics team is one way that you might get this (not all teams will have great student experiences, but they’re probably your best bet for this type of environment.)
Throughout my childhood and teenhood I always was interested in programming and it wasnt till having met some developers that I asked questions and they helped me to understand a lot more.

I would always read things but documentations hard to relate to when you are building stuff you have no interest in or it just covers the blueprints and no path to the building.

A lot of languages have improved in this regard thankfully but back then it felt a little lost for me.

So I gotta agree. Finding online friends with shared interest is best because if you find the right people they wont make you feel ashamed of what you dont know just glad that they help you through it regardless.

This is what clinched my career path for me. When I was 12 I and three of my friends would code on our TI-82’s and share that with each other. Being able to get positive feedback from people I liked spurred me to spend even more time at it than I would otherwise have. I wrote apps for the TI-83 and TI-89 in high school (helpers for doing synthetic division of polynomials, a valence shell calculator for chemistry, a Mandelbrot generator, some interactive physics apps for solving common physics word problems), which also temporarily turned me from the nerdy kid to the most popular kid in the class, which was another big step toward cementing my future path. I’m not sure I’d be where I am today if not for all that positive feedback from my peers.
Any simple 2D game maker or software library with YouTube tutorials should get a teenager started. As a teenager, I found it cool to program something and then enjoy the fruits of my work by playing my own game. HTML canvas and JavaScript is enough to get started for example.
(comment deleted)
"Ask HN: Something like Khan Academy but full curriculum for grade schoolers?" [through undergrads] https://news.ycombinator.com/item?id=23794001

"Ask HN: How to introduce someone to programming concepts during 12-hour drive?" https://news.ycombinator.com/item?id=15454071

"Ask HN: Any detailed explanation of computer science" https://news.ycombinator.com/item?id=15270458 : topologically-sorted? Information Theory and Constructor Theory are probably at the top:

> A bottom-up (topologically sorted) computer science curriculum (a depth-first traversal of a Thing graph) ontology would be a great teaching resource.

> One could start with e.g. "Outline of Computer Science", add concept dependency edges, and then topologically (and alphabetically or chronologically) sort.

> https://en.wikipedia.org/wiki/Outline_of_computer_science

> There are many potential starting points and traversals toward specialization for such a curriculum graph of schema:Things/skos:Concepts with URIs.

> How to handle classical computation as a "collapsed" subset of quantum computation? Maybe Constructor Theory?

> https://en.wikipedia.org/wiki/Constructor_theory

https://westurner.github.io/hnlog/ ... Ctrl-F "interview", "curriculum"

Is the teenager interested in becoming a computer engineer, first and foremost?
From description of post: "A teenager I am close with would like to become a computer engineer."
Does this teenager play computer games? Some games have modding tools that serve as a great entry point for this endeavor, like Minecraft or Skyrim.

EDIT: If you actually meant hardware engineering, then I can recommend this fun introduction to digital logic: http://nandgame.com/

Assuming that you actually mean computer engineer (as in digital logic and computer hardware) and not software developer, as so many people here are assuming, there are a lot of resources available:

For a gentle overview of how digital logic and CPUs work, Charles Petzold's book "Code: The Hidden Language of Computer Hardware and Software" is solid introduction. Nisan and Schocken's textbook "The Elements of Computing Systems" and the lessons at the NAND2Tetris site (https://www.nand2tetris.org/) are good if they want to get hands on with the subject.

There are a variety of robotics and electronics interfacing kits based off the Arduino and Raspberry Pi available through Adafruit and SparkFun. If they're more interested in the digital logic side, Digilent provides FPGA boards and test instruments intended for use in educational environments that also include tutorials https://store.digilentinc.com/the-zynq-book-tutorials-for-zy....

[EDIT] I've seen some recommendations for the video game Factorio in this thread and, odd as it may sound, it would not be a bad gauge of interest. Digital logic is all about getting the right signals to the right place at the right time and doing the right thing with them and Factorio definitely teaches analogues of that.

[EDIT 2] Another interesting project for them might be to build a computer from chips. Ben Eater has a design, tutorials, and sells kits for building a 6502 computer (Same CPU as the Apple II) on a breadboard: https://eater.net/6502. (Not sure I'd want to try that without a 5V tolerant logic analyzer but they're cheaply available nowadays, e.g. https://www.seeedstudio.com/Logic-Pirate-p-1750.html) Note that I don't vouch for any of these, they're just examples of what's available out there that your friend can investigate if it piques their interest.

> Code: The Hidden Language of Computer Hardware and Software" is solid introduction

Very good book indeed.

Came here to recommend this book. This book is what inspired me to get into STEM.
This is definitely one of the best books I've ever read related to computers. Highly recommend.
Set them up with Scratch and have them make some video games.
I should have added more detail here.

With Scratch you can create animations/video games and get instant feedback. It runs right out of the browser, so there are no setup issues to trip over.

  There are a good set of extensions to do text to voice, music, etc.

  There are hardware interfaces like makeymakey and microbit.  
I was able to re-created my senior robotics project in 2 hours using the cutebot that is driven by the microbit.
>would like to become a computer engineer.

If you deliberately chose the phrase "computer engineer" to ask this question, are you saying the teen is interested in designing computer hardware instead of just software programming?

Just to be on the same page with terminology, Zach Star has short videos comparing "computer engineering" vs "computer science":

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

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

Therefore, if computer engineering is indeed the specialty, there are more detailed class videos such as hardware architecture from CMU:

https://www.youtube.com/watch?v=zLP_X4wyHbY&list=PL5PHm2jkkX...

Princeton has a similar computer architecture curriculum on Coursera: https://www.coursera.org/learn/comparch

Hardware is their interest.
1) the video series on building an computer from scratch is fantastic. It's valuable information no matter where in the tech stack you wind up in (or even if you don't wind up in tech) but also having a deep knowledge of these systems will be of considerable value down the line, because we aren't training kids in hardware as much anymore.

https://www.youtube.com/watch?v=HyznrdDSSGM&list=PLowKtXNTBy...

2) If their interest is a bit higher in the stack (like robotics e.g.), and they don't mind getting in the weeds and asking for help in the community, I would target learning with a raspberry pi system. My preferred target is Nerves; it's a bit more bare-bones, and there aren't drivers for everything, but the community is fantastic (the elixir slack / nerves is the place to be), and it's easy to get to a point where you are dropped into an IDE and you can just code.

Since HW is their interest, you might want to probe a little bit why they specifically chose "Computer Engineering" and not "Eletrical Engineering".

I know this is dating myself, but I faced the same question about 25 years ago and chose computer engineering because I knew that I wanted a blend of HW and SW. Many of my classmates who were more interested in HW chose electrical as their specialty. Comp provided more optionality, and there was a lot of overlap, but EEs got to understand the nuts and bolts of HW and especially choose from a wider array of VLSI chip design electives.

One caveat to that: The EE curriculum is a bit more math heavy. In my university, CompE would take Calc I and Calc II, but EE's needed to take Calc III. EE's also needed to take electromagnetics - very heavy on calculus. Some other engineering courses that tend to have calculus. If you want to get deep into HW, this may be a good thing.

If the student dislikes math somewhat, I would not recommend EE. If they really dislike math, I would not recommend CompE either ;-)

Requirements can vary. The institution I went to did require a differential equations course after Calc III even for CompE students. And, yeah, it was painful.

Either way, I agree with you 100%; if the student doesn't like math, they are almost guaranteed to get weeded out by the calculus courses.

My university required diff eq for both EE and CompE. They did not require Calc III. Diff Eq is necessary if they're going to do anything with circuits. But I agree with you - it varies from institution to institution. My grad school, for example, requires the same math courses for CompE and EE for undergrad.

> Either way, I agree with you 100%; if the student doesn't like math, they are almost guaranteed to get weeded out by the calculus courses.

It's not that binary. I think the difference (in my undergrad) is that CompE's could struggle and manage to pass calculus (or even do well), and rarely need to use it in future courses in their Junior/Senior year. For them it's just a pain they need to get through and be done with it. EE students, though, are more likely going to need to take courses that require them to use the calculus they learned. Electromagnetics, control theory, communications theory, semiconductors, etc. Even the list of electives EE's could take were more calculus heavy compared to the list of electives for CompE's.

Did Calc1-3, E&M, ODEs, PDEs, LinAlg, Real Analysis as CompE.
I got into electronics by building simple radios. There was a Ladybird Book [1] that started with a crystal set then added extra bits to it like a transistor amplifier. It was all built using a DIY breadboard, the components were connected together using screws with countersunk washers fastened into a piece of wood. There was a whole hobby electronics scene with several magazines that provided designs to build as well as local shops or mail-order to get components.

If I were a teenager now then a FPGA development board with plenty of LEDs and ports could be good.

[1] https://en.wikipedia.org/wiki/Ladybird_Books

Arduino boards are a great on ramp to computer hardware and programming. Hides a lot of the really hard stuff, and has tons of examples online for how to make it work.

Ben Eater is a guy who's started selling kits for building an 8 bit computer from discrete chips on a breadboard. A whole kit is $300, which is a bit steep for a teenager, but you can buy it and complete it in pieces as you're able.

I also think the suggestion about connecting them with like minded peers is an excellent one. A local FIRST robotics group or a makerspace would be excellent as far as making those connections goes.

A teen who doesn't know much about a field won't be able to describe things concretely.
Leave them at their grandparents house for a month, with a 286 and an old BASIC book.
This is how I started too!!!

(And take away their phone)

This is how I started! 2 months in a tiny village with no internet. My journey began with a book titled 'The secrets and mysteries of the command line'.
My grandfather was an electronic engineer, he taught me how to etch PCBs.
I’d offer to help fund/mentor on projects and see where that goes
Most programmers I know, myself included, got started by making simple games for fun. If you don't know which language to choose, just start with JavaScript.
(comment deleted)
How to build your own flight simulator in C++

was the book that hooked me on programming when I was young. Plus I needed to learn physics and numerics to make things work, which turned out amazingly helpful in high school.