Give me a roadmap for coding
May 6, 2012 10:21 AM   Subscribe

Suggest to me a roadmap for learning to code. Ideally geared towards Python.

I'd like to go further with learning to code. I studied C++ in high school and taught myself the fundamentals recently of Python. I think I have a good grasp of the basics of the language although I am still picking up on its idioms. I want to go further into learning about comp sci / learning to code.

I was paging through Natural Language Processing with Python yesterday. It's interesting but I struggle to see how I'd actually make use of it, which makes me less inclined to want to absorb it. I also recently was paging through I also was recently flipping through Think Complexity. Again, seems interesting, but went way over my head and again I struggle to think of how I'd actually use that knowledge, which saps my desire to try to learn it.

So I guess this is where I turn things over to you, hive mind. I'm really not a coder but I want to be. I think I understand the basic fundamentals but I don't know how to *do* much else, or really have much of an idea what I *want* to do. I obviously want to learn as much as possible but when the learning is divorced from application it is anathema to me. What would be great is a text that says "here's the cool program we're going to code. you don't know how to do it but we're going to work up to it and in the end it will all make sense." The Udacity modules try to do this but I don't actually care for the didactic method and I find the content to be a little thin.
posted by prunes to Computers & Internet (11 answers total) 55 users marked this as a favorite
If you want to fill in any gaps that you might have in your basic knowledge of Python, consider Learn Python the Hard Way, if you're not already aware of it. The author answers questions for each of his online lessons.
posted by SillyShepherd at 10:31 AM on May 6, 2012 [3 favorites]

When I wanted to pick up Python, I found these resources great for learning:

* Google's Python Class
* MIT's OpenCourseWare videos (you can't act like you're a student and take the quizzes, too)
* Dive Into Python
*'s Python Tutorial
*'s Python Tutorial
posted by jwmollman at 10:36 AM on May 6, 2012 [4 favorites]

Oops, you *can* act like you're a student.
posted by jwmollman at 10:36 AM on May 6, 2012

Response by poster: @SillyShepherd,

I'm more wondering about the roadmap for after a book like that.
posted by prunes at 12:17 PM on May 6, 2012

Have you seen Udacity's classes? I believe they are all taught in Python. CS101 might be too basic for you, but CS212 gets into some of python's more advanced features (list comprehensions, lambda forms, generators, etc.). And it's taught by Peter Norvig!
posted by last_fall at 3:51 PM on May 6, 2012

Okay, I've been looking at this question for half an hour now and I'm stumped. Am I misunderstanding that your question is, "I want to learn to write advanced computer programs, but I have no idea why I'd ever want to write such a program?"

I agree that Think Complexity is a little dense, but the case studies are all interesting and worthwhile to learn how to create in their own right. The author never mentions the work of Hofstadter, et al., q.v. Fluid Concepts and Creative Analogies and the upcoming Surfaces and Essences. An interesting application of the graph model created in Chapter 2 of Think Complexity would be to extend the concepts explored by the Fluid Analogies Research Group. Between that and Natural Language Processing with Python you could perhaps program a computer to learn by reading.

If artificial intelligence research isn't your cup of tea, could you give us something to go on? Computers can be programmed to do myriad wondrous things, but without having any idea what might interest you I'm hard pressed to offer concrete suggestions.

P.S. After further consideration, please allow me the impudence to suggest that perhaps what you need is a better grasp of the fundamentals. If you really want to learn to program a computer, I would start with The Art of Computer Programming by Donald Knuth and A Discipline of Programming by Edsger Dijkstra.
posted by ob1quixote at 4:29 PM on May 6, 2012

The dirty little secret of jobbing programmers is that we're all standing on the shoulders of giants. We spend our days gluing other people's components together; we mostly don't do anything hard. Dijkstra is overkill when you just want to do CRUD operations on a database.

I suggest starting with the question you want to answer, and working backwards from there. Your profile says you're on How about consuming that data and doing something interesting with it? Echonest might help, too.

Have you got a smartphone? There must be something you wish it did.
posted by Leon at 5:34 PM on May 6, 2012 [2 favorites]

Like anything else, practice. While there's plenty that can be learned from books and classes, the single most productive thing you can do is pick a project and see it through to completion. This is how you find yourself stuck on a real-world problem that books never cover but ends up teaching you a lot. For example a book might give you an imaginary scenario in which you write a webserver/http client as an exercise in network communication. It won't, however, tell you what to do when you're http client gets back a 302 from a webserver, and these are the sorts of problems that end up teaching you a lot of practical stuff.
posted by tylerkaraszewski at 6:28 PM on May 6, 2012

Leon: "The dirty little secret of jobbing programmers is that we're all standing on the shoulders of giants. We spend our days gluing other people's components together; we mostly don't do anything hard. Dijkstra is overkill when you just want to do CRUD operations on a database."

This is, of course, true. Even so, as a programmer who makes a living writing database applications built mostly from components written by others, the best thing I ever did for myself was work through TAOCP and Dijkstra.
posted by ob1quixote at 6:38 PM on May 6, 2012

I don't ... really have much of an idea what I *want* to do.

This seems to be your main block to motivation and progress. And that's not something other people can help you with much. Maybe we could suggest things if you told us more about why you want to learn in the first place, what originally sparked your interest, and what is your idea of a "cool program".

Some possibilities for getting inspiration...

- What are you into? What websites or applications are there around in that area? What would you like to be able to do with them if only it was possible? For example, if you're a book lover you might look into Goodreads, and get the idea to build something like Degradation.

- What do you frequently do that would be nice to have automated? What would you like to do more often, but don't because it's too much hassle? What problems do you have that you might be able to solve by writing a program?
posted by philipy at 8:11 AM on May 7, 2012

I think C++ may be more useful, but yes, learn python.

sagemath gives you easy access to powerfull math with python
django gives you a framework to create web pages with python.
posted by yoyo_nyc at 6:56 AM on May 10, 2012

« Older Why do I experience ear pain a few hours after...   |   Comic Filter Newer »
This thread is closed to new comments.