Gamer teen to coder
December 31, 2013 3:23 PM   Subscribe

A friends teenage (16) son is considering skipping university and instead training themselves to be a programmer, with a particular interest in making games. Assuming he's starting from scratch what would be some good cheap or free resources to get him started? Both in terms of getting the basics and allow him to work on a game-related project that might hold his interest?
posted by Artw to Technology (24 answers total) 17 users marked this as a favorite
I know you're in the UK, and my educational experience is in the US, but I would say to start by taking as many programming-oriented courses as he can fit into what's left of his secondary school schedule.

Pretty much everyone I know who grew up to do anything in programming/computer-ish stuff had already started programming in school computer classes by 16. I'm a liberal arts person, but my high school (in a rural area in the late 90s) required us to take at least one computer science class. I took the least challenging one and ended up picking up some C++ despite literally zero interest in programming.

Again, not sure how much computer literacy is formally taught in the British school system. But if this stuff is available at all, there is no reason not to get on that.
posted by Sara C. at 3:38 PM on December 31, 2013 [1 favorite], codeacademy, and codehs are all great starts.
posted by guster4lovers at 3:38 PM on December 31, 2013

Oh, and Scratch. That's actually where I would focus - it's a fully working language that is visual, easy to pick up, and applicable to other languages.

Do his GCSE results preclude his entry into a university that would help him get some specialised training? I'd still be looking that route, especially with how cheap post-GCSE education in the UK is.
posted by guster4lovers at 3:41 PM on December 31, 2013

For learning programming fundamentals, Visual Studio Express is free and it should be very easy to find "intro to object-oriented programming" tutorials oriented to the C# language (which is quite fun to develop in).

Gaming-specific resources:

The Unity game engine is free and there are scads of tutorials.

If the kid isn't allergic to text-based games, the TADS authoring system is free, easy to pick up, and will make sense to anyone with a basic understanding of OOP.

Game modding can be an excellent way to get experience and even gain exposure. It's old now, but Bioware's Neverwinter Nights had an excellent modding tool built-in, and there might even still be an active modding community. Shadowrun Returns is a more recent game that was designed with mod authors in mind.
posted by trunk muffins at 3:42 PM on December 31, 2013

As much as it's beneficial to learn on your own, he's really handicapping himself without a computer science degree.
posted by tylerkaraszewski at 3:44 PM on December 31, 2013 [26 favorites]

I wanted to do almost exactly this. Now I program games all the time. Sometimes professionally.

First I got a bunch of books on game programming that were almost completely worthless. I did self-teach myself a lot of programming, and if I were doing it over as a teen I'd start with a C like language (such as C++) and then get a good book on data structures and algorithms. Because I learned C++ first, other C like languages were easier to figure out later on. Thus, I could go to ActionScript 3, Java, and now C# for programming stuff.

Most of what I learned happened when I was making stuff in my own time, and getting in the habit of always having a project. Game Jams are great for this and the site compohub has an up to date list of them. If your Gamer Teen can get in the habit of making stuff All The Time then they should be okay.

As for resources, 9 times of 10 whatever game engine they decide to use will have a HUUUGE forum and support site, and googling [engine name] + [problem] will have 1 or 4 solutions for it. This is how I learn most of the stuff I need.

Twitter is also a great resource, for networking and community. Zoe Quinn recently put together a list of game developers on twitter whom users can reach out and ask for support.

As for game engines. Game Maker is a great place to start. Unity3D is complex but fantastic once you learn it. Sometimes making your own engine with C++ is a better idea, just for the sake of learning. Game frameworks are better for this. (RIP XNA)

At first they should focus on making Pong. Pong has everything a game should have (Making a window to display the game, stuff on the screen that moves, collisions, score, win/lose state, menus, etc). And after that clone games like Breakout, Mario, Tetris, and maybe others. After they're comfortable throwing stuff around on screen, they can start to make their own stuff, figuring out what works and what doesn't.

