Force yourself to learn by doing – BATMAN!

Learn by doing – A skill that looks simple and really hard to master. I have tried several methods of learning by doing during the past 2 years. Of course, I had some success and some failures. But in my current team, I believe I found the best solution so far – this concept is called Batman.

Who is the Batman?

Batman – eh??

At my current team, there is a special role that rotates between the team members every week. In every single week, there is a person who has a responsibility to minimize the interrupts and this person is the Batman.

  • Live issue? Call Batman!
  • L3 support question? Let the Batman answer it!
  • The build server is broken? The Batman will check this!
  • … 
https://www.youtube.com/watch?v=EtoMN_xi-AM

Batman equals support. Support does not equal Learn by doing. What is it know?

Yes, I know – for the first sight, that role seems to be a simple supporter, but please think a bit about it. What is the best motivation to learn something? If you have no other choice. If you are the Batman, there is no question, you will learn. 

Did you want to learn about one of your projects? Maybe you have already put that into some kind of learning list, prioritized and already have scheduled the time to take care of it. But what happens if something brokes and you are the men who have to fix it? Or you are the person who must answer the question? 

In that case, you have no choice. You must learn it. That is the purest possible way to learn by doing. Right here, right now. There is no excuse and no procrastination: you learn it now and you will answer the question or fix the bug.

Okay, it means, I have to do everything?

No, it’s not. Your job is still a teamwork. You can still ask questions to your teammatesBatman can still teach you the necessary steps. But the responsibility is yours. You have no choice – you must learn by doing and you must do it now. There is no tomorrow.

Final thoughts – my first Batman week

I had only about 3 or 4 weeks of effective work with my current team when I went on my summer holiday. After a week, I got the information that I am the Batman!

First reaction

I have been shocked. Just now started on that product. And I know almost nothing. Today, I am the person who will be asked. And I have no idea what to do now.

What I have learned during that week by digging deep

First of all, I have learned where I find the tasks related to the Batman. In one day, I had to learn our input sources (emails, slack channels, boards) from outer teams.

  • I have gained knowledge about our error logging and monitoring.
  • I had to learn a special query language. 
  • I was digging deep into our invitation process. 

Summarize

Learning by doing is an easy concept – You create some kind of learning project and implement it. But finding motivation is the other part of it. If you have good motivation, you can 10x your result. Yes, painful. Of course, it’s hard. But I think that week was my most effective learning week in the past years :D.

Learn by doing Coding Katas

For a long time, I have underrated coding katas. I used to say there is no reason to do the same task day by day just to improve my coding skills. Now, I learn a new technology stack, the Java stack and it has a lot of challenges for me.

After some learning stuff and fails, I have figured out that I spend too much time not by coding but by figuring out the code related infrastructure. Managing maven dependencies are a pain in the ass for me and almost every component has a new challenge because of the huge difference between .Net stack that I get used to and the Java stack that is a brand new to me.

So, after some fails, I have decided to do some coding katas just to learn the basic infrastructure and speed up myself.

FizzBuzz

FizzBuzz is a coding kata that teaches the basics of Test Driven Development. The task is simple. You count from 1 to 100 and for every number, there is the rule:

  • If it can be divided by 3, the output is ‘Fizz’
  • If it can be divided by 5, the output is ‘Buzz’
  • If it can be divided both by 3 and 5, the output is ‘FizzBuzz’
  • In other cases, we give back the input as an output

First day – OMG

The first day was terrible. First of all, I have created an empty Maven project. After that, I had to figure out what is the recommended project structure (that was the moment when I have realized that an empty Maven project does not contain the default project and package structure, I have to create this).

After these, I found the JUnit dependency and I thought that will be great. After some tests, I have figured out that the default JUnit version is 4 that I found and it does not support parameterized tests. After some googling, I met with some kind of plugin (or extension) that allowed me to write parameterized tests but in a very uncomfortable way (I wanted the same experience as I had using NUnit before).

And the problems came one by one. It takes about 5 minutes to implement a solution to the FizzBuzz problem. If I want to do that with a test-driven approach, it took about 20 minutes to me using .Net stack that I am familiar with.

On the first day, solving the FizzBuzz coding kata using Test Driven Development approach, took 58 minutes to me.

First reaction

I wanted to cry. I thought there is no way that such a simple exercise takes an hour for a Senior Software Engineer.

Analyze and improve

After a short walk, my mind calmed down and I could think about that hour. I tried to remember to the biggest gaps in my knowledge and wrote down a list of what I have to read during the night. That was on my list after the first day:

  • Maven project structure. Can I generate the default folder structure?
  • Unit testing. Is there any useful alternative to JUnit 4?
  • IntelliJ: code refactoring shortcuts
  • IntelliJ: run all tests shortcut

Doing the coding kata for a week

There was a long week when I felt pain every single day. I made a wrong Maven dependency structure, I have misconfigured the configuration file and could not run tests, I have tried 3 different unit testing tool and one time I made an unrealistic package structure.

But it took less amount of time to finish the Kata every single day.

Conclusion

After one week, I could finish the Kata under 20 minutes, including exception handling and boundary check.

Now, I can create a new project with necessary dependencies relative quickly and the most important part is that I have gained some confidence in using these tools.