When attempting to pick up or improve your skills relating to a technology or concept, it is so easy to be sidelined by distraction. Instead of spending one hour kicking off an Angular app, I find myself distracted setting up tooling and development environment. Rather than taking an hour and getting some test coverage going for my React app, I find myself debating which testing framework I should go with. Instead of simply interfacing with some existing API (GitHub, Twitter, etc...) I find myself getting sidetracked into building my own API alongside whatever client side project I have in mind. In many cases, distraction prevents me from even getting started with what I set out to accomplish, "learning this one single thing".
- What about this new functional/reactive programming thing?
- How about testing? Which form of testing is "best"?
- Which automation tooling should I invest my time into?
- How about build tools?
- CSS libraries?
- ES6/ES7 are they ready for use via transpilers? Which transpiler?
I feel like when it comes to learning and experimenting in the programming world, you need to have a project to use as a baseling for your learning and experimentation. I have found this much easier said than done. More often than not I find myself starting the morning off by telling myself, "I'm going to sit down and invest a solid hour into better learning [INSERT TECHNOLOGY OR CONCEPT HERE]". An hour, sometimes two, later I am still banging my head against my desk trying to decide what to build with said technology/concept. Even worse is that once I settle on a good "demo product/project" idea, I can get absorbed for days or weeks in "product design" trying to decide what it does. And the worst part is once it comes to trying to make whatever I've settled on look pretty. It is usually during this design, styling, etc... phase that my learning/experimentation fizzles out.
Over the years, I've settled on a few ideas that I feel like are good candidates to fill this slot of using as a baseline for learning and experimenting. Some off the top of my head are:
- TODO App (as cliche as they get)
- Time Tracker App
- Personal Finance/Budget App
- GitHub Client
- Personal Recipe App
- and so on and so on...
I think for now, I have settled on the Personal Finance/Budget App for a number of reasons:
- It doesn't require interaction with any 3rd party APIs/services
- It requires some actual logic/calculation
- It lends itself to simple/easy layout and design
- It is a concept that I am familar with
- I have spent an unhealthy amount of time in Excel
- It solves a problem that I actually have
It solves a problem that I actually have
I feel like that last point is the most important when it comes to working on side-projects or learning experiments. Something that you can understand, relate to, and possibly even use.
It is usually during this design, styling, etc... phase that my learning/experimentation fizzles out.
That is the toughest part. I still haven't quite found the solution to this. Although I have some ideas in mind. I plan to follow this up with the first step towards muscling past this phase. I want to lay the groundwork for a baseline project that is relatable and meaningful enough to me that I can stick with it. I need to muscle through this phase and define that baseline project. I must decide the what and why of this product. I want it to be a small enough undertaking that I can port it to several different technologies and implementations in a relatively short amount of time. I want it to be large enough an undertaking that I can feel certain pain points and strengths of said technologies.
If you have any good baseline projects that work for you, let me know! I would love to hear what is working well for others out there. I know this is a common struggle out there.
Image courtesy of andresthor