Training like Pros

 

Professional players spend a great part of their careers on training. A top football performer for sure will spend 4-6 hours per week in training. Why, as engineers we dont practice? Yes, perhaps we go to university and get a degree, but what happens after that? Many engineers need to get used to doing POCs(Proof of Concepts) on their own time, or read books or writing down thoughts in the form of blogs, or simply organizing ideas in the form of diagrams and presentations. IMHO this is a big mistake, especially in the critical times we live in where there is a pandemic, recession, war, and things are difficult all around the globe. Over my career in software, I never stop learning. I dare to say that software engineering is not about typing but learning. Learning is the bottleneck; learning is the gap. Learning is a key skill that modern and well-rounded engineers must have. You can do many things, simple things that can start small but, with discipline and repetition, will pay off great dividends over time. 

How to practice every week?

You can start by doing very simple things. Take 2-4 hours per week in 1-2 nights after work and do:

  • Read the official documentation of the big frameworks your use.
  • Make notes and code the man features you never used until now.
  • Read 5-10 pages per week of a book - creating the mindset is more important the speed. 
  • Read Twitter/Reddit/stack-overflow threads to get perspectives from other engineers.
  • Make notes and diagrams of your understanding of concepts, designs, and architectures.
  • Talk about it via blog posts, with your colleagues over lunch, or in slack channels. 

When you are learning something, it's important to put it out - if you just keep it for yourself, the retention will be much smaller and easier to forget. The learning pyramid states that when we teach others, we retain 90% more than if we just read something. 


Often people are shy, or dont want to get exposed. However, it's important to be comfortable with discomfort. Otherwise, how can you be in continuous learning? I will be concerned if I'm being comfortable all the time. What does that mean? I'm learning something? I'm improving? As humans, we seek comfort, but comfort is tricky and, I would say, even dangerous.

Proficiency is also very important. Being able to do things with less effort is also very important. There are some things you can do to improve on this dimension like:

  • Dont use auto-complete for a while - try to remember common syntax and commands.
  • Shift IDEs from time to time. i.e from IntelliJ to VSCode to VIM etc... 
  • Experiment with a new OS from time to time - i.e, if you just use windows - why dont you use Linux for a while? 
  • Coding Dojos can also help a lot with proficiency

Going Deep

I always believed in the idea that learning is best applied by doing a breath vs deep approach. Where 20% of the time would be spent in breath, meaning learning new things you might not be using right now. This is important because it opens your mind to new ideas, new approaches, and new concepts and makes you better in your current language and stack.

Papers are a great form of learning as well. They can open your mind to new techniques and approaches for problems you thought you knew all the ways to fix it. Try to read more papers every year.

Reading code is also very important; the more you read code, the more you understand how things work. Open source is great because it makes source code available for us. You can go to github and read the source code of Spring, Hibernate, React, Netty, or Java, for instance, and for sure, you will learn more about how things are done and will open your mind to new possibilities.

Finally, debugging code is also very important; reading is great, but some things you only will understand as you are debugging the code; the flow becomes clear, and you really learn how things work but also get new perspectives on how to write code more efficiently. 

Learning from Others

The best way to learn from others is to teach them. There are several ways you can do it so. Raving a blog/youtube channel is a great way to start. Also is possible to gather your friends and do online events from time to time in order to share knowledge and get feedback.  Coding dojos are another great tool to learn. Coding katas and algorithms challenges also can help you to learn. Twitter/Reddit and Stack overflow can also be interesting tools for learning. 

Engineers need to practice in order to improve; learning patterns, different techniques, and styles are important to be more well-rounded. There is no effective learning without teaching. The best engineers I know are all great teachers and teach others new things and how to get better.

Cheers,

Diego Pacheco

Popular posts from this blog

Kafka Streams with Java 15

Rust and Java Interoperability

HMAC in Java