Wednesday, November 14, 2012

Projects to pursue your passion by

I've always been an advocate of the project learning style.  Simply put, learn the basics of the language (syntax, simple code structure) and then find a project.  The project shouldn't be overly ambitious (you'll be overwhelmed)  or easy (you'll be bored).  The trick is to find a non-trivial example that only involves one or two things you don't know yet.  You'll be forced to learn new concepts while exercising the ones you've learned already.

Finding a good project is harder than one may think.  It's easy to imagine massive projects (we'll be the next Facebook!).  Here are some tools to help you find your next project.

The first thing that came to mind (and half the reason for this post) was an article I saw on Hacker News: Learn a Programming Language Faster by Copying Unix.  This is a nice way to learn language basics like file I/O, interfacing with the user, hashes, and HTTP.  The problem is that most of these examples are incredibly basic.  You could find bigger projects as you learn (apt clone anyone?) but there are better options.

My CS professor always recommended games and puzzles as a learning mechanism (and he's right!).  There are two nice things about choosing a game as your project: They're scalable and impressive.  When I say scalable, I don't mean in server size or users but as a project.  Once you've created the business logic, you can implement a GUI, add more rules, or save sessions in a database.  There's a lot of new things you can learn incrementally through the project.  Additionally, games are impressive.  Not so much on a resume.  It's something nice to show off to your friends.  Let's be honest.  At this level, you won't be winning any coding awards.  Your friends, on the other hand, will be more than glad to help you with ideas for expanding and improving your game.  (One important thing is to keep the game simple.  Clone Blackjack but don't try to make the next CoD or Halo.)

Finally, if you're going to learn a web technology, it might be a good idea to build a blog framework.  Blogs start out simple.  All you really need are two pages: one to post the blogs, and one to display them as well as something to store them in the interim   After that, there's a lot of places you can go.  I strongly suggest that you write them from scratch instead of using a plugin/library/what-have-you.
Here's some ideas to get you started

  • Add a template system.  Because what use is a blog if it isn't pretty?
  • Create a comment system.  These can get tricky, especially if you add things like voting and authentication.
  • Pagination.
  • Search.  Bonus points if you do something more than a simple database "LIKE '%$searchterm%'"
  • Unit testing.  Not exactly blog-relevant but a good thing to know nonetheless.

You can follow my own journey in blog creation in node.js form at my GitHub.  If you're not interested in node but still enjoy the blog, follow me on Twitter to get notified when I post (I promise, I'll get a real picture soon)

No comments:

Post a Comment