Learning programming online
January 29, 2015 11:02 AM   Subscribe

I would like to learn computer programming online, what websites/courses would you suggest?

I have learnt some Java and am OK with it so far, and as I have Ubuntu I have been learning a bit of C but the course I was learning with, after he did pointers and structures, it suddenly got real hard. I am currently giving Ruby a go at CodeAcademy. I can understand the concepts in these languages, they make sense to me, and I can code a bit, I just struggle to think of things to write to expand my knowledge and skills and this concerns me as I think surely if I was any good I would be able to think up things to write. Are there any courses or anything where they give you ideas for programs to write? I am sure there was an FPP a while back with a big list but I can't find it with search. If you can think of any other languages which would be useful to learn other than the ones I mentioned then please feel free to throw them into the mix.

I am doing this as I am sick of working menial jobs as they bore me senseless and I would like to move into IT, but don't really know where to start, or how to get involved. I am in the UK if that makes any difference.

(After I posted the Noice - "Liquid Candy" VCS demo I looked at VCS assembler - I can understand how it works and even write some very simple 6507 assembler, but man, VCS stuff is totally rock hard - there are only 76 clock cycles per scanline, so there isn't much time to do stuff, and even getting a sprite on screen is rock hard - as there are no x and y position registers - x is done with cycle timing and the TIA fine move register, y pos seems to just use the scanline and a compare. Talk about tricky...)
posted by marienbad to Computers & Internet (15 answers total) 69 users marked this as a favorite
Best answer: this concerns me as I think surely if I was any good I would be able to think up things to write

Hahahaha oh god no. I wish this were true, but as a developer with plenty of experience I still find it difficult to come up with ideas on my own.

You might consider Learn Python The Hard Way, although that might not be as project-oriented as you'd like. There's also this giant list of projects to tackle (in any programming language).
posted by asterix at 11:21 AM on January 29, 2015 [6 favorites]

Best answer: here's a huge list of project ideas.

If you're interested in Rails, Rails Tutorial is fantastic.

In general, I prefer codeschool to codeacademy--they have some free videos and exercises but most are behind a (fairly reasonable) paywall.

Stanford put their CS101 class on Coursera for free--I haven't taken it myself but it looks useful.
posted by sea change at 11:22 AM on January 29, 2015 [2 favorites]

I tried a lot of (free) courses online and the one I got furthest in was Invent with Python, which is very project based since the idea is to make games with the lessons and really holds your hand. If games don't interest you, it might not be so great, and it's kind of easy.

I supplemented it by doing practices from the subreddit /r/dailyprogrammer, which has daily challenges that are marked [Easy] or [Hard] and meant to be completed pretty quickly in your language of choice. They aren't big projects, but I think that's one of the nice things about it.
posted by subject_verb_remainder at 11:35 AM on January 29, 2015

Neither of these will teach you programming so much as they will be fun programming problems to attack.

There are mathematical problems at Project Euler. Don't worry they start easy.

The recently popular Elevator Saga is a fun elevator optimization engine in javascript.
posted by cmchap at 12:34 PM on January 29, 2015 [1 favorite]

Are there any courses or anything where they give you ideas for programs to write?

The more things you know how to do, the more things you can think of to do. But there are tons of programming exercises online if you search for programming exercises.
posted by empath at 12:49 PM on January 29, 2015

Programming for Everyone (Python) starts on Coursera this weekend.
posted by caek at 12:56 PM on January 29, 2015 [1 favorite]

Best answer: Depending on how far along you are with Java, you may find this helpful: MOOC: Object-Oriented programming with Java, via the University of Helsinki.

It's a great, free course that replicates a track of the University's CS01 course, with online submission and testing of labs. I have found it very easy to follow and the practical coding challenges are great.

I learnt Python first, largely through Project Euler mentioned above and some hacking with simple ideas I had. The MOOC is way more structured and thorough than that method.

That said, Python is the go-to language for beginners for a good reason - it is really easy to pick up. I know some developers conversant in many languages, and most of them still use Python as a preference, but YMMV. Learn Python the Hard Way is a great way to get started - if you can stomach Zed Shaw's style (not everyone can...)

Another good set of online assessed challenges for both Java and Python can be found at Codingbat, which is all completed in-browser.
posted by man down under at 1:03 PM on January 29, 2015 [2 favorites]

I would discourage you from switching languages as much as you seem to be. It's true that certain languages are better for certain tasks, but you can do pretty much anything in pretty much any language, and the understanding you gain by doing something in a language that might not be perfectly suited for it is very valuable. (It's unlikely that you will always be able to use the best language for a job, and for many interesting jobs, there is no one best language.)
posted by spacewrench at 2:53 PM on January 29, 2015

