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
Ubuntu

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.

Summary

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!

SMART goals

If you want to reach something in your life, you have to set goals. And if you do, you better set SMART goals.

It does not matter if you are a developer, a doctor or a secretary. If you do not want to live from day to day, you have to set some goals for yourself. And it is not enough to you just choose your goals, you have to be smart and you have to do it SMART. SMART is a system that helps you to set proper goals for yourself.

SMART

Your goal is smart, if it is:

  • Specific
  • Measurable
  • Achievable
  • Reasonable, Relevant
  • Time bound

Example

The best way to explain is a fitness example. It is new year’s eve. And you want to make a new-year’s resolution. Most of the people say I am a bit fat. I will loose weight. It is a great idea, let us see how it can be transformed into a smart goal:

  • Specific: Actually it is somehow specific already. I know that I am fat and want to loose some weight. I do not want to be fat any more.
  • Measurable: How much kilograms do I want to loose? I have some vision in my head of me being fit and healthy, but I do not know when I would say: ‘It is great, i  have accomplished my goal’.
  • Achievable: Back to the previous point. I do not know if I have achieved that or not because it is not really measurable.
  • Reasonable: I will not lose 20 kilograms in one week. I have to set a goal that possible.
  • Time bound: I have to decide when I want to reach that goal. I need a deadline.

Let’s make the goal SMART. What happens if I say I am a bit fat. I want to lower my weight to 85 kilograms in one year. Now I have a way better goal: I know exactly what I want to achieve, I know how much my weight will be in one year and I know that I am able to do that. It is impossible to loose 10 kilograms in a day or a week. But it’s possible if I give it a year.

Set up additional goals

There is no reason to stop after one SMART goal. If I really want to achieve my previous goal I am sure I need some additional ones:

  • In the next year, I going to fix my eating habits. I start to count my calorie income and I do not allow more than one cheating day every two weeks. I set my daily calorie limit to be able to loose 10 kilograms in one year.
  • In the next year, I start to run. I am going to run 3 times a week and I want to be able to run 5 kilometers by July and 8 kilometers by November.

Conclusion

As you can see, you can plan your life. You can set  yourself goals and I think it is worth to give you some extra time to not only plan your resolutions, but to specify them by defining goals that you are able to reach. If you do it in that way, you greatly increase your chance to obtain your goal. You know where  youe are going and how you will do that.