High level learning plan

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

Learning list

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

  • TDD
  • Design patterns (I like to le-learn them each year)
  • Asp.net Core
  • Rest API
  • AWS-introduction
  • Microservices architecture
  • Docker
  • Aurora DB
  • Cassandra
  • AWS-go deeper
  • Jenkins

Second part: something that I am interested in

  • Linux
  • PHP
  • MySql
  • Javascript
  • Symfony2
  • NodeJs
  • MongoDB
  • Redis

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.

Learning project

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.

Microsoft To-Do
It is hard to find a more simple To-Do app

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.
  • Javascript  Refactor the existing code.
  • 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.

The first step of learning - Ubuntu desktop

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.

My learning list is on my weekly board
My weekly board

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.

SMART goals

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!

Leave a Reply

Your email address will not be published. Required fields are marked *