I’m no longer a junior, but I need more and more knowledge. How to learn difficult things on your own

Self-learning for a developer is a process that never ends. This applies not only to juniors, but also to much more experienced middles and seniors. However, the question arises: do we all know how to learn correctly? How to overcome your inertia and learn to understand complex things?

One important point is a growth mindset, which involves replacing the belief “I’m bad at X” with “I haven’t learned about X yet.” Of course, a positive attitude helps, but it is clearly not enough on its own, especially over a long distance. Learning is a skill that needs to be worked hard at. Below, developer and author Julia Evans will look at specific techniques that will help you become a more effective learner. In particular, how to turn your ignorance into specific questions that will lead to solving problems and gaining new knowledge.

*Please note that the author’s position may not always coincide with the opinion of MyOffice.


How to learn to study?

Before we begin, I want to talk a little about how the skills behind self-learning can be developed. I'm not a professional teacher, so I'll share what helped me:

  • When I was a child, I studied mathematics for 7 years using the method Kumonwhich is aimed at independent study of the subject. This is how I mastered the entire primary and secondary school curriculum – from multiplication to algebra and mathematical analysis. I think this was important, and I am grateful to my mother (she has been helping children learn independently for over 20 years) for steering my studies in the right direction;

  • I completed my degree in fundamental mathematics, and during the process it was important for me to have a clear understanding of what I understood and what I didn’t;

  • I visited Recurse Center — an educational community for those who want to improve their programming skills, consisting of independent learners;

  • I'm a developer, and in this field, as you know, constantly learning something new is one of the most important skills. 🙂

Here are a couple more things that I think can improve learning ability:

  • homeschooling or school c bOgreater emphasis on initiative and independent research;

  • obtaining a PhD – of course, if it is necessary for your work.

I understand that “studying math on your own when you're 8 years old” being put on the same level as “getting a PhD” seems a little strange. But it seems to me that a child's understanding of fractions is just as important for the brain as the discovery of new ideas by an adult explorer. These mental practices are equally beneficial for me.

But, enough about the math. Let's get straight to what my article is about – let's look at some study skills.

Skill One: Understand What You Don't Understand

I consider this skill to be one of the most important. This is the ability to transform “I’m confused, I don’t understand” into “I have a specific question about X.”

For example, when I was learning Rust, I was very confused by references and borrowing. It took me a while to figure out why this glitch happened, but in the end I realized that I simply did not know how to answer the questions below (you can see the answers in my other article – What's a reference in Rust?):

  • what does the symbol actually mean? & in Rust?

  • how to determine that a variable is allocated in the stack and not in the heap? And is it always possible to determine this?

  • how to avoid setting lifetime for my structures in Rust?

Once I answered these questions, I began to understand everything about referencing and borrowing much better. As a result, problems with writing code in Rust have decreased.

First skill (continued): identifying what you don't understand is very, very important, but terribly difficult

If I couldn't find where exactly I was stuck in my Rust research, I would have to:

  • asking someone to find my problem for me, and this is almost impossible;

  • find a course/blog article/book where someone has already laid out everything I need;

  • deciding not to deal with complex and confusing things would be a real disaster.

And although I think I'm doing a pretty good job of it now, it still takes me a lot of time and effort to break down a problem into specific questions. For example, I came to my questions about Rust only 3 years after I started using it, simply because for a long time I could not decide to sit down and really figure out what was confusing me and identify the difficulties.

Of course, over time you will get better and better. Now I come to realize my weaknesses in programming much faster and at the same time better understand myself in general.

Second skill: be confident in your knowledge

Of course, the matter is not limited to one definition of what you do not understand. It is also important to adequately assess your knowledge base. For example, I don't know everything about networking technologies. But one thing I am 100% sure of is that there are 65,535 TCP ports. The src/dest port fields in the TCP header are 16 bits long (2^16 = 65,536), so there is simply no room for other ports.

Knowledge that I don't doubt is very important when I'm trying to understand a complex problem. For example, imagine that the program logs “port 1 823 832”. This is not because the number of ports has mysteriously increased, but I’m just stupid and don’t know about it. No! There is simply an error in the program, and port 1 823 832 does not exist. Of course, the example is too childish, but I constantly have to debug complex problems, and if I were not confident in what I know, I would have to waste time and act at random.

If you spend precious hours in this case, then do it on a super useful thing, namely, take a piece of information that you are sure of (“there are 65,535 ports in total, Wikipedia said so”) and make it reinforced concrete (“this is because the port field The TCP header is only 16 bits”). After all, there is a huge difference between “I am 97% sure that this is true” and “I am 100% sure of this and should never doubt it again.” What I know 100% is much easier to rely on.

Skill Three: Ask Questions

It's about taking the things that confuse you (eg “what's the difference between TLS 1.3 and 1.2?”) and turning them into questions. If so, here's mine article about how to ask the right questions.

For me, the hardest part about asking questions is figuring out what I know and what I don't. Here are a couple of additional skills that may come in handy here:

  • search for the necessary groups in Slack or the necessary IRC channels / mailing lists;

  • ask questions on Stack Overflow (which I've never been able to do).

Fourth skill: research!

What you need to be able to do for this:

  • google;

  • know where to find the most useful documentation in your field;

  • have or find books that contain the information you need. Stack Overflow is not a panacea. If I have difficulties with Linux, I often turn to the book Michael Kerisk The Linux Programming Interfaceinstead of surfing the net;

  • read the source code – when other listed sources do not help.

I don't know of any good guide to technical research methodology. Although, I think that this would be damn useful – the knowledge and necessary information are scattered across different sources, channels and media (manuals, books, mailings, etc.). Some documentation is REALLY more professional and, therefore, more useful than another. It would be nice if there was something to guide your search.

Habit Five: Recognize that being stuck is a sure sign that you are about to learn something new.

And the last thing that turned out to be very important for me was the ability to recognize the moments when some problems arise in front of me, and not to be upset because of my imaginary stupidity (“Oh no! I don’t know this! A disaster!”), but to admit, that this is NORMAL and only means that I am just going to learn something!

I like to study. So if difficulties arise and I stop understanding something, this is good, because it means that I will not experience stagnation and stagnation. Here's what it looks like, step by step:

  1. I admit I'm confused.

  2. I clearly define the topic with which the difficulty arose.

  3. I turn my confusion into concrete questions.

  4. I ask someone or study the question myself to get answers.

  5. Done – I learned something new!

Of course, this is not a universal scheme and I do not do this every time. Sometimes I just remark, “Yeah, I'm confused by X. Maybe I'll figure it out someday, but not today.” And that's okay too! Learning is a lifelong project 🙂

Working on these skills makes a huge difference

I don't think I could have had a career as a programmer if I didn't invest in learning new things. I learned almost everything that my routine consists of on my own, and much of it quite recently (in the last 2-3 years). So I try nonstop to improve my cognitive skills. Here are some of them where I am not yet up to the ideal, but I really want it:

  • take a large/complex piece of open source documentation and determine what information is in it and what is not;

  • use open source Slack/IRC groups more effectively;

  • look for useful and reliable reference books to rely on.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *