I've recently seen a lot of interest in people who are looking to learn programming.  So I put together a quick guide with lots of help from other people: http://everydayutilitarian.com/essays/learn-code

Let me know (via comments here or email - peter@peterhurford.com) if you try this guide, so I can get feedback on how it goes for you.

Also, feel free to also reach out to me with comments on how to improve the guide – I’m still relatively new to programming myself and have not yet implemented all these steps personally.  I'd cross-post it here, but I want to keep the document up-to-date and it would be much easier to do that in just one place.

New to LessWrong?

New Comment
22 comments, sorted by Click to highlight new comments since: Today at 9:48 AM

Comments from a non programmer who keeps meaning to learn:

  • I like that your first step is 5-10 hours, feels much more realistic than those guides that say you can become a master in ten seconds and makes me trust you.

  • I like that the second step includes explanation of things like github, I keep being linked to it but have no idea how to extract anything useful from the website.

  • I have now worked out that "rails" is short for "ruby on rails" and is a "web application framework" not a programming language.

  • I barely understand the rest, but I like the periodic reminders to reevaluate your priorities. Makes for a nice change from the programming evangelists.

I'll try and work my way through your recommendations and let you know how it goes.

Now that it's been about a month, I'm curious -- were you ever able to start working on the programming guide? No worries if you haven't!

Still slowly working my way through codeacademy, intending to do the rest once I'm done. Will try and keep you updated

How did it go? Please share even if it didn't work out it could be helpful for others.

Never really got anywhere. Its long enough ago that I don't really remember why, but think I generally found it unengaging. Have periodically tried to teach myself programming through different methods since then but none have stuck. This probably speaks to the difficulty of learning new skills when you have limited time/energy resources, and no specific motivation, more than anything else. (Have had similar difficulties with language learning, but got past them due to short term practical benefits, and devoting specific time to the task). 

How's it going?

I'll try and work my way through your recommendations and let you know how it goes.

Thanks for the compliments. I look forward to it!

-

I barely understand the rest

Hopefully it will make sense once you get there. Let me know if it doesn't!

-

I have now worked out that "rails" is short for "ruby on rails" and is a "web application framework" not a programming language.

Well, Ruby is the programming language and Rails is the framework.

It might be worth mentioning Bento Box, which is a pretty great resource for wannabe programmers. It links to freely available tutorials for a number of languages/apps/frameworks, and also provides suggestions about learning order. Bento is pretty comprehensive, so I imagine it can be overwhelming for a beginner, but its still a good supplement (or possibly a next step) to a more focused guide like yours.

Added as a next step toward the end. Thanks!

This guide looks decent to me. I've heard that programming bootcamps like AppAcademy, etc. are already doing a lot to increase the number of entry-level Rails developers in the market. I haven't really heard of any non-web-development focused bootcamps, though. So it might not be a bad idea to focus on building skills in mobile development (supposedly iOS is really hot right now), data science, computer security, etc. instead of Rails and JavaScript. For someone taking this route, I would recommend Learn Python the Hard Way to gain a foundation in programming (Ruby tends to be used for web development only; Python is used for all sorts of stuff) and then choose a specialty and focus on it.

Edit: this guide seems to confirm my intuition that most bootcamps are web-focused. Additionally, I would argue that the web application programming model is a fairly inelegant one and might be a relatively bad place to start learning programming conceptually. Here is a salary guide for various computer programming specialties; you can also do searches like this. By the way, I've heard that White Hat Security is a good place to get an entry-level application security job, even if you don't have any programming experience.

The fact that most bootcamps focus on webdev is probably not for any theoretical reason, but just that the practical uses of what you do are very apparent and you will see visible evidence of skills for which there is market demand very quickly and very often.

What would your ideal of a good place to start learning programming conceptually? I think phone app dev tends to be less elegant than webdev. While understanding C and pointers has value, imo, being able to do something useful with it is not within the reach of a bootcamp and learning it just for theory is nice, but only if you can afford to spend essentially several unproductive months on it.

