Optimize for learning
Tags: beginners, motivation, codenewbie, career
Published: 2021-03-01 19:30:19

If you are interested in reading this article in Spanish, check out my blog:
[The Developer's Dungeon](https://www.patferraggi.dev/blog/2021/mar/optimizar-para-el-aprendizaje/)

Last week I finished this great book that we started reading at work for our book club, it is called ["The effective engineer"](https://www.amazon.com/Effective-Engineer-Engineering-Disproportionate-Meaningful/dp/0996128107), if you haven't read it then you should definitely consider it. 

The book has tons of good takeaways but one that really resonated with me was the concept of optimizing for learning. The idea of prioritizing learning over all other matters, so let's dive a little into the subject, shall we?

-----

## Introduction

As you may already know if you follow my blog is that I am a big proponent of taking care of your career, the things that you learn, and how you direct your personal development. 

The author of the book goes even to say that you should devote 20% of your time to learning, but **what does optimizing for learning really mean? it means picking, between a set of defined paths, the one that will teach you the most**. Learning is an investment that pays up in the long run but it is something you should always focus on.

Up until reading this book, I considered this idea as both necessary to succeed in the software development industry and as a fun way to spend your free time. 

But there are a few things I didn't consider while following this path, these are: 

 * How many places there are for optimization
 * How your growth can be directed to others

## Optimizing on multiple fronts

There are some pre-established ways of learning, we all know them right? I am talking about going to school, taking courses, reading a book, learning a new programming language, doing an online tutorial.

These ones are the first that come to my mind when I read about always keep learning, but there a few things that caught me of the guard.

### Pick the right job

Throughout my career in software development, I have always focused on picking the next job that would drive my skills to the next level, at first it was unconscious.

After a year and a half at the same job, I would get bored, when that happened a lot of things started bothering me and I would end up changing to a new and exciting role. It took me a few positions to actually realize that the problem was that after that time I would stop learning, my job would become repetitive, solving bugs on the same old systems. 

Now I always pick the next job for what I can learn from the company, the technologies, and especially the team. I want to work in systems that show me something I have never seen before, I want to work with people that are smarter/more experienced than myself. If I am the dumbest in the group, I will be happy, because that means there is a lot of potential for learning.

Don't get me wrong, I am not saying you should pick a job that doesn't pay you enough to live in order to learn something new, but once basic needs are met, knowledge is always a better payment than some extra bucks.


### Don't avoid hard punches

Do you know what is the best way to learn? by failing, by getting critiqued, by someone calling out your mistakes. 

When that happens, you don't quit, you don't complain, you listen. Is there something essential to be learned here? by now you already picked a job with a lot of very knowledgeable people so why don't take advantage of that fact?

I was surprised to the extent where you can take this rule. You have two developers in your team, one doesn't pay much attention when doing code reviews and the other one is deadly on the comment thread, which one do you pick? You pick the stronger opponent of course, once you get punched in the face a  few times you will learn how to avoid that mean left hook.

The same applies to when someone offers you a new piece of code you don't understand or the possibility to take on a project, don't hesitate, jump fearlessly into new code, dive in and try to learn as much as you can.

## Are you a one-person team?

First of all, that is a bad idea, one-person teams mean you don't get questioned on your decisions, and you don't get to see your blind spots. 

So let's assume you already figured that out and you are part of a team that includes multiple developers, a product owner, a QA, and even a designer.

How much progress can you make if you are only interested in yourself?. Usually, when I speak about self-improvement I forget to mention that improvement permeates around you and affects others close to you. Helping others is a great way of generating exponential growth.

Could be pair-programming with another developer, mentoring a new guy joining the team, or as we did at my current job, reading a book as a team and discussing it.

It doesn't have to be work-related, it could be writing stuff in a blog post like I am doing now, I hope it helps others, and at the same time, it helps me solidify my knowledge and clear my head after a long day of work.

Sometimes bringing your A game is not enough if the rest of the team is struggling, be a team player, not a star.

-----

## Conclusion

This was a short one, but I hope I can give you something to think about when you go on focusing on the next learning project or building that next feature, check for places where you haven't checked before, is there something there you could do that would give you an extra boost?

I hope you liked this blog post, if you did please share it and tell me about it in the comments, if you didn't I would also like to hear about it, as I said, it is a great opportunity for learning :smile: