The Secret to Learning about Technology Quickly and Continuously
Software development is a creative and innovative field. Although the main concepts last for many decades, the applications of those concepts, as well as technologies and tools, come and go in short periods of time. Because of this, software developers need the right skills and habits to continuously learn and adapt.
There is no better way to start a book on technology careers than by going directly into the number one career problem that you may be facing: how to stay up-to-date with the fast pace and changes of the technology world.
In our many talks and presentations around the world, the question of how to learn all the new things is common angst for technology professionals. It is common to find people that reserve several hours each day for learning, and still feel outdated and unable to catch up. To get out of this predicament, the best solution is to stop focusing on knowledge and start focusing on skills.
We, therefore, bring you this chapter, where we’ll unravel the secrets to learning about technology constantly and quickly. You’ll learn about the following main topics in this chapter:
- Knowledge versus skills
- Finding focus and priorities
- Applying just-in-time learning
- Practicing deliberately to learn a tech
- Implementing important good habits
Let’s dive right in!
Knowledge versus skills
Developers around the world ask us a quite common question: How can we keep up with current, ever-changing technology? Developers spend many hours every week trying to do exactly that: learn about technologies, frameworks, APIs, languages, and tools that pop up all the time, hoping that this will amount to keeping up to date with technology.
The problems with this approach are multiple:
- There are too many things happening at the same time, and it is impossible to know which ones are the most important
- Trying to learn many things at once is confusing and you end up feeling tired and overwhelmed by the number of things that need to be done
- Forcing yourself to spend many hours a day doing something that seems never-ending is a recipe for frustration
But there is one thing that gets the crown for being the most frustrating:
- Learning many things that you will not apply right now is not only superficial but the knowledge will neither last nor will it be useful for long
When you learn a new skill, think about how you will apply that skill. Actively search for a way to incorporate your new skill into your day-to-day coding projects. Using the skills you gain right away will help you to build the muscle memory for the new skill and assimilate it into your library of knowledge.
Have you ever spent hours learning something that you are not using in a project right now, and a few months later, when you need it, you remember next to nothing, and have to refresh it? And does that refreshing feel like almost having to relearn everything? There is a reason for that feeling and it is the difference between knowledge and skills.
An effective way to think about knowledge is that it is a collection of memories that are disconnected from each other. Because they are disconnected, it takes some time for you to remember those things when you need them. And once you recover one memory, it does not help you recover other memories. This is like learning about the history of bicycles and how they were invented. Although you may love bikes, it is hard to remember the names and dates and who did what. There is a better way.
Have you ever heard the popular saying that goes like this: once you learn how to ride a bicycle, you never forget? This is because riding a bicycle is not knowledge; it’s a skill. An effective way to think about skills is that they are collections of memories that are connected to each other. Once you recover one of those memories, they all come together and are accessed in a much faster way by your brain.
That is why, once you acquire the skill, you just sit on the bicycle and go. You do not need to remember each fact about riding a bike. It just comes to you, without effort. The most important thing about skills for you to keep in mind is that although you can acquire knowledge by reading or listening, you can only develop skills by doing. There is no amount of reading, listening, watching videos, or following amazing tutorials that will ever get you to ride a bicycle. The only way is to go down to the park and try, fall, try again, and eventually, do it.
This is the same for every developer skill that you want to master. To really learn something, you must do things, instead of simply studying to acquire the knowledge.
When you write your CV or resume or prepare your LinkedIn profile, do you list in it all the books you read and YouTube videos you watched? Do you list all the knowledge you have? Or do you put more focus on the projects you worked on and the experiences you acquired?
Even when just starting, you will clearly be better off including everything you did, even if they were just personal and volunteer projects, because, at the end of the day, it is your experience and skills that really matter.
We started this chapter by talking about how developers spend a lot of time trying to keep up to date, so does the discussion around skills just make it worse? We must spend time keeping up to date, but the outcome we desire is to gain more skills. As we gain skills, we must still do our day-to-day things, so it will take more time, not less!
Sometimes, in order to do things, you need to develop a strategy for doing so. This reminds us of a developer we know named Maryna Savchenko. She is a software engineer, based in Germany, and a true believer in software craftsmanship, clean code, and TDD. She finds intellectual fulfillment in accomplishing hard tasks and is passionate about acquiring and improving skills. When we asked her to share a story with us about learning continuously and shaping her career, she shared that what really helped her in her learning journey is a book entitled A Mind for Numbers, by Barbara Oakley. By reading this book, she figured out her own “learning framework.” Understanding how she learns best helped her to avoid frustration and keep being motivated during learning complex topics. Understanding the best way to learn new skills and gain experience by doing is a crucial step as you continue your path for learning. Let’s hear some more from Mayrna.
After leaving Kharkiv National University of Radio Electronics with a bachelor’s degree in computer engineering, I did not work as a software engineer. I was told that “I do not have it.” And I strongly believed that for some time. When I was offered a job in application support at a software development company, I was glad. I worked hard. I learned accounting by myself (to understand enterprise resource planning systems better) and passed four certifications, only to realize that I was learning the wrong thing. I learned the hard way how focusing on the right thing matters! Why was it wrong? Well, that technology (1C Enterprise) was limited to a number of countries (Ukraine, Russia, Belarus, and Kazakhstan). I could not reuse my knowledge, and working for a company with headquarters in Russia was not right after Russian-Ukrainian War started in 2014. In addition to that, I was making less and less money every day because of inflation. I was paying full price for my wrong decision and for listening too much to other people. At this point in time, I did the first analysis of the Java ecosystem and thought that it may be a good way forward. In the meantime, my husband and I decided to move to Poland from Ukraine. I realized at this time that I needed to think hard about what to do and what to learn next. After one more analysis of the market and technologies, I was sure that Java was a good choice and decided to become a Java programmer. Finding a job abroad without relevant experience is not an easy task. You need to be better than local candidates and prove it. In my case, I needed to prove it to myself also. So, I needed to learn a lot of things, such as the language itself, frameworks, build tools, testing frameworks, databases, design patterns, and so on. In the beginning, I was very slow, ineffective, and overwhelmed. So, I googled how other people learn. Many said they “just learn” and that is it. After some searching, I found Barbara Oakley’s book and it was full of the advice I needed. I also discovered a rich and diverse software engineering community (including Java champions, Microsoft MVP people, experienced software engineers, techno bloggers, and tech educators). It gave me an understanding of what I was doing wrong, and I started to believe in my plan. But looking for a software developer job in Poland was not successful for me. I had only one technical interview. When I tried to send my CV to Germany, I realized how geography matters! From sending 13 CVs, I got 6 responses, 2 onsite interviews, and 1 job offer. And we were on our way to a new country. In Germany, I still needed to learn a lot to level up, as well as the German language. Having a learning framework gave me the right tools and confidence to proceed. Last year, I got promoted to mid-level and started blogging (https://savchenko.tech/). Now, I am living in Munich and on my way to improving my career.
As Mayrna’s story illustrates, sometimes you have to find your inspiration and curiosity to continuously learn. Next, we will discuss how to find focus and priorities to help us identify the skills we need to keep up to date.
Finding focus and priorities
Connected to the how to keep up with current, ever-changing technology question that we looked at in the previous section, there is a follow-up that we also hear all the time: Which technologies are important to learn today, and which ones should we prioritize?
This question is a recognition that there simply is not enough time to acquire every skill, so what do you choose?
There is a simple answer to that: Choose to learn something that you need to apply right now.
It may sound simple, but it makes sense. If execution is what develops your skills, then if you prioritize learning about something that you need to use immediately, you will go ahead and use it, which will develop your skill. This is the best way to get yourself to do the skill the fastest. This is simple, but it is not very helpful, is it?
Imagine this. You must do something at work, and your boss tells you to learn and apply it. In this case, what we just discussed could be the right answer. However, that leaves you at the mercy of what your company wants you to do, and someone else’s ideas of what is important. Not a good strategy for an awesome career, is it?
For you to take control of your career—the theme of this book—you need to proactively go after the things that make a difference to you. For that, you will need to focus and choose what matters to you.
And immediately when you hear that, you may feel a tiny bit of anxiety pop up in your head. There are so many options to choose from:
- What if I choose the wrong thing?
- What if the thing I choose is not the best thing?
- What if I miss the important things?
- What if things change?
If you feel like this, maybe it is because you think that the focus is the technology or the tool that you will spend time mastering and developing the skills for. You may be thinking that the focus is, for example, on Java instead of Go or Ruby.
But that definition of focus is too narrow, and not very useful for your career. Choosing an area of your focus is not about choosing a technology or a tool, much less a framework or an API. Choosing a focus is choosing the problem you want to solve. In a way, choosing a problem is a much more specific and narrow focus.
For example, you can focus on solving the very pressing problem of achieving high performance for large, scalable, Java-based finance applications in the cloud.
This is a very precise problem to solve. It seems much more specific than focusing on Java or the cloud.
However, the tools, knowledge, and skills needed to achieve high performance are actually many and varied. You will need to know about Java tools, cloud tools, performance tools, financial concepts, scalable architectures, and so much more!
Well, this seems too much to learn! Aren’t we back to the problem of lack of focus? If you keep the problem in mind, then no. It is the problem that will help you keep your focus.
In our example, you don’t need to learn or keep up to date with everything in Java, just the parts that focus on performance. There's no need to follow every single tool that shows up in the cloud. You will focus on the ones that give you an edge on the scalability needed in the financial world.
Finding your focus is finding an interesting problem to solve that you are passionate about. In the next section, we will introduce a concept to help you.
Applying just-in-time learning
Here is where the rubber hits the road. Once you know a problem, even if it is a broad idea of what it is, you have a direction to go, learn, research, and dive deep. How can we mention broad and deep in the same sentence, and not make that contradictory? This is what we call just-in-time learning, which is a two-step process. Let us discuss each step briefly in the following subsections.
Step 1 – Have a broad vision of the market
Once you lean toward a problem or direction, even if it is fuzzy and just defined in general broad terms, surround yourself with related information. Your goal is to go broad, to know what exists.
This will be scary because the more you know it exists, the more you will feel there are too many things you do not know. That is called the Dunning-Kruger effect, and it is a cognitive bias that you can learn to control:
Figure 1.1 – Dunning-Kruger effect
To go broad, use the following techniques:
- Follow people related to your focus on Twitter and LinkedIn
- Search for technologies and projects in that general area
- Talk and connect with people, ask questions, and pay attention
- Attend online and in-person meetups and events
- Subscribe to bloggers in that space
Here, you are looking to have a broad view of the landscape, get a feeling about the terminology, the most mentioned and used tools, the people that are shaping that area, and what they think.
This is a superficial view, but you should also look a little below the surface. When you hear about tools and concepts you do not know, a quick Google search will tell you what they are and what they are useful for.
Keep this in mind: you need to know that things exist, their general usefulness, what problems they solve, what problems they create, and a sense of their popularity. You can use your memory, a file on your computer, a notebook, or even tools such as Anki to maintain your general view of your problem space. This is knowledge, and it is particularly important that you are continuously aware of your problem domain.
One crucial point: this seems very time-consuming, right? If you agree, it is because you are thinking about going deep, and spending hours researching every day. But remember, that is not the point but rather a superficial understanding. You should be aware and connected. You should be paying attention to your area. A few minutes a day, or when the opportunity arises, is more than enough for you to build that general idea.
We can almost hear you say, “This superficial idea will not help me learn things!” And you are right. The objective of being broad is to know what exists. Then, you apply step 2.
Step 2 – Go deep when you are ready to apply
Now that you know what exists, look for opportunities to apply interesting things in your day-to-day coding and development projects so you can experiment with this approach. This can take many forms.
Look for opportunities to experiment with some of those technologies or ideas in your current project. Even if your project will not use these ideas in production, there are many opportunities to experiment with prototypes and test cases, as tools for you to be more productive, or to build a tool for the team.
Pay attention to what is going on in your company. You may hear of projects or proofs of concept that are being considered, customers that need a new solution, or internal projects that need to be implemented. Volunteering to discuss and participate in some of those may give you a chance to apply the technologies you are interested in.
Find things outside of work that you are interested in. Applying skills at work is your best option, but sometimes the opportunities are harder to come by, and you may need to look elsewhere. Personal projects, volunteer projects for a non-profit, or open source projects are all good options.
In all cases, when you see an opportunity to apply your knowledge, this is the time to go deep with just-in-time learning. Do a deep dive into how to use that particular technology or tool. Spend a few hours during the week creating a small prototype, getting something up and running. Your goal here is to get up to speed with it as fast as possible and go as deep as possible in that time.
The objective is not to become an overnight expert but to be able to apply that new idea to a real project.
What will just-in-time learning do to your skill acquisition process?
First, it will give you a broad vision of what exists and what matters to your focus area. That, in turn, will allow you to identify opportunities to apply that technology.
Second, once you find a real opportunity, you will go deep by learning and applying immediately what you learned, and that will give you the skills you need to advance.
That begs a new question: how do we practice?
Practicing deliberately to learn a technology
And again, the answer is simple enough: practice.
If what matters are the skills you only acquire by doing, it follows that the more you do (practice) the skill, the better you get at it.
Again, the answer is simple, but not very useful. Because you are probably thinking about your reality, where you barely have time to do your work and what you must do, you can barely keep up with all that goes around you. How can you spend hours and hours practicing something?
This, indeed, is a good point.
First, you do not need to spend hours and hours practicing. Second, as much as possible, you should practice by doing something real, and that, in most cases, means doing your work.
There is a third point too! If this is your career, should you strive to be the best you can be?
That is not a rhetorical question. For many people, their job is just a job. And that is totally OK. If this describes you, do not feel bad that you are not interested in putting your best effort into becoming better. All you need is to be good enough to hold a decent job. And at the end of the day, you go home to your family, hobbies, and your life.
There are many developers whose lives and hobbies are more interesting than their jobs. And they are better at their hobbies than they are at their jobs. At this moment, Bruno interjects—“I am one of them.” I am better at speaking, engaging audiences, and building communities than I am at being a software developer. I now spend my time helping developers with their careers.
As a Java developer since the earliest days of the technology, Bruno took part in some of the largest Java projects in Brazil and gained extensive experience in large projects in the government, finance, and service industries. While doing this, his passion was actually communities. Slowly, he combined his developer work with community work and started to participate in Java open source communities and projects, such as the Java Community Process (JCP) program, the Open Source Initiative (OSI), the innovation-focused Campus Party Institute, The Developers Conference and much more.
So, although he started as a Java developer, he eventually made his community hobby his main work, and he helped to found SouJava (Sociedade de Usuários da Tecnologia Java; Java Technology Users Society), one of the world’s largest Java User Groups (JUGs), and became a leader of the Worldwide JUGs Community, helping the organization of hundreds of JUGs worldwide.
The fact that I was able to turn my hobby into a full-time career is testimony that it can be done.
But if you do want to be the best technical person you can be, then you must practice. And for you to not spend all the time you have available practicing, here are a few things you need to know about practicing deliberately:
- Deliberate practice is practicing with a purpose: You must practice with a specific purpose in mind. Just sitting down at the computer and hacking away for a few hours is fun, and you should do it because it is fun. But that is not practicing deliberately. Define what you want to improve, by when, and what you are going to do to get there.
- Deliberate practice is focused: Choose a specific skill you want to improve and work deeply on it. Focus on the specific thing you need to improve and be better at. Practicing is improving one specific skill at a time.
- Deliberate practice is intense: Define some exercises that you can focus on with intensity for 30 minutes to 1 hour. A clever idea is to use the Pomodoro Technique and execute one or two pomodoros (25 minutes each). Another technique is to use the rule of three: do three focused bursts with a few minutes or even a couple of hours between them.
- Deliberate practice is daily practice: In terms of skills, nothing beats consistency. It is better to practice for 15 minutes every day than to concentrate 4-5 hours at the weekend. Set a daily practice time, use some inactive time during the day to review past practices, and commit yourself to do a small effort (even 5 minutes can make a substantial difference). Anything that helps you practice daily will give you better and more consistent results.
- Deliberate practice uses proven methods: As much as possible, follow existing tested practices. Learn how to type on the keyboard using proven methods. Practice code katas that have been created specifically to improve development skills. If you cannot find or do not know a proven method for something, talk with friends or colleagues who are more advanced than you, and see whether you find some common techniques that worked for them.
Practicing proven methods daily, in a focused way, and with intensity, especially when combined with work, can at the same time reduce the number of hours invested and give better results.
You will encounter roadblocks along the way, but you can remind yourself to make learning a part of your career path and journey. To be successful in your technical career, you need to consistently be learning. Consistency with a manageable amount of learning is the key to success in making learning a part of your lifestyle.
But how can you keep the consistency? You keep consistency by making learning a habit. That is why we need to build a few good habits.
Implementing important good habits
Your brain is always trying to optimize the paths and build the neurological structures (the brain equivalent of muscles) to allow you to do what you need to survive. So, it looks for repetitive things that you do, and it tries to codify those repetitive tasks into structures that are easier to access, faster to execute, and require less energy.
That is why we are creatures of habit. Most of what you do every day are habits or routines, codified in our brains, so we can access them easily and quickly.
When those structures help you move forward and achieve your goals, we call them good habits. They are good for you. When they prevent you from advancing, hinder your results, slow you down, or cause you harm, they are vices or bad habits.
Either way, your brain loves to just run with them!
There are a few good habits that can really change your life. We have listed a few steps that we think are particularly important for you to create good habits.
When there is something that you would like to do, get in the habit of taking small actions. Taking action is the hardest thing for us to do, and not taking action is the basis for terrible vices such as procrastination and perfectionism.
Try to take small actions on things you want to do. Do you want to participate in an open source project? That seems big and fearsome. Take a small action such as accessing the page of the project and looking at it for a few minutes. Overcoming the inertia of things you want to do will help you do things even when you do not feel like it.
Write every day
Our brains can be cluttered with thoughts and ideas. To help you think better, your brain needs to externalize. Speaking with someone or writing about it will help you clarify your thinking.
That is why developers need to write code every day, focusing on solving problems. Take a few minutes every day to write about a problem. It can be writing the text for a blog or article, or it could be more technical and be code and pseudocode to explain or test an idea. It can also be just having a conversation. Doing this daily will help you think better and be more articulate.
Create routines to get yourself started
You know when you start a sports activity, your coach will do some exercises that are always the same? Things like stretching and warming up exercises. This primes your body and gets it ready for the activity ahead. Your brain needs that too.
Create small routines to start working. Start coding. Or any important activity that you need to be very sharp and focused.
A startup routine is a series of small steps, such as saying the following to yourself – before I start coding I will do these things:
- Sit down
- Put away things that are not needed
- Drink a glass of water
- Close the email
- Open the IDE
Try to repeat the same steps, with purpose, every time you start coding. It will prime your brain and get it ready to focus on the task at hand.
Plan your week
We live in a world that is full of distractions and we combat information overload coming from all aspects of our lives. We are busy and it becomes difficult and overwhelming to achieve the things that matter to us. If we focus on the things that are most important to us and that we want to accomplish, we not only gain focus but we also become happier and more productive. This is the idea behind the Three Big Rocks concept. It is a concept that can help us to prioritize our time.
The Three Big Rocks concept is mentioned by Stephen Covey in his book, The Seven Habits of Highly Productive People, which can be found on Amazon at https://www.amazon.com/dp/0743269519/ref=olp-opf-redir?aod=1<.
In this book, there is a time management expert giving a seminar to a roomful of people. He provides a demonstration of this concept by taking a mason jar and putting large rocks into the jar and asking the audience whether or not the jar is full. The attendees indicate that the jar does appear to be full. The speaker then adds smaller rocks into the jar, fitting them in between the large rocks, and turns again to the audience to ask whether the jar is full. The audience is not sure which way to answer at this point, so he adds some sand to the jar to fill in even more of the space between the large rocks and the pebbles. While pausing and asking the audience again to confirm whether the jar is full, he then pours water into the jar until it is at the point of overflowing. The speaker then asks what the objective of this exercise is. Some people may answer that no matter how busy or full your schedule may be, there is always room to put more things into your schedule; however, the point of the Three Big Rocks example is that if you don’t put the big rocks in first, you will never get them in at all.
This is a simplification of the concept and there is much more that you could learn and apply, but this gives you an overview of the main idea behind the term “three big rocks.” To implement this concept, at the start of the week, make sure you decide on your three big rocks for the week. They are the three most important tasks you have for the week, the ones where, if you complete them, you will feel that your week was worth it.
Schedule time to do them. To choose the three big rocks, look at your long-term goals, and make sure you choose the things that move you in the right direction.
Those are just a few examples you can implement. To help you deploy those habits in your life, remember to start small. Your brain will resist any substantial changes.
Habits are implanted faster if you succeed than if you fail. So, it is better to create a writing habit by writing for 5 minutes every day and succeeding every day than trying to start writing for 1 hour a day and failing after a few tries.
Also, daily habits are easier to implement because they become ingrained faster. To implement a habit, experts say you need around 66 repetitions to create new pathways in the brain. That amounts to 3 to 4 weeks if you do 2 or 3 repetitions a day. So, it is better to do something you can repeat every day, multiple times a day, depending on the habit. That is another reason why you should focus on starting small.
Other techniques you can use to help you keep the motivation to implement powerful habits include doing things together with friends in a community (it increases your commitment) and organizing your day or your habit to be easier for you to do than for you not to do (making it easier for you to take action).
Building small habits or routines will help you stay focused and consistent and will lay the groundwork for you to advance fast in your career.
Heather interjects here, as an enthusiastic learner who enjoys having a variety of responsibilities, “I have found joy in being able to consistently bring new aspects and skills into my life and career by developing habits that set me up to be successful.”
As the senior director and chairperson of the JCP program, in her role, Heather is responsible for the leadership of the community and chairing the JCP Executive Committee. She has led and participated in several initiatives with the community (including JUGs) as part of her role, such as JCP.next, Adopt a JSR, Hack Days, and Java in Education, and is an internationally renowned public speaker at software development events all over the world.
She says, the work that I do to engage the Java developer community on a global basis is broad and vast – it could become overwhelming to think about all of the areas where I could focus. I have found that by incorporating habits to focus my time, it becomes energizing and exciting to always be evolving and learning. In order to establish consistency and focus to accomplish great things in the community, I have incorporated certain habits that are part of my routine. For example, every Sunday, I review my calendar for the week and block out time for my priorities for the week. I also identify those priorities and set aside time to prepare for the most important meetings of my week. I then identify a list of tasks that should be accomplished during the week. My week also includes time for creation, learning, and networking. I have set habits that allow me to build these activities into my week. For instance, I rise early and take time early in my day to focus on creation or writing, and I plan most of my meetings following that time, in my mid-morning hours. I incorporate some form of exercise in the middle of my day, and my afternoons are for doing tasks on my list. I also try to leave Fridays open for new initiatives or projects that I might be working on, as well as learning and networking. Setting up my habits to include these areas that I have identified as priorities for me has allowed me to grow and expand my career and my areas of influence over time.
Tips for learning new skills
Assess and focus. You need to identify the skills or knowledge you are missing – be as specific and focused as possible to narrow down the area to learn. Look for skills and knowledge you need to learn right now.
Study and review the skills to build and deploy your habits. Have a plan and stick to it. Look for ways to celebrate and reward your success along the way. Share and communicate those wins to other people.
Get feedback and check your progress. Validate that you are on the identified path. Adjust your learning process and plan as necessary. Ask for feedback from others to check your knowledge and learning progress.
Rafael del Nero
We would like to share with you the experience of Rafael del Nero, working at Mastercard as an example.
Q: Tell us a little bit about the current role that you have at Mastercard. What do you do? What kind of things do you work with? How interesting are the projects that you work on? Tell us a little bit about that.
A: I’m a senior software engineer at Mastercard, and my work is not exactly related to business requirements implementation. The project we’ve got is to triple our current cloud project that’s deployed only in the US to other continents. We are doing a lot of DevOps work and configuration work for our website, and my day-to-day work is on that.
I’m going to give you some examples of the work I’ve done. Some of the activities that I’ve been doing have been migrating Java 8 to Java 11. Another example would be adding partition jobs and out-scaling. I’ve generally been doing work to enable our services to be deployed in other continents, and we have to make them at least a little bit more reliable by adding out-scaling and basic microservices features.
I’m not doing a lot of coding. But even in my last role in the last company I was working for, I wasn’t doing a lot of coding because, as I said, sometimes, for developers, the scenario of software development is changing. You are far more of a software engineer rather than a developer who develops code. I don’t see that very much anymore in the market, and that’s happening because of the cloud era. Services nowadays are deployed in an isolated way. It’s just a natural thing that happens in technology. As technology evolves and gets more mature, the work changes as well. Nowadays, for example, we don’t have one big unit. We have microservices, and they communicate with each other using investment brokers, and so on. I’ve also done a lot of work with message brokers, so it’s just software engineering work.
Q: Tell us a little bit about your projects. You have the Java challenges project. Can you tell us a little bit about that, how that got started, and the results you’re having with it?
A: Yes. The Java challenges started five years ago.
Basically, they are Java quizzes. They are carefully designed to help Java developers really understand Java features. They resemble the certification questions but are more useful than those questions. I carefully produced them to really push developers to understand the main Java features, such as polymorphism, threads, and inheritance, and new features, such as records, the new switch case, pattern matching, and virtual threads. There are Java challenges for all of those features, and it’s fun for developers to understand and master those features.
As for how it started: well, it started with Bruno! If you didn’t motivate me to share my knowledge, maybe I would never have done it! When I saw your talk on TDC, you were saying that it was possible. In one talk of yours, someone mentioned mentorship, and I said, “Man, this guy is crazy. How would Bruno or anyone else need a mentorship?” Then, you answered, and then I said, “OK. Maybe that’s possible.”
Then, I started the mentorship program with you, but before starting the mentorship with you, just with that talk I saw on TDC, you had already made me believe that it was possible. By going through your talk, I gave two talks at my job, because I thought, “OK. I believe Bruno. He said it’s possible, so I’m going to do it.” You were able to empower me to give my first talk, and that was great because after I gave those talks, people were looking differently at me and telling me, “Rafael, I can really see that you’ve grown a lot,” just because I delivered the talks.
When I saw the guy asking that question, I said, “Oh, this guy’s crazy. How can Bruno give mentorship?” Then, you put up your website, and I said, “OK. I’m going to write that down and do the mentorship with Bruno.” At that moment, I decided that I was going to do the mentorship.
Anyway, I learned a lot from you, and then I started sharing knowledge on Twitter more consistently because I wasn’t doing that very consistently before. I had maybe five posts on my blog – I didn’t have a lot – but then I learned that consistency was so important with you, so I said, “OK. I’ll commit to that. I will start generating content regarding how to have fewer bugs or how to create high-quality code.” I started creating some blog posts regarding that.
I did a design pattern post on Twitter, and Yolande retweeted this design pattern article and I got lots of views. I wanted to say thanks to her, and then I asked you, Bruno, “How can I thank Yolande? How can I thank the Java community for that?” You said, “Create content for her.” I thought, “OK. What can I do?”
Then, I saw that she was working on a project called 100 Days of Java. I thought to myself, “OK. I really like to explore those Java features and I also like games, and I’d like to create some Java code challenges. I will create one daily challenge,” and that’s what I have done. I created one Java challenge every day and I shared them with Yolande and the Java community.
That was an amazing way to help her to share Java knowledge, and it helped me a lot as well because I gained so much visibility. In fact, I had no idea that I was getting so much visibility, but when I had the Java challenge of going to JavaOne in 2017, a lot of people already knew me. A lot of people came to me and said, “Oh, I know you. I know your job. I know your work.” I was impressed because a lot of people knew me because of the Java challenges.
The consistency was a game-changer. Sometimes, one simple idea, when combined with a strong will and consistency, can be a game-changer. I was consistent with the Java challenges, and that opened a lot of doors for me. It opened the door to give a talk at JavaOne. That then opened the door to writing a book. That then opened doors to great videos and great articles, and I also wrote a lot of articles for JavaWorld and IDG InfoWorld because of the Java challenges. It’s all down to one idea, motivation, and encouragement – you know, there are lots of variables, but at the start was the empowerment of a mentor: that’s so important. Bruno was my mentor – he is my mentor. Maybe without that, I wouldn’t have been empowered enough. Maybe I wouldn’t be doing what I’m doing. I was focusing so much on technical knowledge that I forgot everything else. What happened was that a lot of other people were getting promoted, and I wasn’t.
Q: What were the results for you of the consistency, the practice, and the challenges? What happened in your career after that?
A: Well, what happened was that I got visibility, and it was far easier to get interviews, for example. A lot of companies were sending me messages on LinkedIn to do interviews, and when I arrived in Ireland, things were easier. There were doors open already.
For example, through SouJava, I was able to meet the Java group leader when I was touring Sao Paulo. That opened doors for me because I already knew him. In the first week, I remember I went out with the two Barrys, and we had a chat, and it was fun. Then, I could help him build their website, and it was great because I was mentoring a German lady and I was practicing my English. It was good to have these doors open when I came here for the first time.
When I was sharing my knowledge, what happened is that I gained trust. People trusted me, even if they had never talked to me before; I had their trust. Barry Alistair, the JUG leader, told me, “Hey, Rafael. There is a group of Brazilians there. Go say hi to them.” I went over to say hi, and one of those Brazilians – Rodrigo Rodriguez – knew me already; he had seen my content. He said, “Hey. Are you working?” I said, “No. I’m looking for a job.” Then, he said, “Man, there is a company that’s really good to get started with.” I went to talk to a friend of his, and then I got recommended to this company, and then things worked out.
So, why is sharing so important? You gain trust. Even if people have never talked to you before, people trust you. He only recommended me because he saw the content I was sharing, and I didn’t even need to tell him anything. He just said, “I will recommend you.” What happened was great because, when you recommend people, in most companies, you get some money. He got some money, I got the job, and so it was a win-win for everyone.
Q: One of the things you mentioned here was practicing and consistency. Can you talk a little bit about how practice was important for you to learn new skills, especially because one of the things that you do is that you help other people practice? How important is practicing to improve and learn things and improve skills?
A: Well, it’s highly important. Practice is the key to mastery. You can do only moderate-quality work if you do it once in a while, but you can create a masterpiece if you do deliberate practice. That’s why it’s so important to build consistency, and it’s hard to build consistency because there are days that you don’t really want to do whatever you’re committed to doing. But on those days, when you push yourself, those are the days that you build up mastery.
It’s extremely important to do deliberate practice in whatever skill you want to really build up. In the case of the Java challenges, nowadays, I’m able to create better Java code challenges. It’s important to be consistent because that’s how you build up your confidence, and when you build up your confidence, you are able to do much more.
And not only that: when you are consistent and do whatever you plan to do for a long period of time, you will excel in that skill. If you do something only once in a while, you’ll be only average in that skill. You won’t excel. You won’t gain mastery of your work. But if you are consistent for a long period of time, and you do what you need to do, even when you don’t feel like it, you can build really big things. And that’s hard to do because you are fighting against your own mind.
Q. You help people to become better developers. I know you: you help them with the Java challenges project, and you help them to learn new things and be better. What’s your biggest suggestion for people to improve their skills?
A: Deliberate practice is the key to the mastery of skills – for example, writing. Writing is a skill that takes time until you get good at it. I started writing articles consistently so that I could get better at my writing skills. Not only that, but I could also improve my writing skills by writing a book.
As a tip for anyone who wants to be consistent, firstly, you have to believe that you can get there. Otherwise, you won’t even do any of the work because what’s the point of doing such hard work for nothing? The first step for anyone who wants to be consistent is to believe that you can achieve it.
Mentors help so much with that because a mentor is someone who has a much broader view than you, and that gives you the confidence to believe that it’s possible. A mentor is a tremendous aid to help you with your confidence.
You’ll also have to fight against your own mind because there will be days that you won’t be willing to do whatever you’re committed to doing. You have to decide, “OK. I’m going to do that no matter what,” because you’re going to have to do those things on the days that you don’t feel like it: that’s hard. But when you see the big picture and think, “OK. If I keep doing that, I know that I will reap good things,” it gets easier.
It also gets easier when you start seeing results. When you start seeing results, that’s a boost for your motivation. But you have to keep in mind that motivation won’t get you all the way. Discipline will get you all the way. Motivation is a booster that you have at the beginning, but what makes you continue is not motivation – it’s discipline. Of course, you’re going to have some motivation boosters – when you see some results, for instance, you’re going to have a motivation boost – but for most of the process, you’re going to have to be taking action and not getting immediate results. Focus not on the results but on the process, and just keep doing it.
That’s the hardest part: to keep doing the thing you decided to do, even when you don’t feel like it. It’s a war against your own mind. That’s the hardest thing about being consistent. Staying consistent on those days that you don’t feel like it is the hardest thing.
And of course, do something you enjoy – otherwise, it’s much easier to give up. If you do something you like, then you feel more motivated, but keep in mind that sometimes, whatever you choose to do, there will be things to do that will be a little bit boring: that’s OK. Sometimes, it won’t be so easy – you’re going to have to embrace the boredom. I embrace the boredom a lot. You have to keep in mind that it is part of the process: sometimes you’re going to do boring tasks. But of course, keep the fun tasks as well – otherwise, if you keep doing only boring tasks, you might give up.
I always innovate. If you are creating content or learning technologies and you end up learning or using the same technology for many years, you’re going to get bored. Always find new ways to learn, and that should upgrade your career.
In this chapter, we have covered how you can always be learning. You now have the tools to identify what you need to learn and what you need to practice. You also have an understanding of how to apply just-in-time learning to accelerate your learning journey. By planning your priorities in advance and identifying what it is that you want to learn, you will be able to keep a focus on the big picture of what it is you want to accomplish on your career path. In order to stay on your path, you know that you must apply deliberate practice methods and focus on implementing important habits to set yourself on a path to be always learning. Now that you have this mindset of always learning, with a dedicated and precise focus, we can move on to discussing some types of learning that you may want to consider as you continue on your technical career journey. As we mentioned earlier, there are both formal and informal learning methods and pathways. Both have a critical role to play in shaping your skillset and career.
In the next chapter, we will cover the essential elements of formal learning and certifications. Formal learning means you are told what you need to learn, and the goals for the learning will be clearly established by an instructor or identified in an online learning course or certification program. Using the tools you have learned about here will help you to select the best formal learning and certifications for your career journey.