It's a very long road, you are not going to make the next Skyrim by yourself. You might make the next Canabalt, though.
posted by hellojed at 3:52 PM on December 31, 2013 [8 favorites]

It is much easier to be a programmer having studied it in college than to be a self-taught programmer with no degree. It's certainly possible to become a programmer without having gone to college; my brother is a pretty well-known Perl guru and never got a degree. But he's the exception rather than the rule.

So, the question I would pose to you and the kid's parents (since he likely is not sufficiently self-aware to answer this) is this: is he intelligent enough and dedicated enough to learn on his own in an unconventional, unstructured environment? Some people are. Many people are not.
posted by dfriedman at 3:59 PM on December 31, 2013 [2 favorites]

Seconding Game Maker as a great tool for getting up to speed on the different elements that make up a game. You can do some surprisingly sophisticated things with it.
posted by SuperSquirrel at 4:24 PM on December 31, 2013

The students at the video game development program that I'm most familiar with first work in small teams to create a side-scroller. I'm not sure what engine they use for it these days, but googling for them turns up lots of options, e.g. Corona (which incidentally uses the same language used in World of Warcraft mods, if that's of interest). Next, they work in larger teams using existing frameworks like Valve's Source Engine, and they create mods that just get further and further away from what the engine provides until they have a new game.

I think a 16-year-old beginner could probably do some level design stuff with that productively to become familiar with the architectural concepts involved in game development. None of this runs counter to the advice to actually study computer science to become a software developer, but I think it's good for him to have 'active learning' questions about what he wants to achieve, based on experience dorking around with things people actually use to build games.
posted by Monsieur Caution at 4:38 PM on December 31, 2013 [1 favorite]

This isn't an either/or, it's a college and learn game coding. The Raspberry Pi has a huge coding community; sure, it's a little slow as a general purpose computer, but sometimes it's good to learn the limitations of a platform.
posted by scruss at 4:55 PM on December 31, 2013 [1 favorite]

I think a lot of this depends on the career track he has in mind. If he wants to make his own iOS and Android games, for example, then I think he can rock on with the self-education as long as he understands stuff like... Notch honed his skills working as a paid game developer for some pretty unsexy places like; Angry Birds was Rovio's like, 27th game and the first 26 were dire failures. Soloing as a game dev requires a vast amount of skills, from graphic design to programming for multiple platforms, and the people who do it are hardly ever successful from a financial standpoint.

If he wants to work for someone else, he needs to understand that this is a very very competitive job market and he will be competing for entry level jobs against people with degrees. (I have hired those people, and they tend to graduate not knowing shit about shinola, but the fact is that a degree is a minimum requirement for most places.)
posted by DarlingBri at 5:11 PM on December 31, 2013 [3 favorites]

Hi, I'm a professional game developer. Please try and talk him out of skipping college. I'm a UK citizen now in the US, which means a) I see how foolish it is to pass up the opportunity for an education at UK prices, and b) I know a lot of programmers, and while there are some who did not go to college, they are in the minority, and honestly kind of a product of a different time. Its exceptionally hard to get into a good dev job without a degree these days - it would require luck on top of talent and a lot of hard work. Finally c) having a degree makes working abroad easier, and its always good to have options.

Aside from the college issue, everyone else is correct that you need to do both to stand a good chance. A computer science degree gives paper qualifications for bureaucracy, but also teaches some good formal organisational strategies. Learning programming yourself will teach you some tricks not taught at uni; shows that you can be self-motivated and work hard, which is a good start for learning to write games. Also, after learning some basics, move onto trying to program some games, and actually finishing them. This is the big lesson, and the hardest part, and the task that separates the wheat from the chaff. As DarlingBri says, the games industry is super-competitive.
posted by Joh at 5:15 PM on December 31, 2013 [8 favorites]

