There are many self-taught engineers who learn new skills on their own using various resources such as books, videos, online courses. The common challenges with self-study: frustration, giving up, lack of knowledge of best practices or understanding of fundamentals, lack of socialization, lack of perspective from other people and many others.
In this post I will give you some tips how to make the most of self-study and become a better engineer.
I will take programming as an example.

Motivation Link to heading

Before you start reading books and articles, doing online courses and writing the code, first and foremost: identify why you want to do this in the first place. Answering why question is important whenever you want to invest your time in any long-term learning. It is especially true with programming. I can tell you, every so often learning programming is going to be extremely frustrating and you will get angry. Most likely you will think that you are an idiot and can’t do it, when you spend hours to find a missing colon in the code. You will question yourself and start having doubts.
In those moments, you need to think why you started it in the first place and the reason should be convincing to you. Here is the truth for you: programming is hard. You can’t learn it in two weeks or a month, after a year or two you will only start getting comfortable with the chosen programming language. After 6 years of programming in Python, it also happens to me that I spend half a day reading about something that will be solved with several lines of code. You can see it on some of my streams{% blank %}: sometimes I spend the whole stream struggling to find a solution for the problem I have.
I can tell you, it doesn’t become less frustrating with experience. Don’t give up!

So when (not if!) you have doubts, try this:

  1. Remind yourself why you started.
  2. Remember that learning a new technology takes time. You can’t become an expert in a month.
  3. Remember that most likely many others had similar problems as you did.
  4. Years of experience do not matter, you will still find yourself in a situation where you have no idea why something does not work and then you have to spend hours and hours trying to understand what is going on.

Mentorship Link to heading

Having a mentor in your learning journey is awesome.
You need a person who can provide guidance in your journey.
You need someone who could review your code and walk you through why it is not working the way you expect.
You need someone to tell you why the written code is crap and show you how to solve the problem using best practices.
Finally, you need someone to make you feel better when you are at the peak of your frustration.
A mentor can help you with some of these things.

Don’t know how to get a mentor?
It is not hard, but could be a little out of the comfort zone.
Find a person who is much better at a selected technology than you. If it is someone you know personally - great. But if you don’t - not a problem. What about an author of the book or course you liked? Or may be someone who wrote interesting blog articles or tweets? Or speaks at conferences about Python? Awesome.
Now the hardest part for the majority of people - asking. It could be embarassing to do, because humans are bad at admitting that they don’t know something, but it is necessary. If you don’t ask, it will not happen. In the worst case scenario you will get a polite rejection saying that the person does not have a lot of free time to do that. Find the means to communicate with the person (phone, email, Twitter, LinkedIn, etc.) and write briefly why you are learning the technology and what do you expect from them. If they reject, find someone else and repeat.

Even though this article is not about the mentorship, I will briefly list the rules of a mentorship:

  1. Agree on meeting cadence and expectations from the start
  2. You (mentee) are responsible for driving the meetings
  3. A mentor is not a teacher — don’t expect them to have 4-hour lectures with you every week
  4. Be respectful of a mentor’s time. Don’t ask your mentor a question, when the answer can be found on the first page of google search (more on internet search later). Always search before ask.
  5. I recommend to spend your time on things that you have already read (and may be found an answer already) but do not fully understand. For example, it could be code reviews or discussion of best practices.
  6. Not all relationships work out. This applies to mentorship as well. If you feel it doesn’t work, don’t be shy to end the mentorship and find someone else. It’s totally okay.

I have had a number of mentors in my life, who helped me tremendously and I am forever grateful for their help. And some of them barely knew me when I asked them.

Study partner/group Link to heading

Having a study partner or community around you doing similar stuff is awesome and will make your journey much easier and more pleasant. A study partner is the person who can add fun and responsibility to your journey.
You usually look up to each other and this can lead to a healthy competition.
You keep each other in check.
You support each other when you are frustrated and don’t understand this stupid thing.
You share with each other awesome articles or problems you stumbled upon.
It is also much harder to give up when other people are involved in the process.

Just recently I had a study partner to learn Python asychronous programming (asyncio). I was always interested in this topic, but it isn’t easy and I could never find the time and proper motivation to learn it. I found a study partner who wanted to learn the same thing (hi Natasha, if you are reading this!). We set up regular study group meetings and rules. Every meeting we were discussing what we learnt and sharing great articles with each other on the topic. If we didn’t do this, I would have never learnt asyncio. A couple of months later we stopped doing that since we felt much more comfortable with the topic.
As a result I started using learned techniques in work projects and also delivered the workshop at Cisco Live US 2018 - DEVNET-3627: Make Python applications faster with asyncio! on this topic.