I am probably a bit biased though (I'm planning on doing a coding bootcamp, and prefer ruby syntax to python), and what you've provided does seem like real alternatives for anyone who doesn't want to go the web dev route.

What would your ideal of a good place to start learning programming conceptually?

Solving Project Euler problems, writing command line apps, creating games using Pygame or some JavaScript game development framework (or just a command-line hangman)? Or, even better, some programming project you are interested in for its own sake.

what you've provided does seem like real alternatives for anyone who doesn't want to go the web dev route.

You mean doesn't? Yeah, I agree, my suggestions are not nearly as fleshed out as Peter's. I certainly don't mean to discourage folks like you. I think learning Ruby on Rails is a great idea. I wouldn't suggest that someone who's partway through the path Peter outlined retool for a different set of skills. And once you've mastered one model of programming that will give you a leg up for learning others. It may be that learning Ruby on Rails is currently the best way to master programming just because of the existence of beginner guides like Peter's and coding bootcamps.

If someone is having significant trouble following the route Peter outlined, however, I think I might have something useful to say. If you're using Ruby on Rails to write apps, you'll be using a lot of different technologies (HTML, CSS, HTTP, a database, maybe JavaScript, and Ruby) that interface with each other in weird ways. And Rails is full of magic and shortcuts that make things faster when you know what you're doing but make it harder to form a mental model as a beginner. I think I remember reading that Sinatra was used instead of Rails by at least one of the major coding bootcamps for the majority of the course because it's better for developing a mental model. Rails can be pretty hard for even experienced programmers to master because of all the magic. Point being, if you've having trouble (especially if you're not understanding things as thoroughly as you might like), you could still make a great programmer, and I'd recommend programming some command line games in Ruby, using Sinatra instead of Rails, and mastering technologies one at a time without shortcuts.

Project Euler is a really good tool for getting the hang of a new language, imo. Strongly recommend it to anyone who wants an interesting project that will teach basic skills.

I actually did mean does :) Sinatra is definitely easier to understand than Rails and I agree that if the first code I had worked on with ruby was Rails instead of Sinatra I would have been pretty fucking confused (note that, at least in App Academy's case, the precourse work involves a fair amount of pure ruby). The real benefit of the bootcamps (I hope, anyway) is taking someone from saying, "okay, I can comfortably write a program, but what else do I have to know to do a real job?" and teaching the rest of the production environment and techniques, not just concepts of programming.

I think I agree with your core point, if I'm reading it correctly, that that if you aren't in a huge hurry (and ideally, even if you are), taking the time to really master the basics and understand your toolchain one piece at a time is very valuable.

Zipfian Academy is a bootcamp for data science, but it's the only non web dev bootcamp I know about.

I feel like I can only focus on so much and keep it coherent and useful. The intro is very heavy on there being no one right path, so hopefully that defrays some of this criticism. And most of the textbooks do teach concepts some of the time in addition to direct coding.

However, if you think there is an appropriate place in the guide to insert information on some language or concept, and have a good resource or method handy for learning it, I'd be happy to seriously consider it.

I didn't mean my comment as serious criticism, just a remark. Thanks for all you're doing for the EA movement :)

[-][anonymous]9y20

Bill Gates said something along the lines learn computer science by studying great code, not studying computer science formally. I'm trying to take that advice, starting with making things to improve my productivity (stuff I'll actually use). I might start with this Twilio API tutorial. Can you forsee any problems with this approach?

[This comment is no longer endorsed by its author]Reply

I think it's good advice generally speaking, but it won't work for beginners. Studying great code is a great way to go from intermediate to expert, but if you haven't already gone from beginner to intermediate than you probably won't be able to recognize what is good code or understand why it is good.

I wonder. Immersion works pretty well for beginner language learning. It might be more effective than you think for computer software.

Immersion work well for beginner language learning because natural languages are fine with loose, sloppy, full of errors mishmash. The point is to get going and fix all problems later. I don't think this would work well with programming languages.

This seems pretty similar to the "search for what you want on StackExchange / GitHub and copy/paste" approach to learning to code, which appears to work fairly well.

I suspect it works well for picking up a new language when you already know how to code. I doubt this is a good method for beginners in programming.