I asked Zed Shaw, author of Learn Python The Hard Way, which five books to read to master programming. He replied,
"5 books to master programming? There's no such list. To master anything you have to do a hell of a lot of it for years."
- Zed Shaw
At first I was annoyed. But Zed wasn't being flippant, he is telling it like it is.
For me, the only sustainable way to "do a hell of a lot of it for years" is to keep it fun. Our brains arn't wired to labour at thankless tasks for years. We crave novelty and fun. To happily plug at a subject over years, we must learn to work with our biological programming.
Paul Buchheit, the creater of Gmail, puts it best in his essay The Two Paths to Success:
My strategy [for success] can be reduced to two rules: 1) Find a way to make it fun and 2) If that fails, find a way to do something
To add structure to "do a hell lot of it", I work on side projects. Side projects hold a special place in the education of any creative field, including programming. They are crucial because they provide a place to play, experiment and learn from your mistakes.
There are several principles that I revisit over and over again when I work on side projects. If I forget these principles the project stops being fun, which means that I stop working on the side project. Keep these principles in mind while working on your projects.
Learn From Mistakes
We learned fastest as children. You go from 0 words at birth to 10,000 by the time you are 6; that is 5 new words every single day! One key difference between a child and adult is that the adult get mad at themselves for not achieving perfection right away. When a child falls, usually only the adult gets concerned. All kids know that falling (e.g "failing") only stings for a little. They don't tend to beat themselves up over it.
"A specific mistake is an excellent source of insight, because a
mistake gives you something specific to think about. This shifts your
thinking from coming up with a correct solution (hard), to correcting
a specific mistake (easy)"
-Starbird and Burger in The 5 Elements of Effective Thinking
Let yourself make mistakes. One of the great liberations of working on a side project is that you get to be a beginner again. You have no expectations. You get to fail and learn to your heart's content. It's only when you make those mistakes that you viscerally know what not tod do next time around.
According to Bloom's Taxonomy of learning, you only retain 20% of what you read/hear but 90% of what you do. The higher level of engagement and the mistake feedback loop allows you to truly flesh out the problem's nooks for yourself. No description can be detailed enough to explain every single aspect of completing even the simplest of side projects. Only by sitting down and navigating the maze of micro-decisions will you actually learn the real texture of the problem.
Kill the Boring Bits
Working on your side project should be as fun as possible. What annoys you while working on your side project? Build environment sucks? Editor highlighting hurts your eyes? Deploying is a tedious and painful? Automate it!
A specific examples from my own life.
I randomly come up with ideas for my projects during my commute or waiting in line. Usually the idea ends up a reciept or a random post-it with the best of intentions. Due to my lack of organization, these bits of paper just end up disappearing or chewed up by our washing machine. Fed up with the situation, I decided to setup a little daemon that watches my email inbox. When I come up with a new idea, I email it to myself and the daemon transfers it into my organization/todo system automatically every night. Not only did my pain get solved, I learned a lot about the Emacs.
If worst comes to worst, just give up and don't do that bit unless absolutely essential. Anything that feels like pulling teeth will kill your motivation. Do it consistently and you won't want to work on the side project anymore. You must keep it fun.
Go Big or Not
Gmail is a great example of a side project that went huge. That was by choice. My computer is a graveyard of half baked ideas and empty directories, all created in moments of inspiration. It's up to you. You're in full control. If you want to get big, go for it. If you want to keep it small and run it for friends and family, go for it. You are a omnipotent deity. Being in charge gives you confidence in your own judgement.
If you're starting to feel restless or don't want to work on that project anymore, archive it, write a blog post, put it on github or just give a major fist pump and declare victory because you learned what you wanted.
You are the captain of your own ship and the master of your own destiny.
“When you’re working on a side project, you have the time and the choice to invest in learning new things ... You can also be choosier about the feedback you take.
When you do take it, it’s because you truly want to get better at something.”
- Tobias van Schneider
Tutorials, books and lectures are great when you're starting out because they give you a mental framework to hang your hat on. After that, side projects become much much more efficient.
Side Project Rules To Live By
Remember these rules when you're working on your projects.
1) Learn From Mistakes
2) Kill The Boring Bits
3) Go Big Or Not
4) Have Fun!
Because why would you waste your extremely limited and valuable time on anything else?
If you're looking for good side project ideas, just take a look at Python Practice Projects for Python specific projects or Karan's Side Project Ideas for language agnostic ones.
Comment