You do want to get better. Work on amazing projects. Solve larger problems, even make more money and improve the world!
So you learn new things.
You read books.
You read blogs and watch YouTube videos.
You follow tutorials and online courses.
It all takes a lot of time…
How much time do you spend trying something for yourself, in a real (even if small), project?
I don’t mean trying things following a tutorial. A real project. Solving some kind of problem.
When we spend more time learning and less time developing, we are missing a BIG opportunity.
When you learn something, it gives you a good feeling.
Things make sense.
You feel powerful, making progress. Like you are getting better!
But when you go to apply them, it is another story…
You feel bad. You try and it does not work. You feel stupid, incompetent… Like you are not moving…
When you acquire skills, you make mistakes, it feels wrong. But only when it feels wrong you are actually acquiring skills!
This is the paradox of skills…
Here is the thing…
The only thing that matters is acquiring and improving skills.
Learning for the sake of learning is totally overrated.
The only thing that changes your brain is applying. Is acquiring skills.
Acquiring skills is a biological process…
Pretty much like acquiring muscles in the gym…
It is uncomfortable.
It takes time…
We feel pain…
We feel stupid… Like it is not working.
But… It is the ONLY thing that works.
Learning feels good. Because it makes sense.
Learning is like riding a bike in the park on weekends. It feels good indeed.
But does not improve our muscles. (Ok, ok, it does a little bit, but not enough for you to become strong!)
If you want to be a great developer, you need to build great muscles.
I mean… Great skills!
So… There are 3 things about skills that every developer needs to understand.
One we already said above…
And skills only improve when you DO THINGS.
It is better to do a few things, and have great skills, then to try to learn many things…
The second thing you need to understand about skills:
Science has not discovered the LIMITS of our skills yet!
That means: you can ALWAYS get better. You can always go one level up.
But for that, you need to practice.
And not only practice. You need to practice with the deliberate intent of improving the skill.
Deliberate practice is a practice that forces you a little bit more. Every day.
Deliberate practice is not about learning, it is about doing. Improving a specific skill.
Like, reading code that you don’t quite understand. Every. Day. And then going for something a bit harder tomorrow.
That gets to our third point…
So, to practice correctly, you have to understand what type of skill you are trying to acquire.
The good news is that there are only two types:
And Soft Skills.
I know you’ve heard that hard skills are the technical ones.
And that soft skills are those annoying “people things” like communication and empathy.
That’s very misleading. Deeply so…
And this misconception it is preventing you from becoming a great developer!
Yes, hard skills are “technical” skills.
But NOT on the sense we developers talk about technical!!!!!
We say hard skills are technical because they are about techniques. Not technical as in technology…
Hard skills are PRECISE skills.
Skills that you apply EXACTLY the same way.
Like hitting a chord on a guitar. Or that exact feet movement when flipping your skateboard in the air. Or… The precise movement of your fingers when typing on the keyboard. Or even the precise way you have to write statements in a programming language.
Hard skills you improve by applying a technique (so we call them “technical skills”).
Precisely. The same thing. Over and over. And over again.
Until it gets ingrained in your brain, and you stop thinking about it…
I know what you are thinking right now…
But Bruno… What I do every day, it is not usually precise, nor exact. I can’t just stop thinking about it. It changes all the time!
Yep. Because what you do as a software developer is mostly a Soft Skill…
Soft Skills have nothing to do with communication or empathy. Although dealing with people is generally a soft skill, soft skills are not dealing with people…
We call them Soft Skills because they are malleable. Fuzzy. Different.
Every time we apply them, they change. And adapt.
Soft Skills are “pattern matching” skills. You adjust and apply things differently depending on the situation you are at.
Like presenting at a rock concert. You don’t mindlessly play your guitar, but you connect with your audience. Or skating with friends down the street. You are constantly adjusting your speed and deciding which maneuver to do to overcome the obstacles.
Or… Software Development…
You are constantly changing course, adapting, trying different strategies to solve problems.
Software development is deeply “technical” (and people associate with “hard skills”), but it is not a technique…
Software development is a SOFT skill.
And the only way to learn soft skills?
Put yourself in different situations, that forces you to apply the skill differently.
Maybe you are one of the many developers that used to think software development is a hard skill. That leads to a big problem: trying to improve a soft skill, by applying hard skills methods to it.
We think that if we aimless repeat things many times — we call that practice — we will be better developers.
We only get better if we deliberately force ourselves to improve the right skills.
Anything meaningful that you do is a combination of hard and soft skills.
And you only develop skills by doing the right things for each skill.
And not simply doing, but doing a bit harder than before.
That’s uncomfortable and painful…
So, here is the recipe to be a better developer:
- Shy away from the easy “learning path”. Learning gives you good feelings but is of limited use.
- Focus on doing things. It is uncomfortable, we feel stupid and incompetent, but it also is the only thing that works. Apply “just-in-time” learning. Don’t learn in hopes to do it one day. Do it. And when stuck, learn enough to keep doing. Yes, this is hard! Very uncomfortable…
- Think about which skills are “hard”, precise. They need technique and repetition. Repeat until it is ingrained. Until you do it without thinking. Obvious things are language skills, IDE shortcuts, git commands, keyboard.
- Pay attention to which skills are “soft”, malleable. To improve on them you will need to put yourself in different situations. That’s also uncomfortable. Obvious things are applying technologies to problems, deciding on design patterns, code review.
So the trick is to be uncomfortable?
Yes. But with a purpose. Deliberately.
Uncomfortable is not about pushing a new code experiment to production. It is not going to the rock concert to play a song you never played before. It is not learning a new flip at high speed at a steep hill…
Uncomfortable is not being reckless…
Uncomfortable is about jamming a new song with your friends. It is trying a more daring maneuver at low speed at a parking lot. It is having fun solving a small problem with new technology. Or rewriting a personal tool using the latest Java version.
Uncomfortable is painful and tiring. But is also good. And fun.
It is risky and adventurous!
Uncomfortable is about doing. And I wonder if there is any other profession that we can do so much with so little!
That’s why I love software development!
PS: Do you also love software development and want to be better at it? I’ll host a webinar on Saturday, December 21st. We will discuss issues around your software developer career, skills and being a better dev. Join me, and let’s get your career moving in 2020!
This post was originally published as part of the Java Advent series. If you like it, please spread the word by sharing, tweeting, FB and so on! Want to write for the Java Advent blog? We are looking for contributors to fill all 24 slots and would love to have your contribution! Contact Java Advent Admin to contribute!