Ned Batchelder recently posted a list of what he calls kindling projects:
Kindling projects are meant to fill this gap: simple enough that a new learner can take them on, but with possibilities for extension and creativity. Large enough that there isn't one right answer, but designed to be hacked on by a learner simply to flex their muscles.
posted by zamboni at 3:34 PM on January 29, 2015

Best answer: My biggest problem when I was at about your stage was figuring out where to go, because there are so many options. I couldn't decide what to focus on. I started with Javascript, learned some Python through udacity.org, did some codecademy.... Finally I stumbled on The Odin Project. It is a roadmap for learning web development, with a pretty deep dive into Ruby and Ruby on Rails, and a good measure of Javascript, HTML, and CSS thrown in. It is online, completely free, and self paced. They provide lessons on core concepts and then projects for you to do to test yourself and build a portfolio. They also spend a good bit of time teaching you about development tools - github, the command line, etc.

I also worked through Zed Shaw's Learn Ruby the Hard Way. You just have to trust Zed and type every single thing out like he says. If you do, you will learn a lot. I imagine his Python variant is also very good.

Another course that I've really gotten a lot out of is MIT's Intro to Computer Science. The profs do a great job of making the big concepts accessible. Python is the language for this course but I found I learned a lot with my knowledge of Ruby (up to a point, I only ever listened to the lectures).

I've also heard good things about Harvard's CS50 but I couldn't really get into it. I might try it again one day.

Good luck! If you decide to go with the Odin Project, memail me or go over to their google+ page if you want to find folks to work with. It's not the most active community but there are folks there looking for learning partners.
posted by natteringnabob at 4:05 PM on January 29, 2015 [4 favorites]

Response by poster: Thanks for the advice everyone. I used Zed Shaw's c the hard way to learn c, and have written (using the ncurses library) the snake game, space invaders and a linepainter game with a simple level editor. I was thinking of trying to write a roguelike game but can't find anything suitable that teaches the game logic for games like that, so if anyone knows of any, please let me know.

Will give the Java MOOC a go and maybe try a but of Python. I don't personally see a problem with learning multiple languages, its just like learning French and German simultaneously - you don't start using German grammar in your French! (I did French and some German at school and can remember being able to read, write and speak both without any problems like that!)

Not sure about the HTML CSS stuff - I remember the internet in the olden days and now it seems way complicated and would be a lot to take in, but maybe.

Which of the suggestions given would be best in re: getting some work as a programmer?
posted by marienbad at 3:45 AM on January 31, 2015 [1 favorite]

Best answer: I picked the Odin Project because it moves directly towards a job in web development. I assume I'm at a different place than you age and careerwise, and I was looking for something that would take me the least amount of time to switch careers. Web development seemed like the simplest thing to break into for someone like me with no CS degree and not a lot of years to build a deep skillset in programming.

The Odin Project has pretty big sections on ruby and ruby on rails, but there is a lot in there about how the web works, javascript, and applying for web dev jobs.

Here is a question I asked a while back which helped me zero in on web dev as my path. Given your experience and preferences you might want to move into something different, but maybe those answers would be helpful to you.

I have been studying hard and consistently since about March of last year and I don't feel like I'm ready to apply for jobs yet - but I'm getting close. I don't really have any hard experience to be able to offer you advice about getting a job except the basic stuff - share your apps, contribute to open source projects, develop a network of friends already in the industry, etc.

Good luck!
posted by natteringnabob at 9:09 AM on January 31, 2015 [1 favorite]

