Writing

Software, technology, sysadmin war stories, and more. Feed
Sunday, January 20, 2013

Learn by doing: let's clone a popular site together

Are you the sort of person who's learning C++ but needs to see more examples? Maybe you wish you could have a way to spy on a new project being built from the ground-up. Being able to watch it go from a "greenfield" to an actual working site would explain a lot about how things really work. It's like watching a building go up.

I've been kicking around an idea for a project which would be a combination of literary work, programming, teaching, project management, and maybe a bit of systems administration stuff as well. The concept is simple enough: I pick a well-known web site, isolate a couple of features, and then proceed to write my own implementation, one step at a time.

The trick is that I wouldn't be doing this to have a clone of the site. This effort would exist solely to document the process and create an educational resource. Someone who wanted to learn how to do such a thing would be able to refer to it for inspiration.

Part of this comes from chatting with some of my readers. There are some folks who are just starting out with programming, and they want to get better. They have a language in mind, but trying to learn it by parachuting into a fully-formed code base just is too overwhelming for them. There's just too much going on. It might be more interesting if they could "roll back the clock" to see how a given project got there, but that's no small thing, either.

I'd purposely do this as a series of snapshots. I'd start with a blank directory and would then start fanning out into everything it takes to get something like this going. Iterations would be short with simple goals: add a handler for this, put another check on that. By comparing any two versions it would be possible to see exactly what was done.

Another part of this would be a running commentary from me on the development. My hypothetical client would make a request, so I'd go through the usual motions of figuring out exactly what is needed, mapping that onto the existing code, and figuring out how it should work before jumping into the code. Then there would be the code itself, and whatever tests might apply. I'd also patch the docs to reflect the change and call it done.

This basically amounts to building a big system from scratch but deliberately going A, B, C, D, E instead of just jumping from A to E. Skipping those interim steps comes naturally when you've been doing this sort of thing for a while, but it's no good for training people. The hardest part is realizing that you do this and then forcing yourself to go through all of the motions for someone else's benefit.

My vision for this would be some kind of subscription service, with the iterations split into modules, or chapters, or something like that. Someone could sign up online and start working through from the beginning and go through to the end at their own pace.

There's also the possibility of having this be interactive. I might have a whole bunch of things on the feature list, and would run a poll to see which one should happen next. Maybe one feature is more interesting than others for a given group of people, so we'd spend more time there. The point is that it could be flexible.

Here's where it gets interesting: I need to hear from the people who would sign up for such a thing. What sort of site interests you to the point where you would want to watch a subset of it be cloned from scratch, or fairly close to it? Maybe you want to see what it would take to make something like Twitter, or Instagram, or one of those bookmarking services.

If you're the sort of person who would go for this, I want to hear from you! Send me a message and tell me what you think and what you'd like to recreate from the inside-out.

Also, if you have friends or coworkers who might be interested but don't already follow my posts, please consider sharing this with them. I'd really appreciate it. Thanks!


March 4, 2013: This post has an update.