What can a teenager do to develop their programming skills?
December 30, 2014 6:15 PM   Subscribe

A teenaged acquaintance of mine has just started learning to program and loves it. He's asked about how to develop his skills and build up experience. One suggestion was to volunteer for some IT-related work. Another suggestion was to get involved in the open source community. I'm no longer plugged in enough to take these suggestions to a level of detail that's helpful for him. So: are these good ideas, and if so what specifically (websites, forums etc) should he check out? Secondly, what other ideas would help him?
posted by storybored to Work & Money (10 answers total) 18 users marked this as a favorite
 
Are there any programming opportunities at his school? Such as formal classes, a computer club, online school newspaper, volunteer opportunities to help out with creating/updating sites for sports teams or interest clubs?
posted by drlith at 6:38 PM on December 30, 2014


Best answer: No, I don't think participating in an open source project is a good idea. Don't think volunteering is a good one either.

There is a huge gap between "programming enthusiast" which is where your acquaintance is and "productive programmer" and trying to wedge yourself into the latter too early is likely to be frustrating.

When you start to program, you should feel free to do all kinds of dumb shit that you wouldn't want to do as an open source or professional programmer. Implement your own stuff that is already well solved. Try all kinds of impractical bullshit.

my best advice is to find a problem that you feel needs solving with a computer, and try to solve it. i.e. find something interesting you can't do with pencil and paper and see if you can do it with a computer. Write a game, or write a simulator for Risk to try out strategies, or whatever floats your boat. If it doesn't interest you, you aren't gonna want to do it. Accept that you might fail. If you're over it move on to something else.
posted by RustyBrooks at 7:56 PM on December 30, 2014 [11 favorites]


Best answer: This is not black and white, but usually teenagers who volunteer for "IT work" end up crawling around under people's desks with Ethernet cables. So, unless you know the specific shop, don't encourage him to do that.

I would suggest Euler Project, Project Rosalind, or USACO. All three are places where he can solve small, well-defined problems and get his work checked. They won't teach him a thing about some of the most important bits of programming (design, maintenance, testing, communication, etc.) but most people only learn that on the job anyway. They will teach him to make computers do things, and maybe even to do them efficiently, which is an important prerequisite for real programming.
posted by d. z. wang at 8:20 PM on December 30, 2014 [5 favorites]


The only thing I can think of a complete beginner doing for an established open source project would be something Angela Byron mentioned at a Drupal event once: testing patches. Open source software often has open bug reports, and people submit patches. Then, it's useful for someone to observe the bug, apply the patch, and confirm it resolves the bug without breaking anything else. In addition to participating in the software development process and learning how to build a particular package, the volunteer gets to see a little piece of code and see exactly what it does.

That said, I agree that the best thing for a beginner to do is tinker with things they're truly interested in for their own purposes.
posted by Monsieur Caution at 9:30 PM on December 30, 2014


If his school lacks formal classes, EdX or Coursera or something might be able to fill the gap and allow him to expand his language knowledge, etc. But I agree that specific projects are also going to be important.
posted by deludingmyself at 9:51 PM on December 30, 2014


Separate the topics of "IT" and "Programming", because they tend to be quite different. If programming is the goal, things like Project Euler or building your own weather app (using a public weather API like bing or Wunderground) are fantastic. I always recommend weather because it integrates some web API usage (and JSON wrangling), and if you build your own front end, some HTML / CSS / Java work as well. I taught myself Go by using this approach.

What platform is he working on, Windows, Mac, Linux? Depending on which there are different degrees of difficulty in getting setup to program / choices of language and etc.
posted by zedgoat at 11:46 PM on December 30, 2014 [2 favorites]


I would encourage him to get a Raspberry Pi and start learning on that. He can provide support in the forums, once he develops his knowledge.

I agree largely with what Rustybrooks, d.z.wang and zedgoat are saying. However, I think the IT world is going to get shaken up very soon and there will be opportunities. There are articles starting to appear in the trade magazines about companies now realizing that they need to harness the new technologies but appreciating that their current people (including how they are organized, the procedures in place, methodologies, toolsets, etc.) are probably not the right ones to exploit the new world. Hiring intentions show high interest in cloud and mobile, as well as security. Certainly, a lot of people are very aware that startups are delivering code over a weekend and products in months. Not years. Expectations on IT departments are going to increase rapidly.