Learning more languages is fine, but it's not in my (professional) opinion primarily what a programmer does. Most programming languages within a class (e.g., object-oriented, or functional, or procedural, etc.) are pretty similar to one another; if you speak, say, C++, then you can probably squint at some Java and understand most of what's going on. If you have a mastery of a language, then learning similar ones is mostly just memorizing syntax. I primarily work in Java, SQL and HTML/CSS/JS; but I also know shell scripting, C/C++, Python, and probably a number of other bits and bobs I can't think of offhand. I don't spend my time learning new languages just for the sake of it, but if you get pleasure out of it, I'm not trying to stop you so much as suggest that there's more to programming than just putting X marks on a language bingo card.

What I would say is that you should probably try to get a good handle on data structures and algorithms. Understanding these concepts is the first thing that separates competent programmers from hobbyists, and they're the types of questions you'll get asked in job interviews. For example: What are and when should you use a stack, a list, a hash table, or a B-tree? What are insertion sort, bubble sort, quicksort, and mergesort? What's the general form of a breadth-first vs. depth-first tree traversal? What are some common cache eviction strategies and what types of applications favor one or the other? What's recursion and how do you use it (related: dynamic programming)? A lot of the problems of the type found on reddit's /r/dailyprogrammer (mentioned above) are designed as exercises in using these sorts of concepts.

There's a lot of demand for programmers, but there are also a lot of really bad programmers out there (see the FizzBuzz problem, and the reasons for its invention). Web development is probably a good target in terms of something with a sizable market but no highly specialized requirements (e.g, no CS degree). I keep a number of google alerts on craigslist and the like just to keep an eye on what types of job postings are appearing in my area, even though I'm not looking for a job at the moment. You might try doing the same while you're learning, so you'll have an idea of the types of skills people are actually actively looking for. Keep in mind, however, that many job postings read like a wishlist of skills rather than something any actual person just happens to be walking around knowing, and employers typically expect a certain amount of on-the-job autodidacticism.
posted by axiom at 1:48 PM on January 31, 2015 [1 favorite]

Thanks for the advice everyone. I used Zed Shaw's c the hard way to learn c, and have written (using the ncurses library) the snake game, space invaders and a linepainter game with a simple level editor. I was thinking of trying to write a roguelike game but can't find anything suitable that teaches the game logic for games like that, so if anyone knows of any, please let me know.

If you've gotten that far and are interested in a good look at what low-level game programming is like, I can't recommend this video series highly enough. Casey Muratori (a programmer who's been in the game industry a good long while and has worked on things like Braid, The Witness and the extremely commonly used Bink video tools) is writing a game from scratch live on stream. The stream is more about educational value and programming than game design, though he is building a real game that'll have artwork done by a professional and all that when all's said and done.

A preorder of the game gets you access to the source code to muck about with on your own. It's not a formal education course or anything, but I've found even just watching the videos to be very entertaining/enlightening. He's taking a very flaws-and-all approach to showing what it's like to actually sit and work on the code for an hour or so a day, even if it means getting stuck on things or not being sure you're making the right architectural decisions.

Episodes are usually an hour or so in length with some Q&A after. He's a couple months in right now, so there's quite a bit to skim/watch to catch up if you're looking for more C stuff with a gaming bent to mess about with.
posted by sparkletone at 11:15 PM on February 4, 2015 [1 favorite]

Take a look at exercism.io.

Basically, it gives you an exercise that you need to write code to pass. Once you've written some code that is passing the test suite you submit it for code review and get feedback on it from other users who have successfully completed the exercise. You're then allowed to start giving feedback on other users' implementations of the same problem, at which point you can spend more time improving/optimizing your code or move on to a new exercise to start writing code around.

It supports loads of languages and the help docs provide links to a lot of the same resources linked in the responses in this thread.

The project is in active development and has come quite a ways over the past few months.

I think it's a really interesting approach to learning to code or learning a new language for several reasons:
• Solves the "what should I actually write to apply this new knowledge?" problem
• Teaches you how to use git and github, both of which are widely-used tools in the open source software and business communities (particularly DevOps shops).
• Teaches a formal code/peer review process, also popular in both OSS and business communities.
• Allows you to see how other programmers solved the same problem in different ways so that you can steal/crib/optimize/improve your own code.
posted by devnall at 9:41 AM on February 5, 2015 [2 favorites]

« Older 1980s young adult fiction featuring a trip to The...   |   What to do with leftover potting soil? Newer »
This thread is closed to new comments.