in computer science for teens getting started hackety hack interactive fiction lisp programming project euler ruby scheme text adventure games why's poignant guide to ruby
In almost all areas of STEM, there’s a good chance that you’ll need to learn a little coding at some point to crunch your fruit fly data or make your robot go. Even if it’s not totally necessary for your projects, it’s often good to know some programming anyway — it’ll give you an advantage in your lab or office, it’s a great skill that can get you plenty of jobs on its own, and more importantly, it’s fun to learn and do.
Think you might want to learn programming, but don’t know where to start? Here are some great, (mostly) free, and fun resources that will have you coding like a pro in no time:
First, you’ll need to pick a language to learn. There are a LOT of options, and everyone will have a different opinion about what’s best for a beginner. The good news: for the most part, you can totally ignore that! It doesn’t really matter what language you pick first. Just stick with it for a few months until you’re able to write a couple of simple programs that do something interesting; then, when you start to learn a second language, it will be much easier. (Try “translating” some of the programs you wrote in the first language into the second.) Once you’ve learned to do the same things in two different languages, you’ll probably find that it becomes simple to pick up a new language whenever you need it for a job or project.
Here I’ll suggest Ruby and LISP, two of my favorite languages. Ruby was designed to be fun to program, and is a good language for creating little scripts to do things on your computer, or, later, writing complex web applications. LISP (which stands for “List Processing”) is an old-school language with simple syntax that’s a good basis for really digging into the ideas behind programming. It comes in a few different dialects, but don’t worry, the differences are minor!
(For those who aren’t new to programming: what resources helped you when you got started, and what resources did you wish you had? Share in the comments!)
Comments
To join the conversation, just create an account — it's quick, easy, and free and gives you access to all the features on stemming.org.
at 7:34PM 02/23/10 baimeeker said:
I took my first programming course in college. We learned Java. It’s the only mainstream programming language I know to any extent. It’s also somewhat easy to learn. At the time, I wished I had a few more hours in each day and some extra training in bug finding. Whatever language you learn, finding bugs will probably be the longest part of the learning process, and it’s definitely not the fun part. Still, seeing your program do something truly cool makes programming totally worth it!
I once took a programming class that did some machine and assembly language programming, which is fun for really low level programs.
On the other hand, as a mathematician, I very seldom use any of these languages. Instead, I use Matlab, Mathematica, and LaTeX (Lah-TEK or Lay-TEK, not Latex…) which are for more specific uses. I highly recommend learning LaTeX, which is a text formatting language for science and mathematics. Not only is it really easy to learn, but it’s quite useful. Also, since it’s a word processor with some programming commands, it’s a bit easier to start out with, although it will not acquaint you with proper programming practices nearly at all.
at 2:33PM 02/25/10 MorgannaLeFey said:
There really should be an entire class devoted strictly to the processes you can go through to debug things. There are some standard things you can try to help narrow down where the bug can be, but I have found that I often end up doing trial and error until I hit the right thing. Or I ask my husband for ideas where to start, because he’s been doing this for so long, and actually learned the starting procedures for debugging his first trip through college.
at 4:56PM 02/25/10 baimeeker said:
So… now that Barbie is a computer engineer, how long until Matel creates a computer programming computer game for girls? I know it’s been done before (just do a websearch for computer programming games for kids, at least one (SiMPLE) is free), but Matel could popularize it beyond what already exists and make it more accessible for young girls. I hope they do it. I loved computer games growing up, but never learned to make my own. It would have been fun!
at 6:16PM 02/25/10 clara said:
I agree — more help with debugging techniques at the early levels would be great! I remember a lot of times when I would just feel “stuck” — talking to my friends who had more experience usually helped, but if I didn’t have friends who were already programmers, I might have gotten discouraged.
Java was one of the languages we learned in my second CS class, and I didn’t really like it as a language for beginners — there’s too much extra stuff (like everything you have to include when declaring a function) that seems like pointless voodoo when you’re still at the level that you’re learning basic concepts.
at 4:54PM 02/26/10 jennybmurphy said:
Early in my career someone pushed the book ‘Code Complete’ by Steve McConnell in my direction – such a lifesaver! Easy to read and it offers great practical solid coding practices that apply to just about any language. Very helpful when trying to write decent code in the frequently chaotic world of IT projects.
at 12:48PM 04/02/10 jesstess said:
The best way for me to develop fluency in a language is to work through a tutorial and then use the language to implement a moderately-sized project from scratch that I’m excited about. For Python, this meant working through http://docs.python.org/tutorial/ and then writing some data-processing scripts for my chemistry lab work.
My sister, who is 12 and who I’ve tested the programming waters with on a few occasions using Python, is quickly bored by the need to understand basic data structures and flow control before being able to do anything interesting. I’m not sure how to better motivation programming for her – maybe I should be investigating a super-high-level kid-oriented language like Scratch (http://info.scratch.mit.edu/).