I agree with what folks have said above about trying to persuade this kid not to skip college. If he's going to be applying for programming jobs in the future, it's really going to hurt him not to have a degree. Most places are going to want him to have skills and a college degree as part of their basic job qualifications, and not having the diploma is going to shut a lot of doors. A programming degree is a professional qualification, in a field where well-paying jobs are still relatively easy to come by; the expense of the degree should be seen as an investment, which if made carefully will pay off nicely.

That's not to say that he shouldn't also strive to become a self-taught programmer. Folks up above have posted a lot of great resources that will help him get into it, and if he uses them (and takes as many programming classes in secondary school as he can) then he will not only be set up well for a college program but also will have the valuable skill of being able to learn on his own -- something which is definitely an asset for a programmer, who will doubtless have to do a lot of learning-as-they-go just in the normal course of their job. Additionally, whatever skills he can pick up and projects he can do over the next two years will help him get into the program of his choice later on and will teach him some skills and tricks that he may not learn in college.

Still though, he should really go to college for programming if he wants to be a professional programmer. The days of the self-taught pro are mostly behind us now -- by and large, programming these days is a field where people are expected to have at least a four-year degree as part of their basic job qualifications. An autodidact with a degree will be seen as someone who is clever, passionate, self-motivated, and willing to go the extra mile in pursuit of professional expertise. An autodidact without one will be seen as an unknown quantity and possibly a dilettante, and as someone who is unwilling and/or unable to do the work and follow the bureaucratic procedures necessary to get a degree. You can see how one of those reads much more favorably in a job application, I'm sure.
posted by Scientist at 5:50 PM on December 31, 2013 [1 favorite]

I know a guy who did this -- he makes flash games and has since he was about 16. He taught himself by trying to make games and Google-searching every time he had a question. As a self-employed flash game programmer he made less than half as much money as he would have as a software developer, and ended up going back to school to get a CS degree after about four years of this. When he skipped the CS degree he didn't learn how to use version control, languages not used for games, and how other people structure large programs, and it really limited what he could do.

The success stories likely inspiring your friend's son (Facebook, Google, Microsoft) were started by uber-nerds who spent their free time learning more programming tricks. In my experience, young people who do things like this instead of playing games have parents who encourage learning new things and strongly discourage fun things that aren't good for you (gaming, TV, drugs, etc.). Good luck.

For free programming resources , there are sites like Learn Python that include instructions on the same page as a (simple) development environment. For information about what it's like to write software, two excellent blogs are Joel on Software and Paul Graham.
posted by sninctown at 5:54 PM on December 31, 2013

I am not allowing previous answers to prejudice mine, so I didn't read them. If what I say here has already been said, consider is a verbose "what X said."

Get him him gear. In the US he still has a couple of years before graduation, so get him what he'd need to do what he wants now.

Tell him to make a go of it now. Pick a platform, settle on an idea, and go. Remind him if he finishes college and has loans to repay and needs a job and a place to live it'll be even harder. Now go!

Seriously, let him decide decide what he needs to succeed. Don't impose a workflow on someone this age. Let him pick an IDE and a workflow and a language. Let him come up with an idea for an app that solves a problem. Go!
posted by cjorgensen at 6:07 PM on December 31, 2013 [2 favorites]

I tried reaching myself various languages, even taking night non credit courses in various languages. I barely got anywhere.

Then I took my first Computer Science course. I learned more in that course than all the others combined.

Comp Sci is worth it.
posted by spinifex23 at 6:52 PM on December 31, 2013

If he doesn't realise such things exist, I believe Newcastle has a CS degree with a game specialisation. I assume there are others.

(I think my cousin is doing such a degree at Newcastle, but I last saw him like 10 years ago and don't know if he considered other courses nor what they were, if so. I assume you friend's son can find information more easily than I can get a response to an email to my cousin, but if he's really stuck I'll give it a go.)
posted by hoyland at 7:43 PM on December 31, 2013

