This is a great progression in the series by Zed...if you lurk r/learnprogramming, or any other place full of aspiring coders, a common complaint/desire is that students will have passed all the Khan/Codecademy courses, but have no idea what to do with the pieces of programming fundamentals that they've acquired. This is not just a problem with self-learners...I've seen a few r/learnprogramming posts by CS grads from 4-year-colleges who say they have literally no idea what an API is or why/how to work with one.<p>And I don't think it's necessarily correlated to the rigor/prestige of the program. I had a discussion with Stanford professor who is building a course that involves hands-on work with real-world data problems...he undertook this initiative after finding that some PhD students, while brilliant in their research and coursework, did not know where to begin with relatively easy data cleaning work. I don't know exactly what the disconnect was, but I'm guessing it wasn't because data cleaning is particularly difficult as a CS problem. But it does require the ability to "see the big picture"...not just how different code modules and components can be designed to talk to each other, but the context and general who-gives-a-shit in regards to a given data/computational problem.<p>So yeah, thinking about small projects to code for is a great way to make things "click". Can't wait to see what examples Zed comes up with.
This is awesome! When I was in school, this has always been my go to way to getting people to get out of their "assignment programming" boxes.<p>One of my favorites was having people build a URL shortener using flask and SQLite. The general requirements were something like:
1. Server a web page in flask with a form.
2. Accept URL as POST from form in flask app.
3. Hash URL.
4. Store hash and URL in database.
5. Return new hash URL (ie, myshortener.com/?hash=12345) as a new page or with ajax.
6. Accept GET requests with hashes.
7. Lookup hashes in database and 301 to URL or 404.<p>Other fun ones were building a Secret Santa web app (accepts sign up separately and emails everyone on a certain day so it's completely self run) and building a simple version of Galaga (in JavaScript using just canvas, setInterval, and keydown/keyup events).
This is wonderful. I've been doing Learn Python the Hard Way and loving it, this is a really cool addition. I recently picked up the book 'Automate the Boring Stuff with Python,' and one of the best things about it is the practical applications really help drive understanding - at least for me.<p>At work I write a lot of PowerShell scripts, and I think the reason I took to it so quickly is because the need was there. It was never ambiguous what I was going to build: I knew what I wanted to make easier, what tool I wanted to use to accomplish that goal, and it set me to learning quite quickly.
This looks like a great idea, and I imagine the execution will be great.<p>Personally, though, I find no excitement in building a log searching tool. Something a bit more magical (I think something involving web scraping or markov chains would be interesting) would probably entice people to move forward much more.<p>Not that this tool wouldn't be useful, just that if I look at the end result, it doesn't give me the want to build it.
Great to see this! Another great projects-based programming tutorial in Python is <a href="http://newcoder.io/" rel="nofollow">http://newcoder.io/</a>
I think this approach to teaching programming should be used more often. A good read for someone looking for something that is already out there is "Cloning Internet Application with Ruby". [I am in no way affiliated with this book]<p>It uses Sinatra & DataMapper to take the developer through some simpler projects (URL Shortener, Microblog, etc...)
It's odd how much novice programmers are asked to work on blank-slate exercise projects, which strike me as inherently advanced work.<p>Building up from "hello world" to something with interesting learning-experience challenges involves a lot of boilerplate work. It's almost guaranteed that you won't learn the core skills surrounding managing and limiting complexity in medium and large projects, or even why these things are valuable.<p>It's not much work to get a build environment up for a real-world program the student might use, then have them do projects to modify it (games are great for this). This can be really rewarding, it exposes the learner to realistic, large-scale code, and it serves to get them a gut feeling for "none of this is magic, it's just a bunch of code".
If Zed can navigate the morass that is python package management in a way that makes newbies grok the major points and understand the value of doing things The Right Way, I'd personally buy him a beer or something.