A couple of words about study groups. During my CCIE studies, I ran CCIE R&S study group in Cisco Krakow office, where we had mostly TAC engineers attending. This was fun. I think it was the strongest study group I have ever encountered — TAC engineers usually don’t give up until they really understand the problem. During our sessions, we questioned everything. We questioned a presentation. We questioned official books. Hell, we even questioned RFC. Knowing how was not enough. We needed to know why. And we digged deep, really deep. I remember once we had a discussion about some OSPF operation (my memory is fading but I think it was about P-bit and path selection). They weren’t any means to change it within the problem constraints. We were seriously discussing what will happen if we change P-bit for a specific LSA in router’s memory. I bet some people at that meeting thought that I was nuts (probably I was/am 😂). I found there friends, great friends. And of course we learned a lot from each other.
Also, I was one of the most active participant in another CCIE R&S study group — askaCCIE, which had study sessions every week at 3 AM my time. Buy hey, who cares? I wanted my CCIE 😉 We learned so much from each other.
If it wasn’t for the study groups, I wouldn’t have passed my exam on the first attempt.
Remember one thing though: the more you contribute, the more you will get in return. Don’t be “I’ll just listen”. It is a waste of time. If others do the same, noone will learn anything.

Community Link to heading

Communities are invaluable. Other people can support you and answer your questions, regardless of the time of day if the community is online. Some communities have study groups, some don’t.
In a community like RouterGods, for the people preparing for certifications we have daily Google Hangouts where interested people join and start the learning session. The only requirement is to share the screen. This reduces procrastration and trains resisting an urge to check social media or other things which can distract you from the learning.
Communities can be online and offline. You can find both on the Internet. The only advice here –– don’t join too many, just pick one or a few, the most relevant to you and your current goals. For example, if you are learning network programmability, one of the biggest community to join is NetworkToCode Slack or Cisco DevNet.
Online communities are usually the second place (after the Google search) to ask for help when you are stuck.

If you are learning anything in IT, especially in programming, Google Search is your best friend. I’d argue that without the skill of Internet search you can’t be a successful engineer today. You can find there an answer to almost every question. Learn how to use it. It is not that hard, you don’t even need to use majority of advanced features in a search engine. Here are the simple rules:

  1. To ask better questions, first you need to learn how to use basic terminology of the technology. Do some intro level course or tutorial, read an intro book or article to be able to operate with the terms.
  2. Try to formulate your problem as concise as possible. With time you will learn how to break a complex problem in smaller problems.
  3. Put into google: <technology name> <short description of the problem using imperative language>. For example:
  • Python sort list in-place
  • Python iterate over key values pairs in a dictionary
  • Python get the first IP address from the subnet
  • Javascript arrow functions syntax
  1. Most likely you will find an answer to your question within the first page of Google search results. Go through every result on the first page from top to bottom.
    If it is a programming language, link to StackOverflow (programming Q&A portal) should be one of the first three. I tend to jump there first. With time you will learn how to glance over the result cards to identify which page will probably be the most relevant to you.

Errors/logs Link to heading

Regardless of the technology it is crucial to read the log or error on the screen and try to make sense out of it. More often than not, an error is meaningful if you put some effort to understand it. If you are doing programming you will stumble upon many errors: syntax errors, static errors, run-time exceptions. In networking you will see many error logs. You need to learn to read them. Make an effort to understand them and don’t instantly escalate to a more knowledgeable person. If you can’t figure out the problem from the error message, you need to use the search first before engaging people, ALWAYS.
Here is how:

  1. Extract meaningful data from the error
  2. Remove anything too specific to your environment. In logs from network devices it would be hostname, phone numbers, slot numbers, serial numbers. In programming: your actual data, variable names and the code you wrote.
  3. Put it in search, potentially adding technology. For example: Cisco IOS, Python, Javascript
  4. Go through all results on two pages. Read and evaluate if the result fits your problem. With experience you will be able to skim through the results rather than read them to understand if they are applicable to your issue
  5. If you still haven’t found the solution, iterate with different queries until success: losing technology identifier or some other word from an error message, or vice versa, adding more words, making the query more specific

By doing the search, not only you save the time (yours and someone else’s), but you will become a better engineer. Skill of Internet search is an invaluable for anyone, especially an engineer.

Summary Link to heading

  • Understand your motivation for learning a new skill or technology
  • Find mentors and engage in the study groups and communities which help immensely in the learning process
  • Learn how to search on the Internet, this is a crucial skill for an engineer

That’s all I have for now.
Thanks for reading and until next time!