r/gamedev - Lots of links on the right side too.
posted by bluecore at 12:33 AM on January 1, 2014

If he wants to be a games programmer and he changes his mind about going to uni, tell him to do CS or Maths - not a games programming course - they're rubbish and most games companies would prefer you to have a solid CS or maths degree.

If he wants to make small indie games, if he has a talent for it, he'll be fine on his own, he wont require the credentials of a degree (or the expense) and it is possible to learn what you need to know by yourself (not everyone can but its not impossible and when I was interviewing for games dev positions, that fact that I entirely self taught was considered one of my greatest assets).

If he wants to get a job a major studio making AAA games, tell him to get a CS degree.
posted by missmagenta at 1:32 AM on January 1, 2014 [3 favorites]

I'm 37 (working in IT for 18 years) and its probably only been in the last 5 years that my IT experience has outweighed my lack of degree at the CV application stage. That's a lot of fighting to prove yourself as a worthy developer. Add in the fact that this kid wants to work in such a 'cool' field (pretty much every young nerd wants to make computer games) and a lack of a degree is going to be a major handicap.
posted by sodium lights the horizon at 4:53 AM on January 1, 2014 [1 favorite]

I've just entered software development (not games) as a third career, and I don't have a CS degree, but if I had realized I wanted to be a software developer when I was 16 instead of 30, I would totally have done a CS degree. I mean, by all means, start designing/coding games now (using any of the many excellent suggestions above), but don't rule out a CS degree. What's his objection to university?
posted by mskyle at 2:49 PM on January 1, 2014

There are many schools of thought on the best approach to learning programming, as you might notice so far. Some say start with an easy language like Scratch, others say start with a nuts-and-bolts language like C. Some say start with object oriented programming from the beginning, others say wait on that for a while. Etc. Unfortunately, I don't know that there's much research on this or evidence for any approach over another. Then it will surely be different for each individual, and there's no way to know in advance which will work best for one person. Like someone above said, you should let him pick how he wants to do it, but it wouldn't hurt to give him a few options to choose from. Those listed above are all good.

