My biggest “fingers crossed” moment is always getting the heat sink properly clamped into place over the CPU without cracking the die. (Never cracked a die, but I’ve always been wary of it.)
I think people who’ve been working on computers for a while forget just how much of a learning curve there is to it. Just to get started with an Arduino you need the board, the cable, an IDE, a program, and something for the controller to actually control. The first time I tried to use one, I couldn’t get the sketch to upload. It was something in the configuration, but I don’t remember what, and the error messages weren’t very helpful. It’s a lot to go through just to make an LED blink. I think some form of bootstrapping would be really helpful to get started; someone to show the OP’s son how to get things connected and configured, get a simple sketch running, and then turn him loose.
That said, the possibilities are damn near limitless. It’s a growing segment, fairly cheap to get started, and a lot of sources for help and encouragement.
If your 12-year old son is really into it, and you think he can handle a introductory college-level course, consider From NAND to Tetris. It’s a complete online course that takes you through the basic of logic chips, creating boolean-logic circuitry, a hardware simulator, machine language through high-level languages. As the title implies, you end up making a game in the software-based computer system.
I think this might be too much for his age (I teach college-level programming but haven’t used this course - not sure my students could handle it!). But it’s software-based, not plugging components and chips into hardware, so maybe he’s looking for something else. I want to put this out in case others are looking for more options.
The key thing I haven’t seen much talk of is compatibility. You need a motherboard that’s compatible with your CPU, yes, but you also need the rest of your build to work with your motherboard, and your Power Supply Unit to be beefy enough to power the whole machine, and tossing in the latest and greatest GPU and CPU to a motherboard that only has space for 4GB RAM is not a problem that’s likely to occur, but would lead to a pretty lousy, expensive machine. PCPartsPicker is great for this, as others have pointed out. Also, I remember hearing something like that Intel chips work better with NVIDIA GPUs, while AMD chips work better with AMD GPUs, but don’t quote me on that.
From personal experience, I can say that Java and Python are very beginner-friendly, and C and C++ are… not.
I thumbed through a yellow and black building a computer for dummies book once.
I agree. Is there any cheaper clones? A friend of mine made a console emulator entertainment system with a pi, among many other things.
IME this is the hard part. Yes, assembling is like IKEA. But instead of a kit where everything works together, you have to buy all the parts separately, without instructions. Many of the parts don’t play nice with each other, and many of the ones that do are sub-optimal. Everything needs to physically fit and be compatible. And unless you like to waste money, it’s nice to not have anything bottlenecked.
It took two inexperienced adults probably a combined 40 hours or more (spread out over several months) to figure out just what we wanted. $1500 later, actual assembly took an hour.
You might consider HTML and segue into Javascript.
Echoing a lot of what’s been said.
-
If actually putting stuff together is the goal, then go the thrift store route. Get a cheap box, take it apart, put it back together. See if it runs. Swap things between two boxes. Etc.
-
If the goal is to get a fast gaming computer just buy one online. It’s simple to choose the options you want. While it used to be cheaper to build your own, that’s no longer the case.
Those are good options and get you quickly into the “see cool things on the screen” zone. For beginning programmers I think it’s important to get them to a point where they can change the way things look/behave on the screen to keep them interested.
There are languages which are easy to learn like Python, but hard to think of anything to do with them that’s both interesting and easy.
Another option is to have him learn by programming apps for phones. I’ve been teaching my 9 year old to do some programming by having him write some simple apps for the iPhone in Swift which is a Java like language. Following the free tutorials and using the free tools Apple has available he went from 0 to having a simple app on my phone that changes the screen color when you press a button in about an hour. Apple’s cookbook instructions to get up and running were pretty much foolproof. I haven’t done any Android programming but I’m told it’s similarly easy to do with Java.
Before doing app programming we did some programming minecraft with Python, but that was much harder to get set up and working than doing smart phone programming. I’m glad I had decades of experience to draw on while debugging the interface between the development system and the minecraft server. He had fun doing it, but I don’t think he could have got it working himself.
This is good advice. Actually getting Python (or Java, or the like) to do anything can be a chore. With that in mind, here’s a suggestion: start on Unity C#. That is, start learning C# (which is like C++, except not quite as nightmarish, and definitely a useful language) by using the Unity games Engine. It has a few noteworthy advantages: it’s flashy; it’s a direct line to building video games, which kids are bound to love; it has a ton of tutorials and examples online; and you still learn a fair bit about how C# works from working with it.
NewEgg is where I buy motherboards and cases.
A bare bones system includes a case, power supply and sometimes a motherboard.The market is drying up. There used to be a lot more bare bones systems to pick from.
Here’s a inexpensive option for $299.
It appears the CPU and RAM is included. All you need extra is a hard drive, graphics card and DVD drive. You’ll need software. Linux is much cheaper than Windows 10.
https://m.newegg.com/products/9SIA65C5DB7723
Ubuntu is a popular Linux package and free. It’s a good option to test out a home brew pc.
It’s relatively simple to assemble one. The difficulty is in choosing components that are going to work together, and being able to troubleshoot should something go wrong. A YouTube search should get you what you need to put one together. If he’s SERIOUS about it, get him into an A+ Certification course. (Or maybe just an A+ Cert book if you think that’ll work.)
IMHO a bare bones system ALWAYS includes a motherboard. A case and power supply is called a case and power supply. A bare bones system has to have at least case, power supply, motherboard, CPU, heat sink, and maybe RAM. (Many available at many locations as seen at the previously mentioned pricewatch.com. (Starting near 100 bucks.)
ETA the bare-bones systems are usually shipped assembled, but you can request it as raw components at some sites.
Since he likes games, try https://www.codingame.com/
Codecademy.com is another good one.
Both of those are interactive, not lecture-based. For a generation born into a hypermarketed world that demands their attention at every turn, who has the attention span for a lecture or book anymore?
For what it’s worth, gaming is also how I got started as a programmer (making modifications to PC games). Building a computer really only takes watching a YouTube video or two. Learning the components could take a few hours, but they’re not really that complicated. Watch and learn once or twice or just go on a forum and there ya go. If you go to a Microcenter, they’ll help you choose the components and you can pay them to build it for you. Maybe they would let him watch?
For hireability, JavaScript is probably the most important language right now (language of the new Web), followed by Objective-C for iPhones and Java for Android phones and PHP for older, established websites (such as this very one).
The language is not as important as the thought processes and the workflow. Once you learn your first programming language, the second and third are a lot easier to pick up.
I might even offer the opinion of not even bothering with building a computer. The only reason to do so now is to build a cheaper gaming PC. If he’s not a huge PC gamer anyway (mainly doing the PS4), PCs are otherwise just commodities, not really worth building from the ground up. The only savings to be had are at in the high-performance market, which programmers don’t really need.
There’s enough learning to be had as a programmer, enough to last a lifetime, that wasting time on hardware – unless he’s really interested in it – just isn’t worthwhile. It doesn’t pay unless he becomes a very specialized electronics engineer working specifically on hardware. Programming lets him work in pretty much any company out there doing sort of any online or app stuff.
If he really is more interested in hardware, try an Arduino starter kit:
Thanks again everyone, there is a lot here to get going on. I do have a question about the Adruino and Raspberry Pi kits, since I happened to see a bunch of these around. It’s going to sound pretty dumb, but what are they, how do they work, and are they worth buying as something to get him started on? I’m sorry for being so clueless, but, well, I’m clueless when it comes to this.
They are products meant to provide a hobbyist entry into the world of microcontrollers and embedded computers, respectively.
Arduino is a programmable microcontroller with a healthy ecosystem of how-to guides and accessories. Its purpose is to allow newcomers to learn what microcontrollers are (simple computers that power things like toys, drones, power tools, cell phone chargers, smart bulbs, remote controls… basically simple electronic devices). Their advantage over a general-purpose computer is that they are cheaper and simpler to manufacture. Their disadvantage is that they are less powerful and less flexible, usually purpose-built for any given solution whereas a regular computer can be programmed to do just about anything. It’s not a hard-and-fast rule, just a broad categorization. For example, a smartphone is a mixture of a computer and many microcontrollers working together to control the radios, the display, the sensors, the camera, etc. Microcontrollers typically use cables, connectors, and components unique to that industry, with little overlap with the consumer PC market.
Raspberry Pi is actually a normal computer capable of running Linux (another operating system, like Windows or OSX). It’s just a very affordable one, a very small one, and not very powerful. Its primary advantage over a microcontroller like Arduino is that it can run standard PC software written for Linux, giving it more flexibility. For somebody who already knows PCs and PC programming, learning Raspberry Pi is easier than learning microcontroller programming (but not too much more so).
So in terms of complexity and price and power and flexibility, it would go something like:
SnapCircuits –> Lego Mindstorms –> Arduino –> Raspberry Pi –> PC
For learning purposes, I would recommend Arduino because it provides a lower-level learning experience, meaning it goes down further into the nitty gritty of how electronics work. It also comes in starter kits designed to teach, and Make magazine has like a decade of publications with more sample projects. Raspberry Pi is more just a tiny computer, useful too, but maybe not as fun as a learning tool… IMO.
…
To really simplify it, the arduino is a little computer that you connect to your computer with a USB cable. You write software that runs on it using a development environment on your computer then send it over the USB to the arduino to run. It has a library that makes it easy to access the different hardware components on the arduino board like the LEDs, input pins, or whatever.
For instance
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
would turn on an LED connected to pin 13 on the arduino board.
Programming it reminds me a lot of my previous life when I wrote firmware for consumer electronics.