For 2019, I have decided to learn some stuff that I have never worked with. And learn in a way how I never did before yet: Learn by doing.
I have no plan to read books from start to end or do online courses at all. I just
Main rules of learn by doing – my approach
- Don’t read books from the first page to last
- No online courses
- Use specifications, official documentation where it is possible
- Have a mentor
- Create a full project alone
Stay outside of the box
My main goal is to learn something that I don’t do during my working hours. For about 40hours a week, we work for somebody else. I like coding and like to discover new things. And at my full-time job, I work on long-running enterprise software.
When I am home, I want to work on some smaller projects, with different tech stack and on do things that I have never done before – just stay outside of my comfort zone.
Improve my daily performance
I can also gain benefits for my full-time job. Yes, I will work on different tech stack. But also, I can try out the principles of TDD, Clean code, Domain Driven Design and plenty of other foundation of programming topics in a relatively small, sandbox environment without the distraction of the great old legacy code bases.
Tried to learn with this method before – and failed.
In the last year, I had some similar goal. And I failed with it. I failed because I didn’t allocate time, made bad decisions and did everything wrong with my former mentor. During 2010, I have decided to be a bulldog, restart my last year project and finish it. See more about becoming a finisher here.
Reasons why I failed before – and action plan to avoid this failure again
- Dota 2: That is my DotaBuff profile. Those statistics say I spend about 12 whole days just by playing Dota 2 during the last 12 months. That means 288 hours. 288 hours are 36 days in a full-time job. Or 288 days for a side project if I work only one hour a day on that. If I have spent this time doing a side project, I would have a complete side project by now.
- Handled my mentor in a wrong way: I had a mentor. But I picked up a colleague and we have decided to allocate one hour a week but during hour working time. We got a manager approval, that wasn’t a problem. The priority was the problem. We skipped too many sessions just because of other work-related stuff: important meetings, important releases and so on.
- Choosing learning materials badly: I picked up some books and online courses. And at the end spent more time learning stuff that I don’t need than doing what matters.
- I was fuckin lazy.
- limit my Dota hours to maximum 3 games a week.
- find a mentor outside of the company and mentoring hours outside of working hours.
- spend 1 hour a day 6 times a week by coding the learning project.
Choosing a mentor
Having somebody who has experience in the field that we want to master is a top priority. A person who has several years of experience knows the best practices, caveats, the tools, language and so on. If you have a mentor, he or she can save you plenty of spent on the wrong path.
For me, for a technical project, I expect the following from the mentor:
- helps to choose the right tool: IDE, unit testing frameworks, template engines and so on.
- does regular code reviews and gives feedback
- identifies improvement areas
- having some beers with me 😀
Choosing a project
For a learning project, there is no reason to start a brand-new site that can be the next Facebook. The goal is to learn technologies, not to build a software that can be sold so it sounds reasonable to not to spend time by figuring out domain logic: just pick an existing software that is simple to code alone and clone it.
I have already tried that learn by doing approach and I failed. For this year, I decided to fix that failure, start my goal and finish it. Found an experienced mentor, scheduled my own time and break down my main goal to small steps. And also, created deadlines for each milestone.
At this point, my only task is to sit down every night and code.