One piece of advice to pass along to him: Always have a project. Learning is far easier when you are doing it for a clearly defined goal you actually care about directly. His first project ideas will be too ambitious (I'm fairly well certain of that), so he should either break one down into very basic components and tackle one at a time or he should choose a project that feels too easy at first and scale it up if it turns out to be so.

That said, I'm in the "a degree [program] is better" camp, and I just want to lay out some details and rationale for that view along with a suggestion for how to approach the entire endeavor.

First, there's the credentialing. Lots of jobs won't consider an applicant without a degree. That cuts the chances for success drastically right there. But okay, there are still some that will look at a very strong applicant, and self-employment is an option as well.

As a CS educator, my view is that a CS program doesn't teach you anything you can't learn on your own, but it teaches you a lot of things you most likely won't learn on your own. With just a computer and internet access, one can study and practice pretty much everything in a CS program. The content and tools are all freely available online. However, to adequately use them, a student needs motivation. "I think I would enjoy being a game programmer" is not sufficient motivation. The structure of classes and assignments and grades is.

So without the structure of a degree program, a student needs motivation, and lots of it. Learning CS well is not easy even if one has a natural aptitude for it. One has to struggle with complex, unintuitive concepts that often have no direct relation to the end result that one actually cares about (a working game, say). Without external motivation, a student will need either a keen interest in the material for its own sake or a level of self-discipline that is incredibly rare, especially in teenagers.

Then there's the question of aptitude. There are many students who struggle even within the structure of a formal degree program. In my experience with teaching introductory programming to a general audience, a select few seem to take to programming naturally, a minority do well given enough prodding and practice, and most just manage to get by.

Now, the good news is that it's not too hard to figure out whether he might have everything he needs for self-learning to work well. When he starts down some path, he'll know whether he has enough motivation and discipline to stick with it. If he regularly puts in several hours a day on it*, he's good there. The question of aptitude is a tougher one. He may be highly motivated but not really getting very far. Combining that a bit with measuring the motivation aspect, a reasonable benchmark might be something like: if he hasn't written a basic but functional game (pong, say) within a month or two, it might be too difficult for him, either intellectually or motivationally. Unfortunately, that's subject to all kinds of caveats, like it depends on the language used, on how much he actually wrote himself vs following instructions, on how much of the graphics routines were pre-written or in a library, etc.

* That should probably be several hours a day actually writing code. While writing code, he can read relevant resources, look up references, and otherwise do the "studying" on an as-needed basis (sometimes called "just in time learning").

Regardless, at least there can be a few clear signs that it's clearly not a productive approach for him, and I'd urge him not to continue unless there are clear signs that he does have both the motivation and aptitude for it. So trying it out as soon as possible and going into a degree program if it isn't a strongly positive experience is a reasonable way to go.

Finally, if he does stick with it for more than about six months, he would be wise to structure his learning in part around at least the core classes of an existing CS degree program. There is a lot he can miss if he only works on things that are of immediate interest. You can easily find degree requirements, course syllabi, and often even lectures, assignments, and exams for programs at top universities online.

Good luck to him!
posted by whatnotever at 11:16 AM on January 2, 2014 [2 favorites]

Just saw this pop up on Lifehacker: Learn to Code at Harvard for Free (free online course for Intro to Computer Science)
posted by bluecore at 11:44 AM on January 2, 2014

This plan has an extraordinarily low chance of success. I say this as someone who did not go to college. I also say this as someone who spent a good deal of time doing game development in multiple scenarios: as a hobby, for clients, and cofounding a startup.

I've ended up in a pretty good situation but I'm still mopping up some of the havoc it wreaked on my finances and life situation in general. I should also say that I'm not in game development currently. That said I learned a number of things which proved extraordinarily useful and a lot of the interesting aspects of those projects ended up as good résumé points and led eventually to where I am now.

Game development is a risky field. It also has a lot of glamour to it meaning that people with no interest nor aptitude in computer programming otherwise still think they will enjoy it. If anything it touches on many more specific skillsets and requires a higher degree of care and attention than other kinds of software development. Speaking generally you need not just a solid CS understanding but also math, physics, networking, platform-specifics, graphics, UI design, and on and on.

Game studios are notorious for poor planning, low compensation, and wringing every waking moment out of developers. Testers and anyone else get it even worse off. Going it on your own avoids that but can you keep your own motivation up? And if you manage, remember that what is it, 9/10 of small businesses fail?

As far as the education aspect, I think computer programming / software engineering / application development / whatever is one of the few fields where you can have a truly professional career without that bit of boilerplate. But you're going to have to do all the work regardless. I've found whenever I needed to know something for work I was doing I could always learn it but the challenge is I didn't have that broad but shallow knowledge base to start with, so I was always going from first principles. Learning something new to get into a related field not yet working in is even more challenging. Not to mention if you want to excel you're going to have to learn the theory and not just the practical application, and learn how to be relentless yet tasteful about self-promotion besides.

It may be something he just needs to do. Don't hold that against him. But he should know what he's getting into and the challenges involved. I happened to start with a natural aptitude or at least interest — I've been programming since literally before I can remember, almost certainly when my age was still single-digits — and it's shocked me how much hard work I've had to put in and will have to through my career.

Probably a good idea to make sure he's at least talking to schools so he knows what his other options are too.

As far as where to start, my own path was to experiment with different languages and tools (starting with GW-BASIC) and go from there. Structure and Interpretation of Computer Programs is free online. So is Learn Python The Hard Way. To be honest though I've never read either.
posted by vsync at 11:34 AM on January 3, 2014 [1 favorite]

« Older I married an idiot.   |   Target Credit Card Fraud: The gift that keeps on... Newer »
This thread is closed to new comments.