So you go on the internet, and ask people what to do. More likely than not, they'll answer with some variation of "start doing projects" and "learn by doing".
But if you're a fairly new to web development or even programming, it may be difficult to come up with project ideas.
For example, you may be worried if a project idea may be beyond your abilities at this moment, and you might be worried that if it's too difficult you might just give up. Worse, you might give up forever.
When you're new to web development, it's hard to gauge if a project idea is too difficult or not. In fact, even more experienced developers often underestimate the difficulty of some projects.
So what should you do? Wouldn't it be great if there was a way to get better through "learning by doing" but not pick a project that may overwhelm you, potentially turning you away from web development?
The first thing is to examine your goals. Is your goal to finish a project, or to get better at Django and web development?
There is a lot of value in completing a project. You get a sense of achievement, and can tell people "hey, look at this cool thing I built". It's definitely rewarding. If you're able to complete something, you definitely deserve to be applauded.
But ultimately, that's just one project. It may be rewarding, but at some point you want to be able to build more than one type of web application.
Think of a piano player who is only able to play one tune. Sure, they'd be able to impress people when they need to perform, and that's pretty cool. But at some point they will need to move beyond that. In order to learn other tunes and play them well, they will need to get better at playing the piano in general.
People have known this for centuries, which is why many composers wrote didactic pieces – pieces of music meant to make you practice and get better. If you have any experience with the piano, you may have heard of compositions from Hanon and Czerny, and also etudes from many composers like Chopin.
Each Hanon piece, for example, aims to train your hands to play a certain type of movement or phrase. Like arpeggios, or scales, or parallel thirds.
It's helpful to learn how to play arpeggios, for instance, because many compositions have arpeggios.
Nobody would want to be performing a Hanon piece at a concert. They're not very nice to listen to, and they're things you mostly play at home to practice. Once you get better at the areas they're meant to improve, they've served their purpose, and then you can move on to expanding your repertoire.
The equivalent for web development and Django, in my opinion, is to do some things I like to call "microprojects".
They're extremely small projects, rather than a full web application, where the aim is to learn about a specific area, rather than to produce something useful.
So rather than "build a Twitter clone", you can build parts or components of things you see on Twitter or other websites.
Let me give you an example. You may have noticed many websites with "infinite scroll". That means when you scroll down to the end of a feed, or a list, you see that the website automatically fetches new items.
No idea how to do that? Well, that's a great idea for your next project.
Start a new Django project, with one model (e.g. a
Use Django Admin or the shell to create 50 or so tweets. Figure out how to display 5 tweets at first. Then figure out how to make it progressively load more tweets when you scroll to the bottom, or when you click "load more".
Don't worry about authentication, user permissions, any of that other crap. Your goal is to get infinite scroll working. You can worry about that other stuff in other projects.
If you've never built something with infinite scroll before, that may be just challenging enough for you, but with the advantage that it's small and focused, so that you never get overwhelmed.
Now, consider this: once you're able to build this yourself, and understand how it works, you're now capable of doing infinite scroll in any web application. That's extremely valuable. You're now able to play arpeggios in other compositions.
Does it matter if it's not a polished project? Nope, at this point it has served its purpose, and you can just shelve your project away for your own reference without ever having to show anyone.
That also means the bar can be as low as you want. Is your design and CSS shitty? Who cares? You don't have to show anyone. If you just keep it hidden, there is no opportunity for embarrassment.
So here's a few more microproject ideas apart from infinite scroll:
- AJAX forms
- Multi-step forms or wizards
- An "add to cart" feature
- Generating a PDF invoice
- Sending an email in an automated fashion
- Searching for an item based on some keyword or criteria
- An auto-updating news feed
- An application and approval workflow
- Accepting payments via Stripe or Braintree for a single product
- A simple dashboard with relevant statistics (graphs, pivot table, etc.)
- Auto-processing a user-uploaded image
That's just off the top of my head. By the way, these are all components of real projects I've done for money. I'd go out on a limb and predict that you will encounter at least one of the tasks in that list in your career as a software developer.
But if you run out of ideas, you could always look for inspiration in any website or web application you use.
Did you see a cool feature on Twitter, Instagram, or even JIRA? Try replicating it in a microproject!
You don't have to replicate it fully, just try to do the simplest possible approximation of that feature.
Ultimately, everyone's learning style is different. It may be that you actually learn better and are able to keep your motivation better when you're doing a full project.
If that's you, then please don't let this blog post deter you. By all means do a full project.
But if you get stuck, you could always do some explorations with microprojects in the thing you're stuck on. I've found that helpful.
Maybe you've already attempted doing full projects a couple of times but never completed them because you always found the experience overwhelming. I know when I started of as a programmer, that happened a lot, and was the source of a significant amount of personal frustration. Microprojects helped me get better.
Ultimately, doing microprojects is just a tool I've used in the past to learn about new concepts in a safe manner. It's a tool to consider, if you find it useful. If you don't find it useful, by all means do what works better for you.
So to summarise:
- Doing a full blown project can be overwhelming if there are too many unfamiliar components
- Microprojects, or small focused projects aimed to increase your understanding of a certain area (e.g. infinite scroll) can be helpful
- For inspiration, you could always look at other web applications
- Micoprojects are helpful when you get stuck doing full projects too