Few weeks ago I gave a talk in the annually Geektime developers conference. I’ve decided to write a post about the topic. You can find the slides here and the video of the talk here. In 2018 I’ve gave this talk again in the annually Amsterdam Codemotion developers conference.
Being a developer is a long journey. It begins right after you learn to code and start your first job. This journey has different phases. Junior, senior and expert are part of the those phases that a developer may go through. Today I want to talk about another phase. It is a tricky phase which is really hard to spot.
You probably know those developers who are always full of confidence, they can describe the product that they are building and the problem it solves, they can explain their architecture and they know the advantages of their technology stack. They can talk about their tools, frameworks and infrastructure — they use them every day. They love them.
But they don’t know how they work. They don’t know the internals and how these tools were built, or in which case they should not use them, the disadvantages of these tools. They are absolutely sure that there is nothing better than what they know. Their tools are silver bullets for them and for everybody else.
These developers are “Expert Beginner”. They think that they are experts, however, they are still just beginners.
On the other hand there is another type of developers.
Those that can solve any kind of problem, always know how things works, how frameworks were built and why. They know what is hot and trendy in the industry, why is it considered so good and why our company should not use it.
Those are the kind of developers we want to hire and be part of our company and our teams. Such developers are not expert beginners and they are not necessary real experts. But they are aware of what they know and most importantly, what they don’t know. They are on the path to someday become real experts. To go in this path they cannot rely only on what their job teaches them and “out of the box” just working solutions- They must actively learn.
They are “Active learners”.
To understand that we first need to understand how does one learn new skills?
This is a basic model for skill acquisition. It basically states that in order to become experts we have to come through a long path and different phases. In each phase we get better at what we do. We do it by understanding that there is a bigger picture than what we currently know, and we are willing to keep going in the journey of getting a grasp of that picture and becoming better and better.
I want to focus on the Advanced Beginner phase, because here anyone can break one of two ways: they can move to Competent phase and start to grasp the big picture and their place in it, or they can ‘graduate’ to Expert Beginner phase by assuming that they’ve graduated to Expert. The expert beginner is a very dangerous place, since they think that they have already become experts and therefore they don’t try to improve themselves or realize that there is a bigger picture than they know.
Our world constantly keeps moving and new technologies, frameworks and tools appear every year. The “Cool” thing to do is to spot the hot things and use them as soon as possible.
That, makes becoming a real expert very hard, since everything changes every year. It makes developers to constantly switch technologies without being able to deep dive and gain the proper experience level in that stack.
The second reason is the wrong perception of some developers that the fact they are full stack developers means that they are necessary experts. Disclaimer — there are full stack developers who are definitely experts, I’m not talking about them.
I’m talking about those who have completed a React and Node tutorial, built a todo app and deployed it with a single click to Heroku and therefore considered themselves fullstack developers. They see immediate results without any understanding of the “magic” and how it happens? How will it scale? What disadvantages does that platform have? When should they use it and when they should not?
Another reason is the fact that some developers are stuck in the same ecosystem for a long time. The trivial path is when someone is sitting comfortably in the same team for years, developing the same features, fixing the same bugs, over and over again and basically not learning anything new. The non-so trivial path is when that someone changes his workplace, moves to different companies, but actually remains in the same ecosystem, same position, same responsibilities and same tools. And again, not learning anything new.
“10 years of experience or the same year of experience 10 times”
That someone may have lots of years of experience but actually he was just repeating the same tricks over and over again. I’ve seen many CV’s of such developers with 6 and even 9 years in the industry, but when talking to them you couldn’t feel all that experience, it was like talking to a mature but still a junior developer.
The last thing is the fact that the expert beginners learn only what they are exposed to in their day to day, the technology and the challenges they daily phase make them learn and grow, but it has a limit. There are many more solutions and alternatives out where. Expert beginners are simply not aware of them.
When you try to talk to them, challenge them and ask them questions you’ll usually hear things like:
What you won’t hear is depth. The deep understanding of how things work and why.
This is the core difference between an expert beginner and an active learner. Active learners don’t necessary know everything. They are aware of the bigger picture, they do realize that nothing “just works” and that there are no silver bullets, everything has pros and cons. They use the “it depends answer” and they want to deep dive, learn and understand.
Active learner is not a phase. It is a mindset, a state of mind, so anyone who embraces the fact that he is yet to become a real expert and that there is a bigger picture than what he knows can become an active learner.
Here are the 4 basic tools that can help any active learner to achieve his goals
Reading is the first thing you can do in order to actively start learning. It is also the easiest. The internet is filled with tons of books, blog posts, videos and podcasts about any topic. It is there just waiting for you.
Read about what you know, strengthen your knowledge, dig deeper and truly understand the internals of how something works. Also read about what you don’t know, stop believing in magic and black boxes. Google it and understand how it works and what is it good for, don’t take anything for granted. It is not easy to find time to read during our busy days. I recommend apps like Pocket for saving things you wish to read later, Feedly as an RSS reader for staying updated with the blogs that you’re interested in and Trello for simply having a board with all the terms and subjects you wish to dig deeper about.
In order to really improve we need to experience things we don’t know and places where not everything is ready for us, we need to leave our perfect place, change our environment and sometimes even start over in a completely different place. There is nothing easier than keeping doing what we know over and over again.
Software development is not the framework or the language that you know, software development is about the principles, SOLID, DRY, KISS, automation…These principles are cross platform. Try the unfamiliar, use other tools and frameworks. Not because they are cool, but to understand how they solve the same problems that you are facing with. Step away from the place where everything is ready for you, and everything “just works”.
Try creating magic and black boxes by yourself
In any language, platform or tools— you will always realize that the principles remain the same. Rediscovering it again and again will sharpen your understanding for their importance and it will drive you to apply them to any place where they are missing.
It is not so easy to write about something. You cannot share half-truths and present shallow understanding. Writing about any topic will make you deeply understand it. You’ll be able to tell a story about it, hold an argument and explain why is it so great to others. It is a muscle that you can use not only in writing, but in every situation where you need to present your point of view. You’ll make this muscle better every time you’ll write. This is one of the reasons I’ve decided to open a blog. Writing about different topics forces me to learn more and really understand them before sharing them with the world.
Passively learning on our job has a glass wall. There are other ways to increase our experience. Active learners use after school activities to learn things their job simply cannot provide.
Go to meetups, meet other people who use the same tools or try solving the same problems as you, see how they are doing it and learn from them.
Try contributing to open source, go over some of your favorite open source projects, help them out, solve an issue or add a feature. Contributing to open source will lift your skills higher than even.
And really, just open a laptop and code, whatever you want and whatever you are passionate about.
Every time you’ll develop something that you’ve considered magic or a black box, you will make your skills stronger and your understanding deeper. You’ll learn when you should use it, and when you should not.
However, this is not enough. These are just tools that can lead you towards where you are going. First, you need to know where you are going, you need to know what you want to be, what skills you want to acquire, which skills do you want to improve and why.
If you won’t decide on those things, you might find yourself reading the same articles, going to tons of meetups but eventually doing nothing about it.
We are all busy people, we don’t have time to fool around, therefore we need a plan, to be efficient and focus on what every one of us really needs in order to grow.
You need to have a vision of yourself, a plan, a road map and goals.
In order to truly evolve, grow and improve yourself — You need to treat yourself as a project
Same as you do at work, have a vision, plan ahead your goals, you objectives, and then decide what do you want to read, what do you want to write about and what meetups to attend and which ones to avoid. Pivot along the way and see what methods work for you. You can read more about how I do it here:
https://medium.com/dennis-nerush/the-project-of-your-life-f05833fefd49
And of course, this is not a onetime thing. You need to keep doing it, again and again and again. It’s a long path, but it is worth doing it.
Good luck
I want to thank Shani Raba, Netanel Lev and Omri Fima for helping me create and prepare for the presentation and also in reviewing this post.