I suggest the raspberry pi because it is a low cost, "low downside" (hard to really screw up and easy to recover) way to get into a lot of things.
Your teenage friend should find out if he enjoys configuring Linux, finds networking interesting, enjoys security, really likes programming, enjoys combining the programming with hardware interfacing to make robotic type devices. zedgoat mentioned the distinct areas of IT vs. programming and I totally agree. So first thing is to have your friend get some exposure and see what he really likes. The Pi is almost unique in providing an excellent low cost way of finding out.

On the programming front, I like Python and would suggest your friend pick that up. It is a very handy language to know and allows exploration of most things. There are a lot of libraries that support all sorts of fields.

I think it would be a very good idea for your friend to set up his own web server and learn HTML/CSS/Javascript. Being able to administer and manipulate your own web server (and understand the security implications of allowing access to the big bad world of the internet!) is valuable. I would be inclined to suggest that once he has developed some comfort with those technologies, that he try to "package it" for a mobile device using one of the Phonegap-like pieces of software. (Alternatively, he can learn Java and create his own Android app.) I would encourage him to deploy his website on Amazon or Google. Get the mobile app to interact with code running in the cloud.

Another route to go is for him to explore the robotics angle. The raspberry pi is very good in providing access to the innards of the hardware and there is very good Python support for developing robotic applications. There is also a very rich 3rd party add-on market.

Depending on your friends talent and inclinations, he could learn about how to write a simple operating system (sponsored by a British university...check the raspberrypi site).
An interesting variation would be for him to acquire multiple Pis and in essence build his own "mini" supercomputer. Knowing how to exploit multiple cores will be useful. (Somebody has done this already.)

Another possible route is for your friend to explore the world of data. Use the Pi (and/or other machines or cloud capacity) to install various databases, understand how SQL and non-SQL databases work. This might lead into statistical analysis. Big Data is a very well paid field and recent grads make serious money.

I would suggest your friend checkout and monitor trade sites like infoworld.com and maybe zdnet. Subscribe to some newsletters. Infoworld is a good way to see what management is interested in and what areas are in demand.

I would encourage your friend to explore as many facets as he can and get into the parts that really interest him. If he enrolls in a computer degree program at college, he will have a great background and more importantly, have a good idea of what areas he wants to study. The raspberry pi was invented by a computer professor who found his students did not have the same level of hands-on experience that people who fooled around on the Acorn/TRS-80/IBM PC did. So the Pi is first and foremost an educational tool and a preparatory tool.
posted by PickeringPete at 12:46 PM on December 31, 2014 [1 favorite]


Take PickeringPete's advice and have him explore the whole enchilada of IT. I just want to add one more thing. When I was starting to explore IT and programming, I stumbled upon an online game called SpaceChem. It purports to be about "building chemical reactors in space," but it's really about learning procedural thinking/visual programming skills. It's fun, and your friend will learn about race conditions and if...then commands without learning from a boring programming textbook. When all was said and done, I decided security was more along my interest lines, but I did get up to the last level and felt pretty proud of myself. It wouldn't be hard to make the leap from playing the game to introductory programming.
posted by Beethoven's Sith at 1:12 PM on December 31, 2014


Response by poster: Thanks folks this is very helpful!
posted by storybored at 5:13 PM on December 31, 2014


Just because your acquaintance might be too inexperienced to submit patches/pull request doesn't mean that open source projects should be off the table. Are there any games that he might enjoy that also happen to be open source? Suggest to him to download the code and tweak it to change or extend the game. You can learn a lot just poking through the gameplay code, without having to deal with the whole "make the thing actually run" issue. If there is a good community around the game, I'm sure there are plenty of people who would be willing to help and answer question.

As an example, there are variants of Angband made by people who knew nothing about programming until they started working on the game. They just kept tweaking the game to their liking, asking questions, and learning how to solve general development problems.
posted by bonje at 5:07 PM on January 1, 2015


« Older Help me find this pillow!   |   SF (and beyond): does the 2-hour parking limit... Newer »
This thread is closed to new comments.