I think one of the most important skills for a developer is self-education. To get proper results, it is necessary to have a learning plan.
Let me show my learning plan for the next year.
The big picture
First of all, I just collect the topics that I want to learn about. At that time, my learning plan just a simple list of buzzwords separated into two groups: one group for stuff that I need for my current day job and one group that I just interested in.
Sort the learning list
Secondly, I try to sort them. I try to figure out, which item has the most benefits in short time and which item worth to rank higher just because it is a foundation of a later item and makes my life easier.
When I have finished the sorting step, I know what I want to learn and which order I want to learn them, but I have no idea how to do that.
My main goals
First part: learn stuff that I will work within the next year
- Design patterns (I like to le-learn them each year)
- Asp.net Core
- Rest API
- Microservices architecture
- Aurora DB
- AWS-go deeper
Second part: something that I am interested in
Learn by doing
There are a lot of ways to learn new things. For me, I think the best is just learn by doing. Creating such a learning list is not enough: I do not see any benefits of just reading one or two books for each topic – I have to gain some experience, I have to get my hands dirty.
That is the reason why I think I have to code a project. I do not want to waste my time figuring out a new project and thinking about what should do, so I choose the easiest way: just copy something existing.
There are a lot of topics to learn in a single year and also, I have to do my day job. That means I have to choose a simple project with small object structure.
After some thinking, I have decided to copy one of the million of existing To-Do apps on the internet. So I have done my research and found Microsoft To-Do: It is a really simple web application, with only a few functions.
Review my main goals
This is still not the point when I can start to coding. It is important to get measurable goals. It is not enough to get some titles: I have to assign one small goal for each topic.
Actually, as I have already mentioned it at my other blog post about SMART goals, I define exactly what I going to reach. That means my list will contain not just the buzzwords but some achievements too.
My learning plan with actions
- TDD – Create the main object model. Unit tests for everything with NUnit.
- Design patterns (I like to le-learn them each year) – Reread the main design patterns. Refactor my existing code when it can be done better.
- Asp.net Core – Create a web UI for my project. Copy the look of the original site.
- Microservices architecture – Refactor the project. Create microservices.
- Rest API – Refactor my existing project.
- AWS-introduction – Create a free AWS account. Host my project in AWS
- Docker – Use Docker for my solution.
- Aurora DB – Until that point, I have mocked everything. From now, I will use a relational database.
- Cassandra – Let’s do one other database provider. From that point, it is configurable wich database the project has to run on.
- AWS-go deeper – Deep dive to AWS. Let’s see how to scale my app.
- Jenkins – Create a Continuously Delivery flow.
- Linux – Use Linux for the whole process
- PHP – Create a copy of my app. Switch the back-end to use PHP.
- MySql – Third database provider.
- Symfony2 – Refactor the existing code.
- NodeJs – Convert UI for a Single Page Application
- MongoDB – Figure out which part of the application I can use a document store database.
- Redis – Move session for Redis
And one cheat: I found one goal that I able reach by just using it: Linux. I want to get user level knowledge about Linux.
That is the easiest. I just have to use Linux for a whole year as my desktop at home. Even, now, I write this blog post on my desktop at home on Ubuntu linux.
The first dozen of tickets
KanbanFlow is a great tool to track down my tickets. So I just have to do my tickets and dedicate some time to do these stuff. Actually, I have two kids so I think I have to get up early when everybody sleeps and I can dedicate 3 Pomodoro’s for each day. I know, my goals should have deadlines but having two kids is something very new for me: At now, I have no idea if I will be able to keep the 3 Pomodoro‘s or not, so just decided to do as much as possible.
I know, my goals should have deadlines but having two kids is something very new for me: At now, I have no idea if I will be able to keep the 3 Pomodoro’s or not, so just decided to do as much as possible. That is the reason why I have chosen another way: I have one a little more than one year: I give time for September of 2018 and I want to finish my learning project until then.
Final check: make sure that I have SMART goals:
- Specific: Yes, the target project and the requirments are well defined. Just have to copy an existing web site.
- Measurable: Yes.
- Achievable: Yes. The project not too complex so I will able to try out multiple technologies and design methods.
- Reasonable, Relevant: Yes. Half of the plan contains only elements that I have to use during my following year. The other half contains my current interresting list.
- Time bound: Yes. I do not want to spend too much time with creating a detailed timeline for each learning item. But I have a deadline with September 1, 2018.
That was my learning plan. I have decided what to learn and which order. The goals are targeted and the fist steps are defined and also, there is a dedicated daily time to do them. There are a deadline defined so there is no reason to hesitate: let’s start learning and the most important thing: coding!